mkuklis-webrat 0.5.1

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 (213) hide show
  1. data/.document +4 -0
  2. data/.gitignore +15 -0
  3. data/History.txt +413 -0
  4. data/MIT-LICENSE.txt +19 -0
  5. data/README.rdoc +85 -0
  6. data/Rakefile +188 -0
  7. data/VERSION +1 -0
  8. data/install.rb +1 -0
  9. data/lib/webrat/adapters/mechanize.rb +78 -0
  10. data/lib/webrat/adapters/merb.rb +11 -0
  11. data/lib/webrat/adapters/rack.rb +25 -0
  12. data/lib/webrat/adapters/rails.rb +81 -0
  13. data/lib/webrat/adapters/sinatra.rb +9 -0
  14. data/lib/webrat/core/configuration.rb +92 -0
  15. data/lib/webrat/core/elements/area.rb +31 -0
  16. data/lib/webrat/core/elements/element.rb +33 -0
  17. data/lib/webrat/core/elements/field.rb +487 -0
  18. data/lib/webrat/core/elements/form.rb +103 -0
  19. data/lib/webrat/core/elements/label.rb +31 -0
  20. data/lib/webrat/core/elements/link.rb +93 -0
  21. data/lib/webrat/core/elements/select_option.rb +48 -0
  22. data/lib/webrat/core/locators/area_locator.rb +38 -0
  23. data/lib/webrat/core/locators/button_locator.rb +54 -0
  24. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  25. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  26. data/lib/webrat/core/locators/field_locator.rb +25 -0
  27. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  28. data/lib/webrat/core/locators/form_locator.rb +19 -0
  29. data/lib/webrat/core/locators/label_locator.rb +34 -0
  30. data/lib/webrat/core/locators/link_locator.rb +74 -0
  31. data/lib/webrat/core/locators/locator.rb +20 -0
  32. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  33. data/lib/webrat/core/locators.rb +20 -0
  34. data/lib/webrat/core/logging.rb +23 -0
  35. data/lib/webrat/core/matchers/have_content.rb +68 -0
  36. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  37. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  38. data/lib/webrat/core/matchers/have_xpath.rb +122 -0
  39. data/lib/webrat/core/matchers.rb +4 -0
  40. data/lib/webrat/core/methods.rb +64 -0
  41. data/lib/webrat/core/mime.rb +18 -0
  42. data/lib/webrat/core/save_and_open_page.rb +48 -0
  43. data/lib/webrat/core/scope.rb +365 -0
  44. data/lib/webrat/core/session.rb +306 -0
  45. data/lib/webrat/core/xml.rb +72 -0
  46. data/lib/webrat/core.rb +13 -0
  47. data/lib/webrat/core_extensions/blank.rb +58 -0
  48. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  49. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  50. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  51. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  52. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  53. data/lib/webrat/integrations/merb.rb +10 -0
  54. data/lib/webrat/integrations/rails.rb +25 -0
  55. data/lib/webrat/integrations/rspec-rails.rb +10 -0
  56. data/lib/webrat/integrations/selenium.rb +11 -0
  57. data/lib/webrat/merb.rb +9 -0
  58. data/lib/webrat/rspec-rails.rb +2 -0
  59. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  60. data/lib/webrat/selenium/application_servers/base.rb +54 -0
  61. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  62. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  63. data/lib/webrat/selenium/application_servers/rails.rb +67 -0
  64. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  65. data/lib/webrat/selenium/application_servers.rb +5 -0
  66. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  67. data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -0
  68. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -0
  69. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -0
  70. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  71. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  72. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  73. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  74. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  75. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  76. data/lib/webrat/selenium/matchers.rb +4 -0
  77. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  78. data/lib/webrat/selenium/selenium_rc_server.rb +86 -0
  79. data/lib/webrat/selenium/selenium_session.rb +272 -0
  80. data/lib/webrat/selenium/silence_stream.rb +18 -0
  81. data/lib/webrat/selenium.rb +70 -0
  82. data/lib/webrat.rb +18 -0
  83. data/spec/fakes/test_adapter.rb +37 -0
  84. data/spec/integration/mechanize/Rakefile +7 -0
  85. data/spec/integration/mechanize/config.ru +2 -0
  86. data/spec/integration/mechanize/sample_app.rb +20 -0
  87. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
  88. data/spec/integration/mechanize/spec/spec_helper.rb +27 -0
  89. data/spec/integration/merb/.gitignore +21 -0
  90. data/spec/integration/merb/Rakefile +35 -0
  91. data/spec/integration/merb/app/controllers/application.rb +2 -0
  92. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  93. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  94. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  95. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  96. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  97. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  98. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  99. data/spec/integration/merb/config/environments/development.rb +15 -0
  100. data/spec/integration/merb/config/environments/rake.rb +11 -0
  101. data/spec/integration/merb/config/environments/test.rb +14 -0
  102. data/spec/integration/merb/config/init.rb +25 -0
  103. data/spec/integration/merb/config/rack.rb +11 -0
  104. data/spec/integration/merb/config/router.rb +34 -0
  105. data/spec/integration/merb/spec/spec.opts +1 -0
  106. data/spec/integration/merb/spec/spec_helper.rb +26 -0
  107. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  108. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  109. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  110. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  111. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  112. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  113. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  114. data/spec/integration/rack/Rakefile +5 -0
  115. data/spec/integration/rack/app.rb +89 -0
  116. data/spec/integration/rack/test/helper.rb +21 -0
  117. data/spec/integration/rack/test/webrat_rack_test.rb +73 -0
  118. data/spec/integration/rails/.gitignore +3 -0
  119. data/spec/integration/rails/Rakefile +30 -0
  120. data/spec/integration/rails/app/controllers/application.rb +15 -0
  121. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  122. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  123. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  124. data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -0
  125. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  126. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  127. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  128. data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  129. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  130. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  131. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  132. data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  133. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  134. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  135. data/spec/integration/rails/config/boot.rb +109 -0
  136. data/spec/integration/rails/config/environment.rb +12 -0
  137. data/spec/integration/rails/config/environments/development.rb +17 -0
  138. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  139. data/spec/integration/rails/config/environments/test.rb +22 -0
  140. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  141. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  142. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  143. data/spec/integration/rails/config/locales/en.yml +5 -0
  144. data/spec/integration/rails/config/routes.rb +19 -0
  145. data/spec/integration/rails/public/404.html +30 -0
  146. data/spec/integration/rails/public/422.html +30 -0
  147. data/spec/integration/rails/public/500.html +33 -0
  148. data/spec/integration/rails/script/about +4 -0
  149. data/spec/integration/rails/script/console +3 -0
  150. data/spec/integration/rails/script/dbconsole +3 -0
  151. data/spec/integration/rails/script/destroy +3 -0
  152. data/spec/integration/rails/script/generate +3 -0
  153. data/spec/integration/rails/script/performance/benchmarker +3 -0
  154. data/spec/integration/rails/script/performance/profiler +3 -0
  155. data/spec/integration/rails/script/performance/request +3 -0
  156. data/spec/integration/rails/script/plugin +3 -0
  157. data/spec/integration/rails/script/process/inspector +3 -0
  158. data/spec/integration/rails/script/process/reaper +3 -0
  159. data/spec/integration/rails/script/process/spawner +3 -0
  160. data/spec/integration/rails/script/runner +3 -0
  161. data/spec/integration/rails/script/server +3 -0
  162. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  163. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  164. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  165. data/spec/integration/rails/test/integration/webrat_test.rb +122 -0
  166. data/spec/integration/rails/test/test_helper.rb +26 -0
  167. data/spec/integration/sinatra/Rakefile +5 -0
  168. data/spec/integration/sinatra/classic_app.rb +64 -0
  169. data/spec/integration/sinatra/modular_app.rb +16 -0
  170. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  171. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  172. data/spec/integration/sinatra/test/test_helper.rb +17 -0
  173. data/spec/private/core/configuration_spec.rb +87 -0
  174. data/spec/private/core/field_spec.rb +85 -0
  175. data/spec/private/core/link_spec.rb +24 -0
  176. data/spec/private/core/session_spec.rb +200 -0
  177. data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -0
  178. data/spec/private/nokogiri_spec.rb +77 -0
  179. data/spec/private/rails/attaches_file_spec.rb +81 -0
  180. data/spec/private/rails/rails_adapter_spec.rb +86 -0
  181. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  182. data/spec/public/basic_auth_spec.rb +24 -0
  183. data/spec/public/check_spec.rb +191 -0
  184. data/spec/public/choose_spec.rb +118 -0
  185. data/spec/public/click_area_spec.rb +106 -0
  186. data/spec/public/click_button_spec.rb +494 -0
  187. data/spec/public/click_link_spec.rb +511 -0
  188. data/spec/public/fill_in_spec.rb +224 -0
  189. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  190. data/spec/public/locators/field_labeled_spec.rb +172 -0
  191. data/spec/public/locators/field_with_id_spec.rb +16 -0
  192. data/spec/public/matchers/contain_spec.rb +114 -0
  193. data/spec/public/matchers/have_selector_spec.rb +146 -0
  194. data/spec/public/matchers/have_tag_spec.rb +39 -0
  195. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  196. data/spec/public/reload_spec.rb +10 -0
  197. data/spec/public/save_and_open_spec.rb +70 -0
  198. data/spec/public/select_date_spec.rb +112 -0
  199. data/spec/public/select_datetime_spec.rb +137 -0
  200. data/spec/public/select_spec.rb +455 -0
  201. data/spec/public/select_time_spec.rb +100 -0
  202. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  203. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  204. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  205. data/spec/public/set_hidden_field_spec.rb +5 -0
  206. data/spec/public/submit_form_spec.rb +5 -0
  207. data/spec/public/visit_spec.rb +58 -0
  208. data/spec/public/within_spec.rb +177 -0
  209. data/spec/rcov.opts +1 -0
  210. data/spec/spec.opts +2 -0
  211. data/spec/spec_helper.rb +54 -0
  212. data/vendor/selenium-server.jar +0 -0
  213. metadata +409 -0
