capybara 1.1.4 → 2.0.0.beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. data/History.txt +100 -0
  2. data/License.txt +22 -0
  3. data/README.md +829 -0
  4. data/lib/capybara.rb +124 -6
  5. data/lib/capybara/cucumber.rb +2 -5
  6. data/lib/capybara/driver/base.rb +5 -5
  7. data/lib/capybara/driver/node.rb +2 -2
  8. data/lib/capybara/dsl.rb +3 -121
  9. data/lib/capybara/node/actions.rb +12 -28
  10. data/lib/capybara/node/base.rb +5 -13
  11. data/lib/capybara/node/element.rb +21 -21
  12. data/lib/capybara/node/finders.rb +27 -89
  13. data/lib/capybara/node/matchers.rb +107 -69
  14. data/lib/capybara/node/simple.rb +11 -13
  15. data/lib/capybara/query.rb +78 -0
  16. data/lib/capybara/rack_test/browser.rb +16 -27
  17. data/lib/capybara/rack_test/driver.rb +11 -1
  18. data/lib/capybara/rack_test/node.rb +17 -1
  19. data/lib/capybara/result.rb +84 -0
  20. data/lib/capybara/rspec/matchers.rb +28 -63
  21. data/lib/capybara/selector.rb +97 -33
  22. data/lib/capybara/selenium/driver.rb +14 -61
  23. data/lib/capybara/selenium/node.rb +6 -15
  24. data/lib/capybara/server.rb +32 -27
  25. data/lib/capybara/session.rb +54 -30
  26. data/lib/capybara/spec/public/jquery-ui.js +791 -0
  27. data/lib/capybara/spec/public/jquery.js +9046 -0
  28. data/lib/capybara/spec/public/test.js +4 -1
  29. data/lib/capybara/spec/session.rb +56 -27
  30. data/lib/capybara/spec/session/all_spec.rb +8 -4
  31. data/lib/capybara/spec/session/attach_file_spec.rb +12 -9
  32. data/lib/capybara/spec/session/check_spec.rb +6 -3
  33. data/lib/capybara/spec/session/choose_spec.rb +4 -1
  34. data/lib/capybara/spec/session/click_button_spec.rb +5 -14
  35. data/lib/capybara/spec/session/click_link_or_button_spec.rb +2 -1
  36. data/lib/capybara/spec/session/click_link_spec.rb +3 -17
  37. data/lib/capybara/spec/session/current_url_spec.rb +77 -9
  38. data/lib/capybara/spec/session/fill_in_spec.rb +8 -18
  39. data/lib/capybara/spec/session/find_spec.rb +19 -46
  40. data/lib/capybara/spec/session/first_spec.rb +2 -34
  41. data/lib/capybara/spec/session/has_css_spec.rb +1 -1
  42. data/lib/capybara/spec/session/has_field_spec.rb +28 -0
  43. data/lib/capybara/spec/session/has_select_spec.rb +84 -31
  44. data/lib/capybara/spec/session/has_table_spec.rb +7 -69
  45. data/lib/capybara/spec/session/has_text_spec.rb +168 -0
  46. data/lib/capybara/spec/session/javascript.rb +65 -81
  47. data/lib/capybara/spec/session/node_spec.rb +115 -0
  48. data/lib/capybara/spec/session/screenshot.rb +29 -0
  49. data/lib/capybara/spec/session/select_spec.rb +12 -12
  50. data/lib/capybara/spec/session/text_spec.rb +9 -4
  51. data/lib/capybara/spec/session/unselect_spec.rb +12 -6
  52. data/lib/capybara/spec/session/visit_spec.rb +76 -0
  53. data/lib/capybara/spec/session/within_frame_spec.rb +33 -0
  54. data/lib/capybara/spec/session/within_spec.rb +47 -58
  55. data/lib/capybara/spec/session/within_window_spec.rb +40 -0
  56. data/lib/capybara/spec/test_app.rb +27 -3
  57. data/lib/capybara/spec/views/form.erb +11 -10
  58. data/lib/capybara/spec/views/host_links.erb +2 -2
  59. data/lib/capybara/spec/views/tables.erb +6 -66
  60. data/lib/capybara/spec/views/with_html.erb +3 -3
  61. data/lib/capybara/spec/views/with_js.erb +11 -8
  62. data/lib/capybara/util/save_and_open_page.rb +4 -3
  63. data/lib/capybara/version.rb +1 -1
  64. data/spec/basic_node_spec.rb +15 -3
  65. data/spec/dsl_spec.rb +12 -10
  66. data/spec/rack_test_spec.rb +152 -0
  67. data/spec/rspec/features_spec.rb +0 -2
  68. data/spec/rspec/matchers_spec.rb +164 -89
  69. data/spec/rspec_spec.rb +0 -2
  70. data/spec/selenium_spec.rb +67 -0
  71. data/spec/server_spec.rb +35 -23
  72. data/spec/spec_helper.rb +18 -2
  73. metadata +30 -30
  74. data/README.rdoc +0 -722
  75. data/lib/capybara/spec/driver.rb +0 -301
  76. data/lib/capybara/spec/session/current_host_spec.rb +0 -68
  77. data/lib/capybara/spec/session/has_content_spec.rb +0 -106
  78. data/lib/capybara/util/timeout.rb +0 -27
  79. data/spec/driver/rack_test_driver_spec.rb +0 -89
  80. data/spec/driver/selenium_driver_spec.rb +0 -37
  81. data/spec/session/rack_test_session_spec.rb +0 -55
  82. data/spec/session/selenium_session_spec.rb +0 -26
  83. data/spec/string_spec.rb +0 -77
  84. data/spec/timeout_spec.rb +0 -28
