bbc-capybara 1.1.2

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 (107) hide show
  1. data/History.txt +325 -0
  2. data/License.txt +22 -0
  3. data/README.md +815 -0
  4. data/lib/capybara.rb +368 -0
  5. data/lib/capybara/cucumber.rb +25 -0
  6. data/lib/capybara/driver/base.rb +64 -0
  7. data/lib/capybara/driver/node.rb +74 -0
  8. data/lib/capybara/dsl.rb +50 -0
  9. data/lib/capybara/node/actions.rb +146 -0
  10. data/lib/capybara/node/base.rb +63 -0
  11. data/lib/capybara/node/document.rb +25 -0
  12. data/lib/capybara/node/element.rb +201 -0
  13. data/lib/capybara/node/finders.rb +154 -0
  14. data/lib/capybara/node/matchers.rb +442 -0
  15. data/lib/capybara/node/simple.rb +132 -0
  16. data/lib/capybara/query.rb +63 -0
  17. data/lib/capybara/rack_test/browser.rb +126 -0
  18. data/lib/capybara/rack_test/driver.rb +80 -0
  19. data/lib/capybara/rack_test/form.rb +80 -0
  20. data/lib/capybara/rack_test/node.rb +121 -0
  21. data/lib/capybara/rails.rb +17 -0
  22. data/lib/capybara/rspec.rb +26 -0
  23. data/lib/capybara/rspec/features.rb +22 -0
  24. data/lib/capybara/rspec/matchers.rb +152 -0
  25. data/lib/capybara/selector.rb +156 -0
  26. data/lib/capybara/selenium/driver.rb +169 -0
  27. data/lib/capybara/selenium/node.rb +91 -0
  28. data/lib/capybara/server.rb +87 -0
  29. data/lib/capybara/session.rb +322 -0
  30. data/lib/capybara/spec/driver.rb +329 -0
  31. data/lib/capybara/spec/fixtures/capybara.jpg +3 -0
  32. data/lib/capybara/spec/fixtures/test_file.txt +1 -0
  33. data/lib/capybara/spec/public/jquery-ui.js +791 -0
  34. data/lib/capybara/spec/public/jquery.js +9046 -0
  35. data/lib/capybara/spec/public/test.js +43 -0
  36. data/lib/capybara/spec/session.rb +148 -0
  37. data/lib/capybara/spec/session/all_spec.rb +78 -0
  38. data/lib/capybara/spec/session/attach_file_spec.rb +76 -0
  39. data/lib/capybara/spec/session/check_spec.rb +68 -0
  40. data/lib/capybara/spec/session/choose_spec.rb +29 -0
  41. data/lib/capybara/spec/session/click_button_spec.rb +305 -0
  42. data/lib/capybara/spec/session/click_link_or_button_spec.rb +37 -0
  43. data/lib/capybara/spec/session/click_link_spec.rb +120 -0
  44. data/lib/capybara/spec/session/current_url_spec.rb +83 -0
  45. data/lib/capybara/spec/session/fill_in_spec.rb +127 -0
  46. data/lib/capybara/spec/session/find_button_spec.rb +18 -0
  47. data/lib/capybara/spec/session/find_by_id_spec.rb +18 -0
  48. data/lib/capybara/spec/session/find_field_spec.rb +26 -0
  49. data/lib/capybara/spec/session/find_link_spec.rb +19 -0
  50. data/lib/capybara/spec/session/find_spec.rb +168 -0
  51. data/lib/capybara/spec/session/first_spec.rb +105 -0
  52. data/lib/capybara/spec/session/has_button_spec.rb +32 -0
  53. data/lib/capybara/spec/session/has_css_spec.rb +243 -0
  54. data/lib/capybara/spec/session/has_field_spec.rb +192 -0
  55. data/lib/capybara/spec/session/has_link_spec.rb +37 -0
  56. data/lib/capybara/spec/session/has_select_spec.rb +129 -0
  57. data/lib/capybara/spec/session/has_selector_spec.rb +129 -0
  58. data/lib/capybara/spec/session/has_table_spec.rb +34 -0
  59. data/lib/capybara/spec/session/has_text_spec.rb +138 -0
  60. data/lib/capybara/spec/session/has_xpath_spec.rb +123 -0
  61. data/lib/capybara/spec/session/headers.rb +19 -0
  62. data/lib/capybara/spec/session/javascript.rb +312 -0
  63. data/lib/capybara/spec/session/response_code.rb +19 -0
  64. data/lib/capybara/spec/session/select_spec.rb +119 -0
  65. data/lib/capybara/spec/session/text_spec.rb +24 -0
  66. data/lib/capybara/spec/session/uncheck_spec.rb +21 -0
  67. data/lib/capybara/spec/session/unselect_spec.rb +67 -0
  68. data/lib/capybara/spec/session/within_spec.rb +178 -0
  69. data/lib/capybara/spec/test_app.rb +156 -0
  70. data/lib/capybara/spec/views/buttons.erb +4 -0
  71. data/lib/capybara/spec/views/fieldsets.erb +29 -0
  72. data/lib/capybara/spec/views/form.erb +366 -0
  73. data/lib/capybara/spec/views/frame_one.erb +8 -0
  74. data/lib/capybara/spec/views/frame_two.erb +8 -0
  75. data/lib/capybara/spec/views/header_links.erb +7 -0
  76. data/lib/capybara/spec/views/host_links.erb +12 -0
  77. data/lib/capybara/spec/views/popup_one.erb +8 -0
  78. data/lib/capybara/spec/views/popup_two.erb +8 -0
  79. data/lib/capybara/spec/views/postback.erb +13 -0
  80. data/lib/capybara/spec/views/tables.erb +62 -0
  81. data/lib/capybara/spec/views/with_html.erb +75 -0
  82. data/lib/capybara/spec/views/with_html_entities.erb +1 -0
  83. data/lib/capybara/spec/views/with_js.erb +53 -0
  84. data/lib/capybara/spec/views/with_scope.erb +36 -0
  85. data/lib/capybara/spec/views/with_simple_html.erb +1 -0
  86. data/lib/capybara/spec/views/within_frames.erb +10 -0
  87. data/lib/capybara/spec/views/within_popups.erb +25 -0
  88. data/lib/capybara/util/save_and_open_page.rb +45 -0
  89. data/lib/capybara/util/timeout.rb +27 -0
  90. data/lib/capybara/version.rb +3 -0
  91. data/spec/basic_node_spec.rb +89 -0
  92. data/spec/capybara_spec.rb +46 -0
  93. data/spec/driver/rack_test_driver_spec.rb +90 -0
  94. data/spec/driver/selenium_driver_spec.rb +55 -0
  95. data/spec/dsl_spec.rb +255 -0
  96. data/spec/fixtures/selenium_driver_rspec_failure.rb +8 -0
  97. data/spec/fixtures/selenium_driver_rspec_success.rb +8 -0
  98. data/spec/rspec/features_spec.rb +43 -0
  99. data/spec/rspec/matchers_spec.rb +564 -0
  100. data/spec/rspec_spec.rb +51 -0
  101. data/spec/save_and_open_page_spec.rb +155 -0
  102. data/spec/server_spec.rb +74 -0
  103. data/spec/session/rack_test_session_spec.rb +61 -0
  104. data/spec/session/selenium_session_spec.rb +26 -0
  105. data/spec/spec_helper.rb +31 -0
  106. data/spec/timeout_spec.rb +28 -0
  107. metadata +297 -0
