From fe5e308f41ed2070209bdc773072664ddc4ad0a2 Mon Sep 17 00:00:00 2001 From: Jonas Nicklas Date: Sat, 10 Jul 2010 03:11:54 +0200 Subject: [PATCH] Rearranged drivers a little bit --- lib/capybara/driver/base.rb | 30 ++++++++----------- lib/capybara/driver/celerity_driver.rb | 2 +- lib/capybara/driver/node.rb | 2 +- lib/capybara/driver/rack_test_driver.rb | 2 +- lib/capybara/driver/selenium_driver.rb | 2 +- lib/capybara/session.rb | 5 +++- lib/capybara/spec/driver.rb | 29 ------------------ lib/capybara/spec/session/current_url_spec.rb | 7 +++++ 8 files changed, 28 insertions(+), 51 deletions(-) diff --git a/lib/capybara/driver/base.rb b/lib/capybara/driver/base.rb index f5d10526..bfde18e8 100644 --- a/lib/capybara/driver/base.rb +++ b/lib/capybara/driver/base.rb @@ -3,10 +3,6 @@ class Capybara::Driver::Base raise NotImplementedError end - def current_path - URI.parse(current_url).path - end - def visit(path) raise NotImplementedError end @@ -15,6 +11,14 @@ class Capybara::Driver::Base raise NotImplementedError end + def source + raise NotImplementedError + end + + def body + raise NotImplementedError + end + def execute_script(script) raise Capybara::NotSupportedByDriverError end @@ -23,13 +27,6 @@ class Capybara::Driver::Base raise Capybara::NotSupportedByDriverError end - def wait? - false - end - - def wait_until *args - end - def response_headers raise Capybara::NotSupportedByDriverError end @@ -38,16 +35,15 @@ class Capybara::Driver::Base raise Capybara::NotSupportedByDriverError end - def body - raise NotImplementedError - end - def within_frame(frame_id) raise Capybara::NotSupportedByDriverError end - def source - raise NotImplementedError + def wait? + false + end + + def wait_until(*args) end def cleanup! diff --git a/lib/capybara/driver/celerity_driver.rb b/lib/capybara/driver/celerity_driver.rb index 5040bea6..0d7046b1 100644 --- a/lib/capybara/driver/celerity_driver.rb +++ b/lib/capybara/driver/celerity_driver.rb @@ -17,7 +17,7 @@ class Capybara::Driver::Celerity < Capybara::Driver::Base if tag_name == "select" and node.multiple? node.selected_options else - super + self[:value] end end diff --git a/lib/capybara/driver/node.rb b/lib/capybara/driver/node.rb index 3b7ffa69..744e3974 100644 --- a/lib/capybara/driver/node.rb +++ b/lib/capybara/driver/node.rb @@ -17,7 +17,7 @@ module Capybara end def value - self[:value] + raise NotImplementedError end def set(value) diff --git a/lib/capybara/driver/rack_test_driver.rb b/lib/capybara/driver/rack_test_driver.rb index ff8c08cd..202e2176 100644 --- a/lib/capybara/driver/rack_test_driver.rb +++ b/lib/capybara/driver/rack_test_driver.rb @@ -30,7 +30,7 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base if tag_name == 'textarea' node.content else - super + self[:value] end end diff --git a/lib/capybara/driver/selenium_driver.rb b/lib/capybara/driver/selenium_driver.rb index 2b8d7ffc..35f8d7c2 100644 --- a/lib/capybara/driver/selenium_driver.rb +++ b/lib/capybara/driver/selenium_driver.rb @@ -20,7 +20,7 @@ class Capybara::Driver::Selenium < Capybara::Driver::Base if tag_name == "select" and self[:multiple] node.find_elements(:xpath, ".//option").select { |n| n.selected? }.map { |n| n.text } else - super + self[:value] end end diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index 7b457a86..003b0472 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -33,7 +33,6 @@ module Capybara def_delegator :driver, :cleanup! def_delegator :driver, :current_url - def_delegator :driver, :current_path def_delegator :driver, :response_headers def_delegator :driver, :status_code def_delegator :driver, :visit @@ -52,6 +51,10 @@ module Capybara super || current_node.respond_to?(method) end + def current_path + URI.parse(current_url).path + end + def within(kind, scope=nil) new_scope = locate(kind, scope, "scope '#{scope || kind}' not found on page") begin diff --git a/lib/capybara/spec/driver.rb b/lib/capybara/spec/driver.rb index c2beaf88..4f769dd4 100644 --- a/lib/capybara/spec/driver.rb +++ b/lib/capybara/spec/driver.rb @@ -1,9 +1,5 @@ require 'capybara/spec/test_app' -Dir[File.dirname(__FILE__)+'/driver/*'].each { |group| - require group -} - shared_examples_for 'driver' do describe '#visit' do @@ -18,11 +14,6 @@ shared_examples_for 'driver' do @driver.visit('/foo') @driver.current_url.should include('/foo') end - - it 'should show the correct location' do - @driver.visit('/foo') - @driver.current_path.should == '/foo' - end end describe '#body' do @@ -84,26 +75,6 @@ shared_examples_for 'driver' do end end end - - describe "node relative searching" do - before do - @driver.visit('/tables') - @node = @driver.find('//body').first - end - - it "should be able to navigate/search child node" do - @node.all('//table').size.should == 5 - @node.find('//form').all('.//table').size.should == 1 - @node.find('//form').find('.//table//caption').text.should == 'Agent' - if @driver.class == Capybara::Driver::Selenium - pending("Selenium gets this wrong, see http://code.google.com/p/selenium/issues/detail?id=403") do - @node.find('//form').all('//table').size.should == 5 - end - else - @node.find('//form').all('//table').size.should == 5 - end - end - end end shared_examples_for "driver with javascript support" do diff --git a/lib/capybara/spec/session/current_url_spec.rb b/lib/capybara/spec/session/current_url_spec.rb index c514d3ea..f4ce7983 100644 --- a/lib/capybara/spec/session/current_url_spec.rb +++ b/lib/capybara/spec/session/current_url_spec.rb @@ -5,4 +5,11 @@ shared_examples_for "current_url" do @session.current_url.should =~ %r(http://[^/]+/form) end end + + describe '#current_path' do + it 'should show the correct location' do + @session.visit('/foo') + @session.current_path.should == '/foo' + end + end end