@@ -17,9 +17,9 @@ shared_examples_for "fill_in" do
17
17
  end
18
18
 
19
19
  it "should fill in a text field by label without for" do
20
- @session.fill_in('Street', :with => 'Avenue Q')
20
+ @session.fill_in('First Name', :with => 'Harry')
21
21
  @session.click_button('awesome')
22
- extract_results(@session)['street'].should == 'Avenue Q'
22
+ extract_results(@session)['first_name'].should == 'Harry'
23
23
  end
24
24
 
25
25
  it "should fill in a url field by label without for" do
@@ -28,12 +28,6 @@ shared_examples_for "fill_in" do
28
28
  extract_results(@session)['html5_url'].should == 'http://www.avenueq.com'
29
29
  end
30
30
 
31
- it "should favour exact label matches over partial matches" do
32
- @session.fill_in('Name', :with => 'Harry Jones')
33
- @session.click_button('awesome')
34
- extract_results(@session)['name'].should == 'Harry Jones'
35
- end
36
-
37
31
  it "should fill in a textarea by id" do
38
32
  @session.fill_in('form_description', :with => 'Texty text')
39
33
  @session.click_button('awesome')
@@ -93,32 +87,28 @@ shared_examples_for "fill_in" do
93
87
  @session.click_button('awesome')
94
88
  extract_results(@session)['password'].should == 'supasikrit'
95
89
  end
96
-
97
- it "should prefer exact matches over partial matches" do
98
- @session.fill_in('Name', :with => 'Ford Prefect')
99
- @session.click_button('awesome')
100
- extract_results(@session)['name'].should == 'Ford Prefect'
101
- end
102
-
90
+
103
91
  it "should throw an exception if a hash containing 'with' is not provided" do
104
92
  lambda{@session.fill_in 'Name', 'ignu'}.should raise_error
105
93
  end
106
-
94
+
107
95
  context "with ignore_hidden_fields" do
108
96
  before { Capybara.ignore_hidden_elements = true }
109
97
  after { Capybara.ignore_hidden_elements = false }
110
98
  it "should not find a hidden field" do