@@ -0,0 +1,105 @@
1
+ shared_examples_for "first" do
2
+ describe '#first' do
3
+ before do
4
+ @session.visit('/with_html')
5
+ end
6
+
7
+ it "should find the first element using the given locator" do
8
+ @session.first('//h1').text.should == 'This is a test'
9
+ @session.first("//input[@id='test_field']")[:value].should == 'monkey'
10
+ end
11
+
12
+ it "should return nil when nothing was found" do
13
+ @session.first('//div[@id="nosuchthing"]').should be_nil
14
+ end
15
+
16
+ it "should accept an XPath instance" do
17
+ @session.visit('/form')
18
+ @xpath = XPath::HTML.fillable_field('Name')
19
+ @session.first(@xpath).value.should == 'John Smith'
20
+ end
21
+
22
+ context "with css selectors" do
23
+ it "should find the first element using the given selector" do
24
+ @session.first(:css, 'h1').text.should == 'This is a test'
25
+ @session.first(:css, "input[id='test_field']")[:value].should == 'monkey'
26
+ end
27
+ end
28
+
29
+ context "with xpath selectors" do
30
+ it "should find the first element using the given locator" do
31
+ @session.first(:xpath, '//h1').text.should == 'This is a test'
32
+ @session.first(:xpath, "//input[@id='test_field']")[:value].should == 'monkey'
33
+ end
34
+ end
35
+
36
+ context "with css as default selector" do
37
+ before { Capybara.default_selector = :css }
38
+ it "should find the first element using the given locator" do
39
+ @session.first('h1').text.should == 'This is a test'
40
+ @session.first("input[id='test_field']")[:value].should == 'monkey'
41
+ end
42
+ after { Capybara.default_selector = :xpath }
43
+ end
44
+
45
+ context "with visible filter" do
46
+ after { Capybara.ignore_hidden_elements = false }
47
+ it "should only find visible nodes if true given" do
48
+ @session.first(:css, "a#invisible").should_not be_nil
49
+ @session.first(:css, "a#invisible", :visible => true).should be_nil
50
+ Capybara.ignore_hidden_elements = true
51
+ @session.first(:css, "a#invisible").should be_nil
52
+ end
53
+
54
+ it "should include invisible nodes if false given" do
55
+ Capybara.ignore_hidden_elements = true
56
+ @session.first(:css, "a#invisible", :visible => false).should_not be_nil
57
+ @session.first(:css, "a#invisible").should be_nil
58
+ end
59
+ end
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
+ context "within a scope" do
94
+ before do
95
+ @session.visit('/with_scope')
96
+ end
97
+
98
+ it "should find the first element using the given locator" do
99
+ @session.within(:xpath, "//div[@id='for_bar']") do
100
+ @session.first('.//form').should_not be_nil
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,32 @@
1
+ shared_examples_for "has_button" do
2
+ describe '#has_button?' do
3
+ before do
4
+ @session.visit('/form')
5
+ end
6
+
7
+ it "should be true if the given button is on the page" do
8
+ @session.should have_button('med')
9
+ @session.should have_button('crap321')
10
+ end
11
+
12
+ it "should be false if the given button is not on the page" do
13
+ @session.should_not have_button('monkey')
14
+ end
15
+ end
16
+
17
+ describe '#has_no_button?' do
18
+ before do
19
+ @session.visit('/form')
20
+ end
21
+
22
+ it "should be true if the given button is on the page" do
23
+ @session.should_not have_no_button('med')
24
+ @session.should_not have_no_button('crap321')
25
+ end
26
+
27
+ it "should be false if the given button is not on the page" do
28
+ @session.should have_no_button('monkey')
29
+ end
30
+ end
31
+ end
32
+
@@ -0,0 +1,243 @@
1
+ shared_examples_for "has_css" do
2
+ describe '#has_css?' do
3
+ before do
4
+ @session.visit('/with_html')
5
+ end
6
+
7
+ it "should be true if the given selector is on the page" do
8
+ @session.should have_css("p")
9
+ @session.should have_css("p a#foo")
10
+ end
11
+
12
+ it "should be false if the given selector is not on the page" do
13
+ @session.should_not have_css("abbr")
14
+ @session.should_not have_css("p a#doesnotexist")
15
+ @session.should_not have_css("p.nosuchclass")
16
+ end
17
+
18
+ it "should respect scopes" do
19
+ @session.within "//p[@id='first']" do
20
+ @session.should have_css("a#foo")
21
+ @session.should_not have_css("a#red")
22
+ end
23
+ end
24
+
25
+ context "with between" do
26
+ it "should be true if the content occurs within the range given" do
27
+ @session.should have_css("p", :between => 1..4)
28
+ @session.should have_css("p a#foo", :between => 1..3)
29
+ end
30
+
31
+ it "should be false if the content occurs more or fewer times than range" do
32
+ @session.should_not have_css("p", :between => 6..11 )
33
+ @session.should_not have_css("p a#foo", :between => 4..7)
34
+ end
35
+
36
+ it "should be false if the content isn't on the page at all" do
37
+ @session.should_not have_css("abbr", :between => 1..8)
38
+ @session.should_not have_css("p a.doesnotexist", :between => 3..8)
39
+ end
40
+ end
41
+
42
+ context "with count" do
43
+ it "should be true if the content is on the page the given number of times" do
44
+ @session.should have_css("p", :count => 3)
45
+ @session.should have_css("p a#foo", :count => 1)
46
+ end
47
+
48
+ it "should be false if the content occurs the given number of times" do
49
+ @session.should_not have_css("p", :count => 6)
50
+ @session.should_not have_css("p a#foo", :count => 2)
51
+ end
52
+
53
+ it "should be false if the content isn't on the page at all" do
54
+ @session.should_not have_css("abbr", :count => 2)
55
+ @session.should_not have_css("p a.doesnotexist", :count => 1)
56
+ end
57
+
58
+ it "should coerce count to an integer" do
59
+ @session.should have_css("p", :count => "3")
60
+ @session.should have_css("p a#foo", :count => "1")
61
+ end
62
+ end
63
+
64
+ context "with maximum" do
65
+ it "should be true when content occurs same or fewer times than given" do
66
+ @session.should have_css("h2.head", :maximum => 5) # edge case
67
+ @session.should have_css("h2", :maximum => 10)
68
+ end
69
+
70
+ it "should be false when content occurs more times than given" do
71
+ @session.should_not have_css("h2.head", :maximum => 4) # edge case
72
+ @session.should_not have_css("h2", :maximum => 6)
73
+ @session.should_not have_css("p", :maximum => 1)
74
+ end
75
+
76
+ it "should be false if the content isn't on the page at all" do
77
+ @session.should_not have_css("abbr", :maximum => 2)
78
+ @session.should_not have_css("p a.doesnotexist", :maximum => 1)
79
+ end
80
+
81
+ it "should coerce maximum to an integer" do
82
+ @session.should have_css("h2.head", :maximum => "5") # edge case
83
+ @session.should have_css("h2", :maximum => "10")
84
+ end
85
+ end
86
+
87
+ context "with minimum" do
88
+ it "should be true when content occurs same or more times than given" do
89
+ @session.should have_css("h2.head", :minimum => 5) # edge case
90
+ @session.should have_css("h2", :minimum => 3)
91
+ end
92
+
93
+ it "should be false when content occurs fewer times than given" do
94
+ @session.should_not have_css("h2.head", :minimum => 6) # edge case
95
+ @session.should_not have_css("h2", :minimum => 8)
96
+ @session.should_not have_css("p", :minimum => 10)
97
+ end
98
+
99
+ it "should be false if the content isn't on the page at all" do
100
+ @session.should_not have_css("abbr", :minimum => 2)
101
+ @session.should_not have_css("p a.doesnotexist", :minimum => 7)
102
+ end
103
+
104
+ it "should coerce minimum to an integer" do
105
+ @session.should have_css("h2.head", :minimum => "5") # edge case
106
+ @session.should have_css("h2", :minimum => "3")
107
+ end
108
+ end
109
+
110
+ context "with text" do
111
+ it "should discard all matches where the given string is not contained" do
112
+ @session.should have_css("p a", :text => "Redirect", :count => 1)
113
+ @session.should_not have_css("p a", :text => "Doesnotexist")
114
+ end
115
+
116
+ it "should discard all matches where the given regexp is not matched" do
117
+ @session.should have_css("p a", :text => /re[dab]i/i, :count => 1)
118
+ @session.should_not have_css("p a", :text => /Red$/)
119
+ end
120
+ end
121
+ end
122
+
123
+ describe '#has_no_css?' do
124
+ before do
125
+ @session.visit('/with_html')
126
+ end
127
+
128
+ it "should be false if the given selector is on the page" do
129
+ @session.should_not have_no_css("p")
130
+ @session.should_not have_no_css("p a#foo")
131
+ end
132
+
133
+ it "should be true if the given selector is not on the page" do
134
+ @session.should have_no_css("abbr")
135
+ @session.should have_no_css("p a#doesnotexist")
136
+ @session.should have_no_css("p.nosuchclass")
137
+ end
138
+
139
+ it "should respect scopes" do
140
+ @session.within "//p[@id='first']" do
141
+ @session.should_not have_no_css("a#foo")
142
+ @session.should have_no_css("a#red")
143
+ end
144
+ end
145
+
146
+ context "with between" do
147
+ it "should be false if the content occurs within the range given" do
148
+ @session.should_not have_no_css("p", :between => 1..4)
149
+ @session.should_not have_no_css("p a#foo", :between => 1..3)
150
+ end
151
+
152
+ it "should be true if the content occurs more or fewer times than range" do
153
+ @session.should have_no_css("p", :between => 6..11 )
154
+ @session.should have_no_css("p a#foo", :between => 4..7)
155
+ end
156
+
157
+ it "should be true if the content isn't on the page at all" do
158
+ @session.should have_no_css("abbr", :between => 1..8)
159
+ @session.should have_no_css("p a.doesnotexist", :between => 3..8)
160
+ end
161
+ end
162
+
163
+ context "with count" do
164
+ it "should be false if the content is on the page the given number of times" do
165
+ @session.should_not have_no_css("p", :count => 3)
166
+ @session.should_not have_no_css("p a#foo", :count => 1)
167
+ end
168
+
169
+ it "should be true if the content is on the page the given number of times" do
170
+ @session.should have_no_css("p", :count => 6)
171
+ @session.should have_no_css("p a#foo", :count => 2)
172
+ end
173
+
174
+ it "should be true if the content isn't on the page at all" do
175
+ @session.should have_no_css("abbr", :count => 2)
176
+ @session.should have_no_css("p a.doesnotexist", :count => 1)
177
+ end
178
+
179
+ it "should coerce count to an integer" do
180
+ @session.should_not have_no_css("p", :count => "3")
181
+ @session.should_not have_no_css("p a#foo", :count => "1")
182
+ end
183
+ end
184
+
185
+ context "with maximum" do
186
+ it "should be false when content occurs same or fewer times than given" do
187
+ @session.should_not have_no_css("h2.head", :maximum => 5) # edge case
188
+ @session.should_not have_no_css("h2", :maximum => 10)
189
+ end
190
+
191
+ it "should be true when content occurs more times than given" do
192
+ @session.should have_no_css("h2.head", :maximum => 4) # edge case
193
+ @session.should have_no_css("h2", :maximum => 6)
194
+ @session.should have_no_css("p", :maximum => 1)
195
+ end
196
+
197
+ it "should be true if the content isn't on the page at all" do
198
+ @session.should have_no_css("abbr", :maximum => 5)
199
+ @session.should have_no_css("p a.doesnotexist", :maximum => 10)
200
+ end
201
+
202
+ it "should coerce maximum to an integer" do
203
+ @session.should_not have_no_css("h2.head", :maximum => "5") # edge case
204
+ @session.should_not have_no_css("h2", :maximum => "10")
205
+ end
206
+ end
207
+
208
+ context "with minimum" do
209
+ it "should be false when content occurs more times than given" do
210
+ @session.should_not have_no_css("h2.head", :minimum => 4) # edge case
211
+ @session.should_not have_no_css("h2", :minimum => 3)
212
+ end
213
+
214
+ it "should be true when content occurs fewer times than given" do
215
+ @session.should have_no_css("h2.head", :minimum => 6) # edge case
216
+ @session.should have_no_css("h2", :minimum => 8)
217
+ @session.should have_no_css("p", :minimum => 15)
218
+ end
219
+
220
+ it "should be true if the content isn't on the page at all" do
221
+ @session.should have_no_css("abbr", :minimum => 5)
222
+ @session.should have_no_css("p a.doesnotexist", :minimum => 10)
223
+ end
224
+
225
+ it "should coerce minimum to an integer" do
226
+ @session.should_not have_no_css("h2.head", :minimum => "4") # edge case
227
+ @session.should_not have_no_css("h2", :minimum => "3")
228
+ end
229
+ end
230
+
231
+ context "with text" do
232
+ it "should discard all matches where the given string is not contained" do
233
+ @session.should_not have_no_css("p a", :text => "Redirect", :count => 1)
234
+ @session.should have_no_css("p a", :text => "Doesnotexist")
235
+ end
236
+
237
+ it "should discard all matches where the given regexp is not matched" do
238
+ @session.should_not have_no_css("p a", :text => /re[dab]i/i, :count => 1)
239
+ @session.should have_no_css("p a", :text => /Red$/)
240
+ end
241
+ end
242
+ end
243
+ end
@@ -0,0 +1,192 @@
1
+ shared_examples_for "has_field" do
2
+ describe '#has_field' do
3
+ before { @session.visit('/form') }
4
+
5
+ it "should be true if the field is on the page" do
6
+ @session.should have_field('Dog')
7
+ @session.should have_field('form_description')
8
+ @session.should have_field('Region')
9
+ end
10
+
11
+ it "should be false if the field is not on the page" do
12
+ @session.should_not have_field('Monkey')
13
+ end
14
+
15
+ context 'with value' do
16
+ it "should be true if a field with the given value is on the page" do
17
+ @session.should have_field('First Name', :with => 'John')
18
+ @session.should have_field('Phone', :with => '+1 555 7021')
19
+ @session.should have_field('Street', :with => 'Sesame street 66')
20
+ @session.should have_field('Description', :with => 'Descriptive text goes here')
21
+ end
22
+
23
+ it "should be false if the given field is not on the page" do
24
+ @session.should_not have_field('First Name', :with => 'Peter')
25
+ @session.should_not have_field('Wrong Name', :with => 'John')
26
+ @session.should_not have_field('Description', :with => 'Monkey')
27
+ end
28
+
29
+ it "should be true after the field has been filled in with the given value" do
30
+ @session.fill_in('First Name', :with => 'Jonas')
31
+ @session.should have_field('First Name', :with => 'Jonas')
32
+ end
33
+
34
+ it "should be false after the field has been filled in with a different value" do
35
+ @session.fill_in('First Name', :with => 'Jonas')
36
+ @session.should_not have_field('First Name', :with => 'John')
37
+ end
38
+ end
39
+ end
40
+
41
+ describe '#has_no_field' do
42
+ before { @session.visit('/form') }
43
+
44
+ it "should be false if the field is on the page" do
45
+ @session.should_not have_no_field('Dog')
46
+ @session.should_not have_no_field('form_description')
47
+ @session.should_not have_no_field('Region')
48
+ end
49
+
50
+ it "should be true if the field is not on the page" do
51
+ @session.should have_no_field('Monkey')
52
+ end
53
+
54
+ context 'with value' do
55
+ it "should be false if a field with the given value is on the page" do
56
+ @session.should_not have_no_field('First Name', :with => 'John')
57
+ @session.should_not have_no_field('Phone', :with => '+1 555 7021')
58
+ @session.should_not have_no_field('Street', :with => 'Sesame street 66')
59
+ @session.should_not have_no_field('Description', :with => 'Descriptive text goes here')
60
+ end
61
+
62
+ it "should be true if the given field is not on the page" do
63
+ @session.should have_no_field('First Name', :with => 'Peter')
64
+ @session.should have_no_field('Wrong Name', :with => 'John')
65
+ @session.should have_no_field('Description', :with => 'Monkey')
66
+ end
67
+
68
+ it "should be false after the field has been filled in with the given value" do
69
+ @session.fill_in('First Name', :with => 'Jonas')
70
+ @session.should_not have_no_field('First Name', :with => 'Jonas')
71
+ end
72
+
73
+ it "should be true after the field has been filled in with a different value" do
74
+ @session.fill_in('First Name', :with => 'Jonas')
75
+ @session.should have_no_field('First Name', :with => 'John')
76
+ end
77
+ end
78
+ end
79
+
80
+ describe '#has_checked_field?' do
81
+ before { @session.visit('/form') }
82
+
83
+ it "should be true if a checked field is on the page" do
84
+ @session.should have_checked_field('gender_female')
85
+ @session.should have_checked_field('Hamster')
86
+ end
87
+
88
+ it "should be false if an unchecked field is on the page" do
89
+ @session.should_not have_checked_field('form_pets_cat')
90
+ @session.should_not have_checked_field('Male')
91
+ end
92
+
93
+ it "should be false if no field is on the page" do
94
+ @session.should_not have_checked_field('Does Not Exist')
95
+ end
96
+
97
+ it "should be true after an unchecked checkbox is checked" do
98
+ @session.check('form_pets_cat')
99
+ @session.should have_checked_field('form_pets_cat')
100
+ end
101
+
102
+ it "should be false after a checked checkbox is unchecked" do
103
+ @session.uncheck('form_pets_dog')
104
+ @session.should_not have_checked_field('form_pets_dog')
105
+ end
106
+
107
+ it "should be true after an unchecked radio button is chosen" do
108
+ @session.choose('gender_male')
109
+ @session.should have_checked_field('gender_male')
110
+ end
111
+
112
+ it "should be false after another radio button in the group is chosen" do
113
+ @session.choose('gender_male')
114
+ @session.should_not have_checked_field('gender_female')
115
+ end
116
+ end
117
+
118
+ describe '#has_no_checked_field?' do
119
+ before { @session.visit('/form') }
120
+
121
+ it "should be false if a checked field is on the page" do
122
+ @session.should_not have_no_checked_field('gender_female')
123
+ @session.should_not have_no_checked_field('Hamster')
124
+ end
125
+
126
+ it "should be true if an unchecked field is on the page" do
127
+ @session.should have_no_checked_field('form_pets_cat')
128
+ @session.should have_no_checked_field('Male')
129
+ end
130
+
131
+ it "should be true if no field is on the page" do
132
+ @session.should have_no_checked_field('Does Not Exist')
133
+ end
134
+ end
135
+
136
+ describe '#has_unchecked_field?' do
137
+ before { @session.visit('/form') }
138
+
139
+ it "should be false if a checked field is on the page" do
140
+ @session.should_not have_unchecked_field('gender_female')
141
+ @session.should_not have_unchecked_field('Hamster')
142
+ end
143
+
144
+ it "should be true if an unchecked field is on the page" do
145
+ @session.should have_unchecked_field('form_pets_cat')
146
+ @session.should have_unchecked_field('Male')
147
+ end
148
+
149
+ it "should be false if no field is on the page" do
150
+ @session.should_not have_unchecked_field('Does Not Exist')
151
+ end
152
+
153
+ it "should be false after an unchecked checkbox is checked" do
154
+ @session.check('form_pets_cat')
155
+ @session.should_not have_unchecked_field('form_pets_cat')
156
+ end
157
+
158
+ it "should be true after a checked checkbox is unchecked" do
159
+ @session.uncheck('form_pets_dog')
160
+ @session.should have_unchecked_field('form_pets_dog')
161
+ end
162
+
163
+ it "should be false after an unchecked radio button is chosen" do
164
+ @session.choose('gender_male')
165
+ @session.should_not have_unchecked_field('gender_male')
166
+ end
167
+
168
+ it "should be true after another radio button in the group is chosen" do
169
+ @session.choose('gender_male')
170
+ @session.should have_unchecked_field('gender_female')
171
+ end
172
+ end
173
+
174
+ describe '#has_no_unchecked_field?' do
175
+ before { @session.visit('/form') }
176
+
177
+ it "should be true if a checked field is on the page" do
178
+ @session.should have_no_unchecked_field('gender_female')
179
+ @session.should have_no_unchecked_field('Hamster')
180
+ end
181
+
182
+ it "should be false if an unchecked field is on the page" do
183
+ @session.should_not have_no_unchecked_field('form_pets_cat')
184
+ @session.should_not have_no_unchecked_field('Male')
185
+ end
186
+
187
+ it "should be true if no field is on the page" do
188
+ @session.should have_no_unchecked_field('Does Not Exist')
189
+ end
190
+ end
191
+ end
192
+