From c7bf8359f29d579cf9cf3463833ecbf9367dc7d6 Mon Sep 17 00:00:00 2001 From: Jonas Nicklas Date: Thu, 6 Sep 2012 09:33:43 +0200 Subject: [PATCH] Support non string arguments Most of this work was done in the xpath gem, this commit really only adds tests. --- lib/capybara/selector.rb | 2 +- lib/capybara/spec/session/attach_file_spec.rb | 6 ++++++ lib/capybara/spec/session/check_spec.rb | 6 ++++++ lib/capybara/spec/session/choose_spec.rb | 6 ++++++ lib/capybara/spec/session/click_button_spec.rb | 6 ++++++ lib/capybara/spec/session/click_link_or_button_spec.rb | 6 ++++++ lib/capybara/spec/session/click_link_spec.rb | 5 +++++ lib/capybara/spec/session/fill_in_spec.rb | 6 ++++++ lib/capybara/spec/session/find_button_spec.rb | 8 ++++++-- lib/capybara/spec/session/find_by_id_spec.rb | 4 ++++ lib/capybara/spec/session/find_field_spec.rb | 4 ++++ lib/capybara/spec/session/find_link_spec.rb | 4 ++++ lib/capybara/spec/session/has_button_spec.rb | 1 + lib/capybara/spec/session/has_field_spec.rb | 1 + lib/capybara/spec/session/has_link_spec.rb | 1 + lib/capybara/spec/session/has_select_spec.rb | 1 + lib/capybara/spec/session/has_table_spec.rb | 1 + lib/capybara/spec/session/has_text_spec.rb | 1 + lib/capybara/spec/session/select_spec.rb | 5 +++++ lib/capybara/spec/session/uncheck_spec.rb | 7 +++++++ lib/capybara/spec/session/unselect_spec.rb | 7 +++++++ xpath | 2 +- 22 files changed, 86 insertions(+), 4 deletions(-) diff --git a/lib/capybara/selector.rb b/lib/capybara/selector.rb index aa7fa692..a1c95f0b 100644 --- a/lib/capybara/selector.rb +++ b/lib/capybara/selector.rb @@ -95,7 +95,7 @@ end Capybara.add_selector(:link) do xpath { |locator| XPath::HTML.link(locator) } filter(:href) do |node, href| - node.first(:xpath, XPath.axis(:self)[XPath.attr(:href).equals(href)]) + node.first(:xpath, XPath.axis(:self)[XPath.attr(:href).equals(href.to_s)]) end end diff --git a/lib/capybara/spec/session/attach_file_spec.rb b/lib/capybara/spec/session/attach_file_spec.rb index 4a0ef1b0..16d52f2c 100644 --- a/lib/capybara/spec/session/attach_file_spec.rb +++ b/lib/capybara/spec/session/attach_file_spec.rb @@ -17,6 +17,12 @@ Capybara::SpecHelper.spec "#attach_file" do @session.click_button('awesome') extract_results(@session)['image'].should == File.basename(__FILE__) end + + it "casts to string" do + @session.attach_file :"form_image", __FILE__ + @session.click_button('awesome') + extract_results(@session)['image'].should == File.basename(__FILE__) + end end context "with multipart form" do diff --git a/lib/capybara/spec/session/check_spec.rb b/lib/capybara/spec/session/check_spec.rb index d6dd5569..a0373894 100644 --- a/lib/capybara/spec/session/check_spec.rb +++ b/lib/capybara/spec/session/check_spec.rb @@ -60,6 +60,12 @@ Capybara::SpecHelper.spec "#check" do extract_results(@session)['pets'].should include('dog', 'cat', 'hamster') end + it "casts to string" do + @session.check(:"form_pets_cat") + @session.click_button('awesome') + extract_results(@session)['pets'].should include('dog', 'cat', 'hamster') + end + context "with a locator that doesn't exist" do it "should raise an error" do msg = "Unable to find checkbox \"does not exist\"" diff --git a/lib/capybara/spec/session/choose_spec.rb b/lib/capybara/spec/session/choose_spec.rb index ad805763..63410779 100644 --- a/lib/capybara/spec/session/choose_spec.rb +++ b/lib/capybara/spec/session/choose_spec.rb @@ -15,6 +15,12 @@ Capybara::SpecHelper.spec "#choose" do extract_results(@session)['gender'].should == 'both' end + it "casts to string" do + @session.choose("Both") + @session.click_button(:'awesome') + extract_results(@session)['gender'].should == 'both' + end + context "with a locator that doesn't exist" do it "should raise an error" do msg = "Unable to find radio button \"does not exist\"" diff --git a/lib/capybara/spec/session/click_button_spec.rb b/lib/capybara/spec/session/click_button_spec.rb index 34d9d017..78be3840 100644 --- a/lib/capybara/spec/session/click_button_spec.rb +++ b/lib/capybara/spec/session/click_button_spec.rb @@ -9,6 +9,12 @@ Capybara::SpecHelper.spec '#click_button' do @session.click_button('New Here') end + it "casts to string" do + @session.click_button(:'Relative Action') + @session.current_path.should == '/relative' + extract_results(@session)['relative'].should == 'Relative Action' + end + context "with multiple values with the same name" do it "should use the latest given value" do @session.check('Terms of Use') diff --git a/lib/capybara/spec/session/click_link_or_button_spec.rb b/lib/capybara/spec/session/click_link_or_button_spec.rb index e142be48..985c5024 100644 --- a/lib/capybara/spec/session/click_link_or_button_spec.rb +++ b/lib/capybara/spec/session/click_link_or_button_spec.rb @@ -29,6 +29,12 @@ Capybara::SpecHelper.spec '#click_link_or_button' do @session.click_link_or_button('Has been clicked') end + it "casts to string" do + @session.visit('/form') + @session.click_link_or_button(:'awe123') + extract_results(@session)['first_name'].should == 'John' + end + context "with a locator that doesn't exist" do it "should raise an error" do @session.visit('/with_html') diff --git a/lib/capybara/spec/session/click_link_spec.rb b/lib/capybara/spec/session/click_link_spec.rb index 293f1a47..284a7625 100644 --- a/lib/capybara/spec/session/click_link_spec.rb +++ b/lib/capybara/spec/session/click_link_spec.rb @@ -9,6 +9,11 @@ Capybara::SpecHelper.spec '#click_link' do @session.click_link('Has been clicked') end + it "casts to string" do + @session.click_link(:'foo') + @session.should have_content('Another World') + end + context "with id given" do it "should take user to the linked page" do @session.click_link('foo') diff --git a/lib/capybara/spec/session/fill_in_spec.rb b/lib/capybara/spec/session/fill_in_spec.rb index 4c3b3141..356e20ff 100644 --- a/lib/capybara/spec/session/fill_in_spec.rb +++ b/lib/capybara/spec/session/fill_in_spec.rb @@ -97,6 +97,12 @@ Capybara::SpecHelper.spec "#fill_in" do @session.fill_in('new_field', :with => 'Testing...') end + it "casts to string" do + @session.fill_in(:'form_first_name', :with => :'Harry') + @session.click_button('awesome') + extract_results(@session)['first_name'].should == 'Harry' + end + context 'on a pre-populated textfield with a reformatting onchange', :requires => [:js] do it 'should only trigger onchange once' do @session.visit('/with_js') diff --git a/lib/capybara/spec/session/find_button_spec.rb b/lib/capybara/spec/session/find_button_spec.rb index 713d18f0..4e6c29c8 100644 --- a/lib/capybara/spec/session/find_button_spec.rb +++ b/lib/capybara/spec/session/find_button_spec.rb @@ -3,12 +3,16 @@ Capybara::SpecHelper.spec '#find_button' do @session.visit('/form') end - it "should find any field" do + it "should find any button" do @session.find_button('med')[:id].should == "mediocre" @session.find_button('crap321').value.should == "crappy" end - it "should raise error if the field doesn't exist" do + it "casts to string" do + @session.find_button(:'med')[:id].should == "mediocre" + end + + it "should raise error if the button doesn't exist" do running do @session.find_button('Does not exist') end.should raise_error(Capybara::ElementNotFound) diff --git a/lib/capybara/spec/session/find_by_id_spec.rb b/lib/capybara/spec/session/find_by_id_spec.rb index a486f56c..70b6a4ea 100644 --- a/lib/capybara/spec/session/find_by_id_spec.rb +++ b/lib/capybara/spec/session/find_by_id_spec.rb @@ -8,6 +8,10 @@ Capybara::SpecHelper.spec '#find_by_id' do @session.find_by_id('hidden_via_ancestor').tag_name.should == 'div' end + it "casts to string" do + @session.find_by_id(:'red').tag_name.should == 'a' + end + it "should raise error if no element with id is found" do running do @session.find_by_id('nothing_with_this_id') diff --git a/lib/capybara/spec/session/find_field_spec.rb b/lib/capybara/spec/session/find_field_spec.rb index 1b9eae63..4eeb847c 100644 --- a/lib/capybara/spec/session/find_field_spec.rb +++ b/lib/capybara/spec/session/find_field_spec.rb @@ -9,6 +9,10 @@ Capybara::SpecHelper.spec '#find_field' do @session.find_field('Region')[:name].should == 'form[region]' end + it "casts to string" do + @session.find_field(:'Dog').value.should == 'dog' + end + it "should raise error if the field doesn't exist" do running do @session.find_field('Does not exist') diff --git a/lib/capybara/spec/session/find_link_spec.rb b/lib/capybara/spec/session/find_link_spec.rb index 12200f7d..ceecfcd6 100644 --- a/lib/capybara/spec/session/find_link_spec.rb +++ b/lib/capybara/spec/session/find_link_spec.rb @@ -8,6 +8,10 @@ Capybara::SpecHelper.spec '#find_link' do @session.find_link('labore')[:href].should =~ %r(/with_simple_html$) end + it "casts to string" do + @session.find_link(:'foo').text.should == "ullamco" + end + it "should raise error if the field doesn't exist" do running do @session.find_link('Does not exist') diff --git a/lib/capybara/spec/session/has_button_spec.rb b/lib/capybara/spec/session/has_button_spec.rb index ecf8691c..d1ba42b8 100644 --- a/lib/capybara/spec/session/has_button_spec.rb +++ b/lib/capybara/spec/session/has_button_spec.rb @@ -6,6 +6,7 @@ Capybara::SpecHelper.spec '#has_button?' do it "should be true if the given button is on the page" do @session.should have_button('med') @session.should have_button('crap321') + @session.should have_button(:'crap321') end it "should be false if the given button is not on the page" do diff --git a/lib/capybara/spec/session/has_field_spec.rb b/lib/capybara/spec/session/has_field_spec.rb index 943a6040..f4e3dbd9 100644 --- a/lib/capybara/spec/session/has_field_spec.rb +++ b/lib/capybara/spec/session/has_field_spec.rb @@ -5,6 +5,7 @@ Capybara::SpecHelper.spec '#has_field' do @session.should have_field('Dog') @session.should have_field('form_description') @session.should have_field('Region') + @session.should have_field(:'Region') end it "should be false if the field is not on the page" do diff --git a/lib/capybara/spec/session/has_link_spec.rb b/lib/capybara/spec/session/has_link_spec.rb index b0a9f0c2..c7f206c8 100644 --- a/lib/capybara/spec/session/has_link_spec.rb +++ b/lib/capybara/spec/session/has_link_spec.rb @@ -7,6 +7,7 @@ Capybara::SpecHelper.spec '#has_link?' do @session.should have_link('foo') @session.should have_link('awesome title') @session.should have_link('A link', :href => '/with_simple_html') + @session.should have_link(:'A link', :href => :'/with_simple_html') end it "should be false if the given link is not on the page" do diff --git a/lib/capybara/spec/session/has_select_spec.rb b/lib/capybara/spec/session/has_select_spec.rb index 72626d4f..0a6ac28c 100644 --- a/lib/capybara/spec/session/has_select_spec.rb +++ b/lib/capybara/spec/session/has_select_spec.rb @@ -5,6 +5,7 @@ Capybara::SpecHelper.spec '#has_select?' do @session.should have_select('Locale') @session.should have_select('form_region') @session.should have_select('Languages') + @session.should have_select(:'Languages') end it "should be false if the field is not on the page" do diff --git a/lib/capybara/spec/session/has_table_spec.rb b/lib/capybara/spec/session/has_table_spec.rb index eabf2031..1da566e1 100644 --- a/lib/capybara/spec/session/has_table_spec.rb +++ b/lib/capybara/spec/session/has_table_spec.rb @@ -6,6 +6,7 @@ Capybara::SpecHelper.spec '#has_table?' do it "should be true if the table is on the page" do @session.should have_table('Villain') @session.should have_table('villain_table') + @session.should have_table(:'villain_table') end it "should be false if the table is not on the page" do diff --git a/lib/capybara/spec/session/has_text_spec.rb b/lib/capybara/spec/session/has_text_spec.rb index 5155a96c..be429d9f 100644 --- a/lib/capybara/spec/session/has_text_spec.rb +++ b/lib/capybara/spec/session/has_text_spec.rb @@ -4,6 +4,7 @@ Capybara::SpecHelper.spec '#has_text?' do @session.should have_text('est') @session.should have_text('Lorem') @session.should have_text('Redirect') + @session.should have_text(:'Redirect') end it "should be true if scoped to an element which has the text" do diff --git a/lib/capybara/spec/session/select_spec.rb b/lib/capybara/spec/session/select_spec.rb index df8d2164..03fd9e51 100644 --- a/lib/capybara/spec/session/select_spec.rb +++ b/lib/capybara/spec/session/select_spec.rb @@ -54,6 +54,11 @@ Capybara::SpecHelper.spec "#select" do extract_results(@session)['locale'].should == 'jbo' end + it "casts to string" do + @session.select(:"Miss", :from => :'Title') + @session.find_field('Title').value.should == 'Miss' + end + context "with a locator that doesn't exist" do it "should raise an error" do msg = "Unable to find select box \"does not exist\"" diff --git a/lib/capybara/spec/session/uncheck_spec.rb b/lib/capybara/spec/session/uncheck_spec.rb index ca405e89..64e677b7 100644 --- a/lib/capybara/spec/session/uncheck_spec.rb +++ b/lib/capybara/spec/session/uncheck_spec.rb @@ -16,4 +16,11 @@ Capybara::SpecHelper.spec "#uncheck" do extract_results(@session)['pets'].should include('dog') extract_results(@session)['pets'].should_not include('hamster') end + + it "casts to string" do + @session.uncheck(:"form_pets_hamster") + @session.click_button('awesome') + extract_results(@session)['pets'].should include('dog') + extract_results(@session)['pets'].should_not include('hamster') + end end diff --git a/lib/capybara/spec/session/unselect_spec.rb b/lib/capybara/spec/session/unselect_spec.rb index b43045ef..06cabefb 100644 --- a/lib/capybara/spec/session/unselect_spec.rb +++ b/lib/capybara/spec/session/unselect_spec.rb @@ -37,6 +37,13 @@ Capybara::SpecHelper.spec "#unselect" do @session.click_button('awesome') extract_results(@session)['underwear'].should_not include("Frenchman's Pantalons") end + + it "casts to string" do + @session.unselect(:"Briefs", :from => :'Underwear') + @session.click_button('awesome') + extract_results(@session)['underwear'].should include('Commando', 'Boxerbriefs') + extract_results(@session)['underwear'].should_not include('Briefs') + end end context "with single select" do diff --git a/xpath b/xpath index 8a9d7ccc..6873e165 160000 --- a/xpath +++ b/xpath @@ -1 +1 @@ -Subproject commit 8a9d7ccce7183bed900dd337db1553e20f504273 +Subproject commit 6873e1655e1945b624673956a0595e64b865d64a