99
+ msg = "Unable to find field \"Super Secret\""
111
100
  running do
112
101
  @session.fill_in('Super Secret', :with => '777')
113
- end.should raise_error(Capybara::ElementNotFound)
102
+ end.should raise_error(Capybara::ElementNotFound, msg)
114
103
  end
115
104
  end
116
105
 
117
106
  context "with a locator that doesn't exist" do
118
107
  it "should raise an error" do
108
+ msg = "Unable to find field \"does not exist\""
119
109
  running do
120
110
  @session.fill_in('does not exist', :with => 'Blah blah')
121
- end.should raise_error(Capybara::ElementNotFound)
111
+ end.should raise_error(Capybara::ElementNotFound, msg)
122
112
  end
123
113
  end
124
114
  end
@@ -15,29 +15,11 @@ shared_examples_for "find" do
15
15
 
16
16
  it "should find the first element using the given locator and options" do
17
17
  @session.find('//a', :text => 'Redirect')[:id].should == 'red'
18
- @session.find(:css, 'a', :text => 'A link')[:title].should == 'twas a fine link'
18
+ @session.find(:css, 'a', :text => 'A link came first')[:title].should == 'twas a fine link'
19
19
  end
20
20
 
21
- describe 'the returned node' do
22
- it "should act like a session object" do
23
- @session.visit('/form')
24
- @form = @session.find(:css, '#get-form')
25
- @form.should have_field('Middle Name')
26
- @form.should have_no_field('Languages')
27
- @form.fill_in('Middle Name', :with => 'Monkey')
28
- @form.click_button('med')
29
- extract_results(@session)['middle_name'].should == 'Monkey'
30
- end
31
-
32
- it "should scope CSS selectors" do
33
- @session.find(:css, '#second').should have_no_css('h1')
34
- end
35
-
36
- it "should have a reference to its parent if there is one" do
37
- @node = @session.find(:css, '#first')
38
- @node.parent.should == @node.session.document
39
- @node.find('a').parent.should == @node
40
- end
21
+ it "should raise an error if there are multiple matches" do
22
+ expect { @session.find('//a') }.to raise_error(Capybara::Ambiguous)
41
23
  end
42
24
 
43
25
  context "with css selectors" do
@@ -85,25 +67,22 @@ shared_examples_for "find" do
85
67
  end
86
68
  end
87
69
 
88
- context "with custom selector with failure_message option" do
89
- it "should raise an error with the failure message if the element is not found" do
70
+ context "with custom selector with custom filter" do
71
+ before do
90
72
  Capybara.add_selector(:monkey) do
91
73
  xpath { |num| ".//*[contains(@id, 'monkey')][#{num}]" }
92
- failure_message { |node, selector| node.all(".//*[contains(@id, 'monkey')]").map { |node| node.text }.sort.join(', ') }
74
+ filter(:name) { |node, name| node.text == name }
93
75
  end
94
- running do
95
- @session.find(:monkey, '14').text.should == 'Monkey Paul'
96
- end.should raise_error(Capybara::ElementNotFound, "Monkey John, Monkey Paul")
97
76
  end
98
77
 
99
- it "should pass the selector as the second argument" do
100
- Capybara.add_selector(:monkey) do
101
- xpath { |num| ".//*[contains(@id, 'monkey')][#{num}]" }
102
- failure_message { |node, selector| selector.name.to_s + ': ' + selector.locator + ' - ' + node.all(".//*[contains(@id, 'monkey')]").map { |node| node.text }.sort.join(', ') }
103
- end
104
- running do
105
- @session.find(:monkey, '14').text.should == 'Monkey Paul'
106
- end.should raise_error(Capybara::ElementNotFound, "monkey: 14 - Monkey John, Monkey Paul")
78
+ it "should find elements that match the filter" do
79
+ @session.find(:monkey, '1', :name => 'Monkey John').text.should == 'Monkey John'
80
+ @session.find(:monkey, '2', :name => 'Monkey Paul').text.should == 'Monkey Paul'
81
+ end
82
+
83
+ it "should not find elements that don't match the filter" do
84
+ expect { @session.find(:monkey, '2', :name => 'Monkey John') }.to raise_error(Capybara::ElementNotFound)
85
+ expect { @session.find(:monkey, '1', :name => 'Monkey Paul') }.to raise_error(Capybara::ElementNotFound)
107
86
  end
