From f09ba1563793845db4b725ba36700bca70f78dbf Mon Sep 17 00:00:00 2001 From: Moreno Carullo Date: Thu, 6 Oct 2011 17:07:20 +0200 Subject: [PATCH] Support compiling on windows. --- .gitignore | 4 +++- Gemfile.lock | 3 ++- lib/capybara/driver/webkit/browser.rb | 10 +++++++++- lib/capybara_webkit_builder.rb | 13 ++++++++++++- spec/browser_spec.rb | 3 ++- spec/spec_helper.rb | 7 ++++++- 6 files changed, 34 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index c7bb96b..00c4d20 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ *.swp -bin/webkit_server +bin/webkit_server* *.swo *~ *.o @@ -12,6 +12,8 @@ moc_*.cpp .bundle pkg src/webkit_server +src/webkit_server.exe .DS_Store tmp .rvmrc +src/debug \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index cf45214..ed69d55 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - capybara-webkit (0.10.1) + capybara-webkit (0.11.0) capybara (>= 1.0.0, < 1.2) json @@ -56,6 +56,7 @@ GEM PLATFORMS ruby + x86-mingw32 DEPENDENCIES appraisal (~> 0.4.0) diff --git a/lib/capybara/driver/webkit/browser.rb b/lib/capybara/driver/webkit/browser.rb index 1673812..9d0c2fc 100644 --- a/lib/capybara/driver/webkit/browser.rb +++ b/lib/capybara/driver/webkit/browser.rb @@ -147,11 +147,19 @@ class Capybara::Driver::Webkit pipe end + def kill_process(pid) + if RUBY_PLATFORM =~ /mingw32/ + Process.kill(9, pid) + else + Process.kill("INT", pid) + end + end + def register_shutdown_hook @owner_pid = Process.pid at_exit do if Process.pid == @owner_pid - Process.kill("INT", @pid) + kill_process(@pid) end end end diff --git a/lib/capybara_webkit_builder.rb b/lib/capybara_webkit_builder.rb index 1ff8148..68aaa6e 100644 --- a/lib/capybara_webkit_builder.rb +++ b/lib/capybara_webkit_builder.rb @@ -22,6 +22,8 @@ module CapybaraWebkitBuilder "linux-g++" when /freebsd/ "freebsd-g++" + when /mingw32/ + "win32-g++" else "macx-g++" end @@ -35,11 +37,20 @@ module CapybaraWebkitBuilder system("LANG='en_US.UTF-8' #{make_bin} qmake") end + def path_to_binary + case RUBY_PLATFORM + when /mingw32/ + "src/debug/webkit_server.exe" + else + "src/webkit_server" + end + end + def build system(make_bin) or return false FileUtils.mkdir("bin") unless File.directory?("bin") - FileUtils.cp("src/webkit_server", "bin", :preserve => true) + FileUtils.cp(path_to_binary, "bin", :preserve => true) end def build_all diff --git a/spec/browser_spec.rb b/spec/browser_spec.rb index 0f133ac..783b566 100644 --- a/spec/browser_spec.rb +++ b/spec/browser_spec.rb @@ -81,7 +81,8 @@ describe Capybara::Driver::Webkit::Browser do browser_ignore_ssl_err.visit "https://#{@host}:#{@port}/" end end - describe "forking" do + + describe "forking", :skip_on_windows => true do it "only shuts down the server from the main process" do browser.reset! pid = fork {} diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2a35c71..89a1361 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,6 @@ require 'rspec' require 'rspec/autorun' +require 'rbconfig' PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze @@ -15,7 +16,11 @@ $:.detect do |dir| end end -require File.join(spec_dir,"spec_helper") +RSpec.configure do |c| + c.filter_run_excluding :skip_on_windows => !(RbConfig::CONFIG['host_os'] =~ /mingw32/).nil? +end + +require File.join(spec_dir, "spec_helper") require 'capybara/driver/webkit/browser' $webkit_browser = Capybara::Driver::Webkit::Browser.new(:socket_class => TCPSocket, :stdout => nil)