@@ -0,0 +1,494 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "click_button" do
4
+ it "should fail if no buttons" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <form method="get" action="/login"></form>
8
+ </html>
9
+ HTML
10
+
11
+ lambda { click_button }.should raise_error(Webrat::NotFoundError)
12
+ end
13
+
14
+ it "should fail if input is not a submit button" do
15
+ with_html <<-HTML
16
+ <html>
17
+ <form method="get" action="/login">
18
+ <input type="reset" />
19
+ </form>
20
+ </html>
21
+ HTML
22
+
23
+ lambda { click_button }.should raise_error(Webrat::NotFoundError)
24
+ end
25
+
26
+
27
+ it "should fail if button is disabled" do
28
+ with_html <<-HTML
29
+ <html>
30
+ <form method="get" action="/login">
31
+ <input type="submit" disabled="disabled" />
32
+ </form>
33
+ </html>
34
+ HTML
35
+
36
+ lambda { click_button }.should raise_error(Webrat::DisabledFieldError)
37
+ end
38
+
39
+ it "should default to get method" do
40
+ with_html <<-HTML
41
+ <html>
42
+ <form action="/login">
43
+ <input type="submit" />
44
+ </form>
45
+ </html>
46
+ HTML
47
+ webrat_session.should_receive(:get)
48
+ click_button
49
+ end
50
+
51
+ it "should assert valid response" do
52
+ with_html <<-HTML
53
+ <html>
54
+ <form action="/login">
55
+ <input type="submit" />
56
+ </form>
57
+ </html>
58
+ HTML
59
+ webrat_session.response_code = 501
60
+ lambda { click_button }.should raise_error(Webrat::PageLoadError)
61
+ end
62
+
63
+ [200, 300, 400, 499].each do |status|
64
+ it "should consider the #{status} status code as success" do
65
+ with_html <<-HTML
66
+ <html>
67
+ <form action="/login">
68
+ <input type="submit" />
69
+ </form>
70
+ </html>
71
+ HTML
72
+ webrat_session.stub!(:redirect? => false)
73
+ webrat_session.response_code = status
74
+ lambda { click_button }.should_not raise_error
75
+ end
76
+ end
77
+
78
+ it "should submit the first form by default" do
79
+ with_html <<-HTML
80
+ <html>
81
+ <form method="get" action="/form1">
82
+ <input type="submit" />
83
+ </form>
84
+ <form method="get" action="/form2">
85
+ <input type="submit" />
86
+ </form>
87
+ </html>
88
+ HTML
89
+ webrat_session.should_receive(:get).with("/form1", {})
90
+ click_button
91
+ end
92
+
93
+ it "should not explode on file fields" do
94
+ with_html <<-HTML
95
+ <html>
96
+ <form method="get" action="/form1">
97
+ <input type="file" />
98
+ <input type="submit" />
99
+ </form>
100
+ </html>
101
+ HTML
102
+ click_button
103
+ end
104
+
105
+ it "should submit the form with the specified button" do
106
+ with_html <<-HTML
107
+ <html>
108
+ <form method="get" action="/form1">
109
+ <input type="submit" />
110
+ </form>
111
+ <form method="get" action="/form2">
112
+ <input type="submit" value="Form2" />
113
+ </form>
114
+ </html>
115
+ HTML
116
+ webrat_session.should_receive(:get).with("/form2", {})
117
+ click_button "Form2"
118
+ end
119
+
120
+ it "should use action from form" do
121
+ with_html <<-HTML
122
+ <html>
123
+ <form method="get" action="/login">
124
+ <input type="submit" />
125
+ </form>
126
+ </html>
127
+ HTML
128
+ webrat_session.should_receive(:get).with("/login", {})
129
+ click_button
130
+ end
131
+
132
+ it "should use method from form" do
133
+ with_html <<-HTML
134
+ <html>
135
+ <form method="post" action="/login">
136
+ <input type="submit" />
137
+ </form>
138
+ </html>
139
+ HTML
140
+ webrat_session.should_receive(:post)
141
+ click_button
142
+ end
143
+
144
+ it "should send button as param if it has a name" do
145
+ with_html <<-HTML
146
+ <html>
147
+ <form method="post" action="/login">
148
+ <input type="submit" name="cancel" value="Cancel" />
149
+ <input type="submit" name="login" value="Login" />
150
+ </form>
151
+ </html>
152
+ HTML
153
+ webrat_session.should_receive(:post).with("/login", "login" => "Login")
154
+ click_button("Login")
155
+ end
156
+
157
+ it "should not send button as param if it has no name" do
158
+ with_html <<-HTML
159
+ <html>
160
+ <form method="post" action="/login">
161
+ <input type="submit" name="cancel" value="Cancel" />
162
+ <input type="submit" value="Login" />
163
+ </form>
164
+ </html>
165
+ HTML
166
+ webrat_session.should_receive(:post).with("/login", {})
167
+ click_button("Login")
168
+ end
169
+
170
+ it "should send default password field values" do
171
+ with_html <<-HTML
172
+ <html>
173
+ <form method="get" action="/login">
174
+ <input id="user_password" name="user[password]" value="mypass" type="password" />
175
+ <input type="submit" />
176
+ </form>
177
+ </html>
178
+ HTML
179
+ webrat_session.should_receive(:get).with("/login", "user" => {"password" => "mypass"})
180
+ click_button
181
+ end
182
+
183
+ it "should send default hidden field values" do
184
+ with_html <<-HTML
185
+ <html>
186
+ <form method="get" action="/login">
187
+ <input id="user_email" name="user[email]" value="test@example.com" type="hidden" />
188
+ <input type="submit" />
189
+ </form>
190
+ </html>
191
+ HTML
192
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => "test@example.com"})
193
+ click_button
194
+ end
195
+
196
+ it "should send default text field values" do
197
+ with_html <<-HTML
198
+ <html>
199
+ <form method="get" action="/login">
200
+ <input id="user_email" name="user[email]" value="test@example.com" type="text" />
201
+ <input type="submit" />
202
+ </form>
203
+ </html>
204
+ HTML
205
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => "test@example.com"})
206
+ click_button
207
+ end
208
+
209
+ it "should not send disabled field values" do
210
+ with_html <<-HTML
211
+ <html>
212
+ <form method="get" action="/login">
213
+ <input disabled="disabled" id="user_email" name="user[email]" value="test@example.com" type="text" />
214
+ <input disabled="disabled" id="user_gender_male" name="user[gender]" type="radio" value="M" />
215
+ <label for="user_gender_male">Male</label>
216
+ <input disabled="disabled" id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
217
+ <label for="user_gender_female">Female</label>
218
+ <input type="submit" />
219
+ </form>
220
+ </html>
221
+ HTML
222
+ webrat_session.should_receive(:get).with("/login", {})
223
+ click_button
224
+ end
225
+
226
+ it "should send default checked fields" do
227
+ with_html <<-HTML
228
+ <html>
229
+ <form method="get" action="/login">
230
+ <input id="user_tos" name="user[tos]" value="1" type="checkbox" checked="checked" />
231
+ <input type="submit" />
232
+ </form>
233
+ </html>
234
+ HTML
235
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "1"})
236
+ click_button
237
+ end
238
+
239
+ it "should send default radio options" do
240
+ with_html <<-HTML
241
+ <html>
242
+ <form method="get" action="/login">
243
+ <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
244
+ <label for="user_gender_male">Male</label>
245
+ <input id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
246
+ <label for="user_gender_female">Female</label>
247
+ <input type="submit" />
248
+ </form>
249
+ </html>
250
+ HTML
251
+ webrat_session.should_receive(:get).with("/login", "user" => {"gender" => "F"})
252
+ click_button
253
+ end
254
+
255
+ it "should send correct data for rails style unchecked fields" do
256
+ with_html <<-HTML
257
+ <html>
258
+ <form method="get" action="/login">
259
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" />
260
+ <input name="user[tos]" type="hidden" value="0" /> TOS
261
+ <input type="submit" />
262
+ </form>
263
+ </html>
264
+ HTML
265
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"})
266
+ click_button
267
+ end
268
+
269
+ it "should send correct data for rails style checked fields" do
270
+ with_html <<-HTML
271
+ <html>
272
+ <form method="get" action="/login">
273
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
274
+ <input name="user[tos]" type="hidden" value="0" /> TOS
275
+ <input type="submit" />
276
+ </form>
277
+ </html>
278
+ HTML
279
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "1"})
280
+ click_button
281
+ end
282
+
283
+ it "should send default collection fields" do
284
+ with_html <<-HTML
285
+ <html>
286
+ <form method="post" action="/login">
287
+ <input type="checkbox" name="options[]" value="burger" checked="checked" />
288
+ <input type="radio" name="options[]" value="fries" checked="checked" />
289
+ <input type="text" name="options[]" value="soda" />
290
+ <!-- Same value appearing twice -->
291
+ <input type="text" name="options[]" value="soda" />
292
+ <input type="hidden" name="options[]" value="dessert" />
293
+ <input type="hidden" name="response[choices][][selected]" value="one" />
294
+ <input type="hidden" name="response[choices][][selected]" value="two" />
295
+ <!-- Same value appearing twice -->
296
+ <input type="hidden" name="response[choices][][selected]" value="two" />
297
+ <input type="submit" />
298
+ </form>
299
+ </html>
300
+ HTML
301
+ webrat_session.should_receive(:post).with("/login",
302
+ "options" => ["burger", "fries", "soda", "soda", "dessert"],
303
+ "response" => { "choices" => [{"selected" => "one"}, {"selected" => "two"}, {"selected" => "two"}]})
304
+ click_button
305
+ end
306
+
307
+ it "should not send default unchecked fields" do
308
+ with_html <<-HTML
309
+ <html>
310
+ <form method="get" action="/login">
311
+ <input id="user_tos" name="user[tos]" value="1" type="checkbox" />
312
+ <input type="submit" />
313
+ </form>
314
+ </html>
315
+ HTML
316
+ webrat_session.should_receive(:get).with("/login", {})
317
+ click_button
318
+ end
319
+
320
+ it "should send default textarea values" do
321
+ with_html <<-HTML
322
+ <html>
323
+ <form method="post" action="/posts">
324
+ <textarea name="post[body]">Post body here!</textarea>
325
+ <input type="submit" />
326
+ </form>
327
+ </html>
328
+ HTML
329
+ webrat_session.should_receive(:post).with("/posts", "post" => {"body" => "Post body here!"})
330
+ click_button
331
+ end
332
+
333
+ it "should properly handle HTML entities in textarea default values" do
334
+ with_html <<-HTML
335
+ <html>
336
+ <form method="post" action="/posts">
337
+ <textarea name="post[body]">Peanut butter &amp; jelly</textarea>
338
+ <input type="submit" />
339
+ </form>
340
+ </html>
341
+ HTML
342
+ webrat_session.should_receive(:post).with("/posts", "post" => {"body" => "Peanut butter & jelly"})
343
+ click_button
344
+ end
345
+
346
+ it "should send default selected option value from select" do
347
+ with_html <<-HTML
348
+ <html>
349
+ <form method="get" action="/login">
350
+ <select name="month">
351
+ <option value="1">January</option>
352
+ <option value="2" selected="selected">February</option>
353
+ </select>
354
+ <input type="submit" />
355
+ </form>
356
+ </html>
357
+ HTML
358
+ webrat_session.should_receive(:get).with("/login", "month" => "2")
359
+ click_button
360
+ end
361
+
362
+ it "should send default selected option inner html from select when no value attribute" do
363
+ with_html <<-HTML
364
+ <html>
365
+ <form method="get" action="/login">
366
+ <select name="month">
367
+ <option>January</option>
368
+ <option selected="selected">February</option>
369
+ </select>
370
+ <input type="submit" />
371
+ </form>
372
+ </html>
373
+ HTML
374
+ webrat_session.should_receive(:get).with("/login", "month" => "February")
375
+ click_button
376
+ end
377
+
378
+ it "should send first select option value when no option selected" do
379
+ with_html <<-HTML
380
+ <html>
381
+ <form method="get" action="/login">
382
+ <select name="month">
383
+ <option value="1">January</option>
384
+ <option value="2">February</option>
385
+ </select>
386
+ <input type="submit" />
387
+ </form>
388
+ </html>
389
+ HTML
390
+ webrat_session.should_receive(:get).with("/login", "month" => "1")
391
+ click_button
392
+ end
393
+
394
+ it "should handle nested properties" do
395
+ with_html <<-HTML
396
+ <html>
397
+ <form method="post" action="/login">
398
+ <input type="text" id="contestant_scores_12" name="contestant[scores][1]" value="2"/>
399
+ <input type="text" id="contestant_scores_13" name="contestant[scores][3]" value="4"/>
400
+ <input type="submit" />
401
+ </form>
402
+ </html>
403
+ HTML
404
+ webrat_session.should_receive(:post).with("/login", "contestant" => {"scores" => {'1' => '2', '3' => '4'}})
405
+ click_button
406
+ end
407
+
408
+ it "should send default empty text field values" do
409
+ with_html <<-HTML
410
+ <html>
411
+ <form method="get" action="/login">
412
+ <input id="user_email" name="user[email]" value="" type="text" />
413
+ <input type="submit" />
414
+ </form>
415
+ </html>
416
+ HTML
417
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
418
+ click_button
419
+ end
420
+
421
+ it "should recognize button tags" do
422
+ with_html <<-HTML
423
+ <html>
424
+ <form method="get" action="/login">
425
+ <input id="user_email" name="user[email]" value="" type="text" />
426
+ <button type="submit" />
427
+ </form>
428
+ </html>
429
+ HTML
430
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
431
+ click_button
432
+ end
433
+
434
+ it "should recognize input tags with the type button" do
435
+ with_html <<-HTML
436
+ <html>
437
+ <form action="/">
438
+ <input type="button" />
439
+ </form>
440
+ </html>
441
+ HTML
442
+ webrat_session.should_receive(:get)
443
+ click_button
444
+ end
445
+
446
+ it "should recognize image button tags" do
447
+ with_html <<-HTML
448
+ <html>
449
+ <form action="/">
450
+ <input type="image" />
451
+ </form>
452
+ </html>
453
+ HTML
454
+ webrat_session.should_receive(:get)
455
+ click_button
456
+ end
457
+
458
+ it "should find buttons by their IDs" do
459
+ with_html <<-HTML
460
+ <html>
461
+ <form action="/">
462
+ <input type="submit" id="my_button" />
463
+ </form>
464
+ </html>
465
+ HTML
466
+ webrat_session.should_receive(:get)
467
+ click_button "my_button"
468
+ end
469
+
470
+ it "should find image buttons by their alt text" do
471
+ with_html <<-HTML
472
+ <html>
473
+ <form action="/">
474
+ <input type="image" alt="Go" />
475
+ </form>
476
+ </html>
477
+ HTML
478
+ webrat_session.should_receive(:get)
479
+ click_button "Go"
480
+ end
481
+
482
+ it "should recognize button tags by content" do
483
+ with_html <<-HTML
484
+ <html>
485
+ <form method="get" action="/login">
486
+ <input id="user_email" name="user[email]" value="" type="text" />
487
+ <button type="submit">Login</button>
488
+ </form>
489
+ </html>
490
+ HTML
491
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
492
+ click_button "Login"
493
+ end
494
+ end