108
87
  end
109
88
 
@@ -116,22 +95,16 @@ shared_examples_for "find" do
116
95
  after { Capybara.default_selector = :xpath }
117
96
  end
118
97
 
119
- it "should raise ElementNotFound with specified fail message if nothing was found" do
120
- running do
121
- @session.find(:xpath, '//div[@id="nosuchthing"]', :message => 'arghh').should be_nil
122
- end.should raise_error(Capybara::ElementNotFound, "arghh")
123
- end
124
-
125
98
  it "should raise ElementNotFound with a useful default message if nothing was found" do
126
99
  running do
127
100
  @session.find(:xpath, '//div[@id="nosuchthing"]').should be_nil
128
101
  end.should raise_error(Capybara::ElementNotFound, "Unable to find xpath \"//div[@id=\\\"nosuchthing\\\"]\"")
129
102
  end
130
103
 
131
- it "should accept an XPath instance and respect the order of paths" do
104
+ it "should accept an XPath instance" do
132
105
  @session.visit('/form')
133
- @xpath = XPath::HTML.fillable_field('Name')
134
- @session.find(@xpath).value.should == 'John Smith'
106
+ @xpath = XPath::HTML.fillable_field('First Name')
107
+ @session.find(@xpath).value.should == 'John'
135
108
  end
136
109
 
137
110
  context "within a scope" do
@@ -139,9 +112,9 @@ shared_examples_for "find" do
139
112
  @session.visit('/with_scope')
140
113
  end
141
114
 
142
- it "should find the first element using the given locator" do
115
+ it "should find the an element using the given locator" do
143
116
  @session.within(:xpath, "//div[@id='for_bar']") do
144
- @session.find('.//li').text.should =~ /With Simple HTML/
117
+ @session.find('.//li[1]').text.should =~ /With Simple HTML/
145
118
  end
146
119
  end
147
120
  end
@@ -15,8 +15,8 @@ shared_examples_for "first" do
15
15
 
16
16
  it "should accept an XPath instance" do
17
17
  @session.visit('/form')
18
- @xpath = XPath::HTML.fillable_field('Name')
19
- @session.first(@xpath).value.should == 'John Smith'
18
+ @xpath = XPath::HTML.fillable_field('First Name')
19
+ @session.first(@xpath).value.should == 'John'
20
20
  end
21
21
 
22
22
  context "with css selectors" do
@@ -58,38 +58,6 @@ shared_examples_for "first" do
58
58
  end
59
59
  end
60
60
 
61
- context "with prefer visible elements" do
62
- it "should find invisible elements if no visible element exists" do
63
- @session.first(:css, 'a#invisible')[:id].should == 'invisible'
64
- end
65
-
66
- it "should prefer visible elements over invisible elements" do
67
- @session.first(:css, 'a.visibility')[:id].should == 'visible'
68
- end
69
-
70
- it "should return the first invisible element if no visible elements exist" do
71
- @session.first(:css, 'a.hidden')[:id].should == 'first_invisble'
72
- end
73
-
74
- it "find visible links normally" do
75
- @session.first(:css, 'a#visible')[:id].should == 'visible'
76
- end
77
- end
78
-
79
- context "without prefer visible elements" do
80
- before { Capybara.prefer_visible_elements = false }
81
-
82
- it "should find invisible elements if no visible element exists" do
83
- @session.first(:css, 'a#invisible')[:id].should == 'invisible'
84
- end
85
-
86
- it "should not prefer visible elements over invisible elements" do
87
- @session.first(:css, 'a.visibility')[:id].should == 'invisible'
88
- end
89
-
90
- after { Capybara.prefer_visible_elements = true }
91
- end
92
-
93
61
  context "within a scope" do
