From 5c22edb7cd3e4a5b237bf5c6409a43e0bf0bade6 Mon Sep 17 00:00:00 2001 From: Lenny Marks Date: Fri, 18 Dec 2009 12:50:55 -0500 Subject: [PATCH] Trashing Driver::Base#response in favor of #response_headers. Not supported by all browsers(e.g. Selenium) --- lib/capybara/driver/base.rb | 6 +++++- lib/capybara/driver/celerity_driver.rb | 10 +++++++--- lib/capybara/driver/rack_test_driver.rb | 4 ++++ lib/capybara/driver/selenium_driver.rb | 8 ++------ spec/driver/celerity_driver_spec.rb | 19 ++++++++++++------- spec/driver/culerity_driver_spec.rb | 11 +++++++++++ spec/driver/rack_test_driver_spec.rb | 1 + spec/drivers_spec.rb | 7 +++++++ 8 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 spec/driver/culerity_driver_spec.rb diff --git a/lib/capybara/driver/base.rb b/lib/capybara/driver/base.rb index dc8bbe71..a6cdd744 100644 --- a/lib/capybara/driver/base.rb +++ b/lib/capybara/driver/base.rb @@ -19,7 +19,11 @@ class Capybara::Driver::Base false end - def response + def response_headers + raise Capybara::NotSupportedByDriverError + end + + def body raise "Not implemented" end diff --git a/lib/capybara/driver/celerity_driver.rb b/lib/capybara/driver/celerity_driver.rb index ad0ea712..86121ad4 100644 --- a/lib/capybara/driver/celerity_driver.rb +++ b/lib/capybara/driver/celerity_driver.rb @@ -59,10 +59,14 @@ class Capybara::Driver::Celerity < Capybara::Driver::Base browser.url end - def response - Rack::MockResponse.new(browser.status_code, browser.response_headers, browser.html) + def body + browser.html end - + + def response_headers + browser.response_headers + end + def find(selector) browser.elements_by_xpath(selector).map { |node| Node.new(self, node) } end diff --git a/lib/capybara/driver/rack_test_driver.rb b/lib/capybara/driver/rack_test_driver.rb index 40ab93f9..9908f132 100644 --- a/lib/capybara/driver/rack_test_driver.rb +++ b/lib/capybara/driver/rack_test_driver.rb @@ -139,6 +139,10 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base def current_url request.url end + + def response_headers + response.headers + end def submit(path, attributes) post(path, attributes) diff --git a/lib/capybara/driver/selenium_driver.rb b/lib/capybara/driver/selenium_driver.rb index 13c1e6b5..b0f78a4b 100644 --- a/lib/capybara/driver/selenium_driver.rb +++ b/lib/capybara/driver/selenium_driver.rb @@ -72,12 +72,8 @@ class Capybara::Driver::Selenium < Capybara::Driver::Base driver.navigate.to(url(path)) end - def response - #Can I get a response code and headers from Selenium? - #Maybe we should just plug in the location here - #and leave more header involved stuff for another driver - #(e.g. celerity) - Rack::MockResponse.new(-1, {}, driver.page_source) + def body + driver.page_source end def current_url diff --git a/spec/driver/celerity_driver_spec.rb b/spec/driver/celerity_driver_spec.rb index 52c62dbf..f177762d 100644 --- a/spec/driver/celerity_driver_spec.rb +++ b/spec/driver/celerity_driver_spec.rb @@ -1,10 +1,15 @@ require File.expand_path('../spec_helper', File.dirname(__FILE__)) -describe Capybara::Driver::Celerity do - before do - @driver = Capybara::Driver::Celerity.new(TestApp) +if RUBY_PLATFORM =~ /java/ + describe Capybara::Driver::Celerity do + before do + @driver = Capybara::Driver::Celerity.new(TestApp) + end + + it_should_behave_like "driver" + it_should_behave_like "driver with javascript support" + it_should_behave_like "driver with header support" end - - it_should_behave_like "driver" - it_should_behave_like "driver with javascript support" -end +else + puts "#{File.basename(__FILE__)} requires JRuby; skipping.." +end \ No newline at end of file diff --git a/spec/driver/culerity_driver_spec.rb b/spec/driver/culerity_driver_spec.rb new file mode 100644 index 00000000..21748e1d --- /dev/null +++ b/spec/driver/culerity_driver_spec.rb @@ -0,0 +1,11 @@ +require File.expand_path('../spec_helper', File.dirname(__FILE__)) + +describe Capybara::Driver::Culerity do + before do + @driver = Capybara::Driver::Culerity.new(TestApp) + end + + it_should_behave_like "driver" + it_should_behave_like "driver with javascript support" + it_should_behave_like "driver with header support" +end diff --git a/spec/driver/rack_test_driver_spec.rb b/spec/driver/rack_test_driver_spec.rb index 5ff01c73..6b822333 100644 --- a/spec/driver/rack_test_driver_spec.rb +++ b/spec/driver/rack_test_driver_spec.rb @@ -6,4 +6,5 @@ describe Capybara::Driver::RackTest do end it_should_behave_like "driver" + it_should_behave_like "driver with header support" end diff --git a/spec/drivers_spec.rb b/spec/drivers_spec.rb index c4a47cc6..bfe88f5a 100644 --- a/spec/drivers_spec.rb +++ b/spec/drivers_spec.rb @@ -92,3 +92,10 @@ shared_examples_for "driver with javascript support" do end end + +shared_examples_for "driver with header support" do + it "should make headers available through response_headers" do + @driver.visit('/with_simple_html') + @driver.response_headers['Content-Type'].should == 'text/html' + end +end