From 072e697130d289432bb429d76b674c8f76e8babe Mon Sep 17 00:00:00 2001 From: Gareth Townsend Date: Mon, 7 Jun 2010 11:13:57 +1000 Subject: [PATCH] Implemented a response_code method in the Capybara::Driver::Base class that raises Capybara::NotSupportedByDriverError. --- lib/capybara/driver/base.rb | 4 ++++ lib/capybara/session.rb | 1 + lib/capybara/spec/driver.rb | 16 ++++++++++++++++ lib/capybara/spec/session/response_code.rb | 19 +++++++++++++++++++ spec/driver/celerity_driver_spec.rb | 1 + spec/driver/culerity_driver_spec.rb | 1 + spec/driver/rack_test_driver_spec.rb | 1 + spec/driver/remote_culerity_driver_spec.rb | 1 + spec/session/celerity_session_spec.rb | 1 + spec/session/culerity_session_spec.rb | 1 + spec/session/rack_test_session_spec.rb | 1 + 11 files changed, 47 insertions(+) create mode 100644 lib/capybara/spec/session/response_code.rb diff --git a/lib/capybara/driver/base.rb b/lib/capybara/driver/base.rb index 3642a580..b7fd9c2a 100644 --- a/lib/capybara/driver/base.rb +++ b/lib/capybara/driver/base.rb @@ -25,6 +25,10 @@ class Capybara::Driver::Base def response_headers raise Capybara::NotSupportedByDriverError end + + def response_code + raise Capybara::NotSupportedByDriverError + end def body raise NotImplementedError diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index dfbc8e52..cf774214 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -35,6 +35,7 @@ module Capybara def_delegator :driver, :cleanup! def_delegator :driver, :current_url def_delegator :driver, :response_headers + def_delegator :driver, :response_code def_delegator :driver, :visit def_delegator :driver, :body def_delegator :driver, :source diff --git a/lib/capybara/spec/driver.rb b/lib/capybara/spec/driver.rb index 1a0eb326..4308fc4e 100644 --- a/lib/capybara/spec/driver.rb +++ b/lib/capybara/spec/driver.rb @@ -130,6 +130,22 @@ shared_examples_for "driver with header support" do end end +shared_examples_for "driver with response code support" do + it "should make the response code available through response_code" do + @driver.visit('/with_simple_html') + @driver.response_code.should == '200' + end +end + +shared_examples_for "driver without response code support" do + it "should raise when trying to access the response code available through response_code" do + @driver.visit('/with_simple_html') + lambda { + @driver.response_code + }.should raise_error(Capybara::NotSupportedByDriverError) + end +end + shared_examples_for "driver with frame support" do describe '#within_frame' do before(:each) do diff --git a/lib/capybara/spec/session/response_code.rb b/lib/capybara/spec/session/response_code.rb new file mode 100644 index 00000000..6842596b --- /dev/null +++ b/lib/capybara/spec/session/response_code.rb @@ -0,0 +1,19 @@ +shared_examples_for "session with response code support" do + describe '#response_code' do + it "should return response codes" do + @session.visit('/with_simple_html') + @session.response_code.should == '200' + end + end +end + +shared_examples_for "session without response code support" do + describe "#response_code" do + before{ @session.visit('/with_simple_html') } + it "should raise an error" do + running { + @session.response_code + }.should raise_error(Capybara::NotSupportedByDriverError) + end + end +end diff --git a/spec/driver/celerity_driver_spec.rb b/spec/driver/celerity_driver_spec.rb index b4166753..2a2dfbd4 100644 --- a/spec/driver/celerity_driver_spec.rb +++ b/spec/driver/celerity_driver_spec.rb @@ -9,6 +9,7 @@ if RUBY_PLATFORM =~ /java/ it_should_behave_like "driver" it_should_behave_like "driver with javascript support" it_should_behave_like "driver with header support" + it_should_behave_like "driver without response code support" end else diff --git a/spec/driver/culerity_driver_spec.rb b/spec/driver/culerity_driver_spec.rb index c01ab97c..a68145ea 100644 --- a/spec/driver/culerity_driver_spec.rb +++ b/spec/driver/culerity_driver_spec.rb @@ -8,5 +8,6 @@ describe Capybara::Driver::Culerity do it_should_behave_like "driver" it_should_behave_like "driver with javascript support" it_should_behave_like "driver with header support" + it_should_behave_like "driver without response code support" end diff --git a/spec/driver/rack_test_driver_spec.rb b/spec/driver/rack_test_driver_spec.rb index 25427519..412d5074 100644 --- a/spec/driver/rack_test_driver_spec.rb +++ b/spec/driver/rack_test_driver_spec.rb @@ -13,5 +13,6 @@ describe Capybara::Driver::RackTest do it_should_behave_like "driver" it_should_behave_like "driver with header support" + it_should_behave_like "driver without response code support" end diff --git a/spec/driver/remote_culerity_driver_spec.rb b/spec/driver/remote_culerity_driver_spec.rb index d3a2c5bd..aebf82b0 100644 --- a/spec/driver/remote_culerity_driver_spec.rb +++ b/spec/driver/remote_culerity_driver_spec.rb @@ -20,4 +20,5 @@ describe Capybara::Driver::Culerity do it_should_behave_like "driver" it_should_behave_like "driver with javascript support" it_should_behave_like "driver with header support" + it_should_behave_like "driver without response code support" end diff --git a/spec/session/celerity_session_spec.rb b/spec/session/celerity_session_spec.rb index d6b8e989..d95c7b71 100644 --- a/spec/session/celerity_session_spec.rb +++ b/spec/session/celerity_session_spec.rb @@ -21,6 +21,7 @@ if RUBY_PLATFORM =~ /java/ it_should_behave_like "session" it_should_behave_like "session with javascript support" it_should_behave_like "session with headers support" + it_should_behave_like "session without response code support" end else puts "#{File.basename(__FILE__)} requires JRuby; skipping.." diff --git a/spec/session/culerity_session_spec.rb b/spec/session/culerity_session_spec.rb index 6bff94fd..f3287f31 100644 --- a/spec/session/culerity_session_spec.rb +++ b/spec/session/culerity_session_spec.rb @@ -21,5 +21,6 @@ describe Capybara::Session do it_should_behave_like "session" it_should_behave_like "session with javascript support" it_should_behave_like "session with headers support" + it_should_behave_like "session without response code support" end end diff --git a/spec/session/rack_test_session_spec.rb b/spec/session/rack_test_session_spec.rb index aca5533a..5a805fc8 100644 --- a/spec/session/rack_test_session_spec.rb +++ b/spec/session/rack_test_session_spec.rb @@ -29,5 +29,6 @@ describe Capybara::Session do it_should_behave_like "session" it_should_behave_like "session without javascript support" it_should_behave_like "session with headers support" + it_should_behave_like "session without response code support" end end