94
62
  before do
95
63
  @session.visit('/with_scope')
@@ -1,4 +1,4 @@
1
- shared_examples_for "has_css" do
1
+ shared_examples_for "has_css" do
2
2
  describe '#has_css?' do
3
3
  before do
4
4
  @session.visit('/with_html')
@@ -36,6 +36,20 @@ shared_examples_for "has_field" do
36
36
  @session.should_not have_field('First Name', :with => 'John')
37
37
  end
38
38
  end
39
+
40
+ context 'with type' do
41
+ it "should be true if a field with the given type is on the page" do
42
+ @session.should have_field('First Name', :type => 'text')
43
+ @session.should have_field('Html5 Email', :type => 'email')
44
+ @session.should have_field('Html5 Tel', :type => 'tel')
45
+ end
46
+
47
+ it "should be false if the given field is not on the page" do
48
+ @session.should_not have_field('First Name', :type => 'email')
49
+ @session.should_not have_field('Html5 Email', :type => 'tel')
50
+ @session.should_not have_field('Description', :type => '')
51
+ end
52
+ end
39
53
  end
40
54
 
41
55
  describe '#has_no_field' do
@@ -75,6 +89,20 @@ shared_examples_for "has_field" do
75
89
  @session.should have_no_field('First Name', :with => 'John')
76
90
  end
77
91
  end
92
+
93
+ context 'with type' do
94
+ it "should be false if a field with the given type is on the page" do
95
+ @session.should_not have_no_field('First Name', :type => 'text')
96
+ @session.should_not have_no_field('Html5 Email', :type => 'email')
97
+ @session.should_not have_no_field('Html5 Tel', :type => 'tel')
98
+ end
99
+
100
+ it "should be true if the given field is not on the page" do
101
+ @session.should have_no_field('First Name', :type => 'email')
102
+ @session.should have_no_field('Html5 Email', :type => 'tel')
103
+ @session.should have_no_field('Description', :type => '')
104
+ end
105
+ end
78
106
  end
79
107
 
80
108
  describe '#has_checked_field?' do
@@ -1,4 +1,4 @@
1
- shared_examples_for "has_select" do
1
+ shared_examples_for "has_select" do
2
2
  describe '#has_select?' do
3
3
  before { @session.visit('/form') }
4
4
 
@@ -14,17 +14,26 @@ shared_examples_for "has_select" do
14
14
 
15
15
  context 'with selected value' do
16
16
  it "should be true if a field with the given value is on the page" do
17
- @session.should have_select('form_locale', :selected => 'English')
18
- @session.should have_select('Region', :selected => 'Norway')
19
- @session.should have_select('Underwear', :selected => ['Briefs', 'Commando'])
17
+ @session.should have_select('form_locale', :selected => 'English')
18
+ @session.should have_select('Region', :selected => 'Norway')
19
+ @session.should have_select('Underwear', :selected => [
20
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
21
+ ])
20
22
  end
21
23
 
22
24
  it "should be false if the given field is not on the page" do
23
- @session.should_not have_select('Locale', :selected => 'Swedish')
24
- @session.should_not have_select('Does not exist', :selected => 'John')
25
+ @session.should_not have_select('Locale', :selected => 'Swedish')
26
+ @session.should_not have_select('Does not exist', :selected => 'John')
25
27
  @session.should_not have_select('City', :selected => 'Not there')
26
- @session.should_not have_select('Underwear', :selected => ['Briefs', 'Nonexistant'])
27
- @session.should_not have_select('Underwear', :selected => ['Briefs', 'Boxers'])
28
+ @session.should_not have_select('Underwear', :selected => [
29
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns', 'Nonexistant'
30
+ ])
31
+ @session.should_not have_select('Underwear', :selected => [
32
+ 'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
33
+ ])
34
+ @session.should_not have_select('Underwear', :selected => [
35
+ 'Boxerbriefs', 'Briefs','Commando', "Frenchman's Pantalons"
36
+ ])
28
37
  end
29
38
 
30
39
  it "should be true after the given value is selected" do
@@ -39,25 +48,44 @@ shared_examples_for "has_select" do
39
48
 
40
49
  it "should be true after the given values are selected" do
41
50
  @session.select('Boxers', :from => 'Underwear')
42
- @session.should have_select('Underwear', :selected => ['Briefs', 'Boxers', 'Commando'])
51
+ @session.should have_select('Underwear', :selected => [
52
+ 'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
53
+ ])
43
54
  end
44
55
 
45
56
  it "should be false after one of the values is unselected" do
46
57
  @session.unselect('Briefs', :from => 'Underwear')
47
- @session.should_not have_select('Underwear', :selected => ['Briefs', 'Commando'])
58
+ @session.should_not have_select('Underwear', :selected => [
59
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
60
+ ])
48
61
  end
49
62
  end
50
63
 
51
- context 'with options' do
64
+ context 'with exact options' do
52
65
  it "should be true if a field with the given options is on the page" do
53
- @session.should have_select('form_locale', :options => ['English'])
54
- @session.should have_select('Region', :options => ['Norway', 'Sweden'])
66
+ @session.should have_select('Region', :options => ['Norway', 'Sweden', 'Finland'])
67
+ @session.should have_select('Tendency', :options => [])
55
68
  end
56
69
 
57
70
  it "should be false if the given field is not on the page" do
58
- @session.should_not have_select('Locale', :options => ['Not there'])
59
- @session.should_not have_select('Does not exist', :options => ['John'])
71
+ @session.should_not have_select('Locale', :options => ['Swedish'])
72
+ @session.should_not have_select('Does not exist', :options => ['John'])
60
73
  @session.should_not have_select('City', :options => ['London', 'Made up city'])
74
+ @session.should_not have_select('Region', :options => ['Norway', 'Sweden'])
75
+ @session.should_not have_select('Region', :options => ['Norway', 'Norway', 'Norway'])
76
+ end
77
+ end
78
+
79
+ context 'with partial options' do
80
+ it "should be true if a field with the given partial options is on the page" do
81
+ @session.should have_select('Region', :with_options => ['Norway', 'Sweden'])
82
+ @session.should have_select('City', :with_options => ['London'])
83
+ end
84
+
85
+ it "should be false if a field with the given partial options is not on the page" do
86
+ @session.should_not have_select('Locale', :with_options => ['Uruguayan'])
87
+ @session.should_not have_select('Does not exist', :with_options => ['John'])
88
+ @session.should_not have_select('Region', :with_options => ['Norway', 'Sweden', 'Finland', 'Latvia'])
61
89
  end
62
90
  end
63
91
  end
@@ -77,17 +105,26 @@ shared_examples_for "has_select" do
77
105
 
78
106
  context 'with selected value' do
79
107
  it "should be false if a field with the given value is on the page" do
80
- @session.should_not have_no_select('form_locale', :selected => 'English')
81
- @session.should_not have_no_select('Region', :selected => 'Norway')
82
- @session.should_not have_no_select('Underwear', :selected => ['Briefs', 'Commando'])
108
+ @session.should_not have_no_select('form_locale', :selected => 'English')
109
+ @session.should_not have_no_select('Region', :selected => 'Norway')
110
+ @session.should_not have_no_select('Underwear', :selected => [
111
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
112
+ ])
83
113
  end
84
114
 
85
115
  it "should be true if the given field is not on the page" do
86
- @session.should have_no_select('Locale', :selected => 'Swedish')
87
- @session.should have_no_select('Does not exist', :selected => 'John')
116
+ @session.should have_no_select('Locale', :selected => 'Swedish')
117
+ @session.should have_no_select('Does not exist', :selected => 'John')
88
118
  @session.should have_no_select('City', :selected => 'Not there')
89
- @session.should have_no_select('Underwear', :selected => ['Briefs', 'Nonexistant'])
90
- @session.should have_no_select('Underwear', :selected => ['Briefs', 'Boxers'])
119
+ @session.should have_no_select('Underwear', :selected => [
120
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns', 'Nonexistant'
121
+ ])
122
+ @session.should have_no_select('Underwear', :selected => [
123
+ 'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
124
+ ])
125
+ @session.should have_no_select('Underwear', :selected => [
126
+ 'Boxerbriefs', 'Briefs','Commando', "Frenchman's Pantalons"
127
+ ])
91
128
  end
92
129
 
93
130
  it "should be false after the given value is selected" do
@@ -102,28 +139,44 @@ shared_examples_for "has_select" do
102
139
 
103
140
  it "should be false after the given values are selected" do
104
141
  @session.select('Boxers', :from => 'Underwear')
105
- @session.should_not have_no_select('Underwear', :selected => ['Briefs', 'Boxers', 'Commando'])
142
+ @session.should_not have_no_select('Underwear', :selected => [
143
+ 'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
144
+ ])
106
145
  end
107
146
 
108
147
  it "should be true after one of the values is unselected" do
109
148
  @session.unselect('Briefs', :from => 'Underwear')
110
- @session.should have_no_select('Underwear', :selected => ['Briefs', 'Commando'])
149
+ @session.should have_no_select('Underwear', :selected => [
150
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
151
+ ])
111
152
  end
112
153
  end
113
154
 
114
- context 'with options' do
155
+ context 'with exact options' do
115
156
  it "should be false if a field with the given options is on the page" do
116
- @session.should_not have_no_select('form_locale', :options => ['English'])
117
- @session.should_not have_no_select('Region', :options => ['Norway', 'Sweden'])
157
+ @session.should_not have_no_select('Region', :options => ['Norway', 'Sweden', 'Finland'])
118
158
  end
119
159
 
120
160
  it "should be true if the given field is not on the page" do
121
- @session.should have_no_select('Locale', :options => ['Not there'])
122
- @session.should have_no_select('Does not exist', :options => ['John'])
161
+ @session.should have_no_select('Locale', :options => ['Swedish'])
162
+ @session.should have_no_select('Does not exist', :options => ['John'])
123
163
  @session.should have_no_select('City', :options => ['London', 'Made up city'])
164
+ @session.should have_no_select('Region', :options => ['Norway', 'Sweden'])
165
+ @session.should have_no_select('Region', :options => ['Norway', 'Norway', 'Norway'])
124
166
  end
125
167
  end
126
- end
127
- end
128
168
 
169
+ context 'with partial options' do
170
+ it "should be false if a field with the given partial options is on the page" do
171
+ @session.should_not have_no_select('Region', :with_options => ['Norway', 'Sweden'])
172
+ @session.should_not have_no_select('City', :with_options => ['London'])
173
+ end
129
174
 
175
+ it "should be true if a field with the given partial options is not on the page" do
176
+ @session.should have_no_select('Locale', :with_options => ['Uruguayan'])
177
+ @session.should have_no_select('Does not exist', :with_options => ['John'])
178
+ @session.should have_no_select('Region', :with_options => ['Norway', 'Sweden', 'Finland', 'Latvia'])
179
+ end
180
+ end
181
+ end
182
+ end
@@ -1,48 +1,17 @@
1
- shared_examples_for "has_table" do
1
+ shared_examples_for "has_table" do
2
2
  describe '#has_table?' do
3
3
  before do
4
4
  @session.visit('/tables')
5
5
  end
6
6
 
7
- it "should be true if the field is on the page" do
8
- @session.should have_table('Deaths')
7
+ it "should be true if the table is on the page" do
8
+ @session.should have_table('Villain')
9
9
  @session.should have_table('villain_table')
10
10
  end
11
11
 
12
- it "should be false if the field is not on the page" do
12
+ it "should be false if the table is not on the page" do
13
13
  @session.should_not have_table('Monkey')
14
14
  end
15
-
16
- context 'with rows' do
17
- it "should be true if a table with the given rows is on the page" do
18
- @session.should have_table('Ransom', :rows => [['2007', '$300', '$100']])
19
- @session.should have_table('Deaths', :rows => [['2007', '66', '7'], ['2008', '123', '12']])
20
- end
21
-
22
- it "should be true if the given rows are incomplete" do
23
- @session.should have_table('Ransom', :rows => [['$300', '$100']])
24
- end
25
-
26
- it "should be false if the given table is not on the page" do
27
- @session.should_not have_table('Does not exist', :selected => 'John')
28
- end
29
-
30
- it "should be false if the given rows contain incorrect elements" do
31
- @session.should_not have_table('Ransom', :rows => [['2007', '$1000000000', '$100']])
32
- end
33
-
34
- it "should be false if the given rows are incorrectly ordered" do
35
- @session.should_not have_table('Ransom', :rows => [['2007', '$100', '$300']])
36
- end
37
-
38
- it "should be false if the only some of the given rows are correct" do
39
- @session.should_not have_table('Deaths', :rows => [['2007', '66', '7'], ['2007', '99999999', '12']])
40
- end
41
-
42
- it "should be false if the given rows are out of order" do
43
- @session.should_not have_table('Deaths', :rows => [['2007', '123', '12'], ['2007', '66', '7']])
44
- end
45
- end
46
15
  end
47
16
 
48
17
  describe '#has_no_table?' do
@@ -50,45 +19,14 @@ shared_examples_for "has_table" do
50
19
  @session.visit('/tables')
51
20
  end
52
21
 
53
- it "should be false if the field is on the page" do
54
- @session.should_not have_no_table('Deaths')
22
+ it "should be false if the table is on the page" do
23
+ @session.should_not have_no_table('Villain')
55
24
  @session.should_not have_no_table('villain_table')
56
25
  end
57
26
 
58
- it "should be true if the field is not on the page" do
27
+ it "should be true if the table is not on the page" do
59
28
  @session.should have_no_table('Monkey')
60
29
  end
61
-
62
- context 'with rows' do
63
- it "should be false if a table with the given rows is on the page" do
64
- @session.should_not have_no_table('Ransom', :rows => [['2007', '$300', '$100']])
65
- @session.should_not have_no_table('Deaths', :rows => [['2007', '66', '7'], ['2008', '123', '12']])
66
- end
67
-
68
- it "should be false if the given rows are incomplete" do
69
- @session.should_not have_no_table('Ransom', :rows => [['$300', '$100']])
70
- end
71
-
72
- it "should be true if the given table is not on the page" do
73
- @session.should have_no_table('Does not exist', :selected => 'John')
74
- end
75
-
76
- it "should be true if the given rows contain incorrect elements" do
77
- @session.should have_no_table('Ransom', :rows => [['2007', '$1000000000', '$100']])
78
- end
79
-
80
- it "should be true if the given rows are incorrectly ordered" do
81
- @session.should have_no_table('Ransom', :rows => [['2007', '$100', '$300']])
82
- end
83
-
84
- it "should be true if the only some of the given rows are correct" do
85
- @session.should have_no_table('Deaths', :rows => [['2007', '66', '7'], ['2007', '99999999', '12']])
86
- end
87
-
88
- it "should be true if the given rows are out of order" do
89
- @session.should have_no_table('Deaths', :rows => [['2007', '123', '12'], ['2007', '66', '7']])
90
- end
91
- end
92
30
  end
93
31
  end
94
32