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,455 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "select" do
4
+ it "should fail with a helpful message when option not found" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <form method="get" action="/login">
8
+ <select name="month"><option value="1">January</option></select>
9
+ </form>
10
+ </html>
11
+ HTML
12
+
13
+ lambda { select "February", :from => "month" }.should raise_error(Webrat::NotFoundError,
14
+ "The 'February' option was not found in the \"month\" select box")
15
+ end
16
+
17
+ it "should fail if option not found in list specified by element name" do
18
+ with_html <<-HTML
19
+ <html>
20
+ <form method="get" action="/login">
21
+ <select name="month"><option value="1">January</option></select>
22
+ <select name="year"><option value="2008">2008</option></select>
23
+ </form>
24
+ </html>
25
+ HTML
26
+
27
+ lambda { select "February", :from => "year" }.should raise_error(Webrat::NotFoundError)
28
+ end
29
+
30
+ it "should fail if specified list not found" do
31
+ with_html <<-HTML
32
+ <html>
33
+ <form method="get" action="/login">
34
+ <select name="month"><option value="1">January</option></select>
35
+ </form>
36
+ </html>
37
+ HTML
38
+
39
+ lambda { select "February", :from => "year" }.should raise_error(Webrat::NotFoundError)
40
+ end
41
+
42
+
43
+ it "should fail if the select is disabled" do
44
+ with_html <<-HTML
45
+ <html>
46
+ <form method="post" action="/login">
47
+ <select name="month" disabled="disabled"><option value="1">January</option></select>
48
+ <input type="submit" />
49
+ </form>
50
+ </html>
51
+ HTML
52
+
53
+ lambda { select "January", :from => "month" }.should raise_error(Webrat::DisabledFieldError)
54
+ end
55
+
56
+ it "should send value from option" do
57
+ with_html <<-HTML
58
+ <html>
59
+ <form method="post" action="/login">
60
+ <select name="month"><option value="1">January</option></select>
61
+ <input type="submit" />
62
+ </form>
63
+ </html>
64
+ HTML
65
+ webrat_session.should_receive(:post).with("/login", "month" => "1")
66
+ select "January", :from => "month"
67
+ click_button
68
+ end
69
+
70
+ it "should send values with HTML encoded ampersands" do
71
+ with_html <<-HTML
72
+ <html>
73
+ <form method="post" action="/login">
74
+ <select name="encoded"><option value="A &amp; B">Encoded</option></select>
75
+ <input type="submit" />
76
+ </form>
77
+ </html>
78
+ HTML
79
+ webrat_session.should_receive(:post).with("/login", "encoded" => "A & B")
80
+ select "Encoded", :from => "encoded"
81
+ click_button
82
+ end
83
+
84
+ it "should work with empty select lists" do
85
+ with_html <<-HTML
86
+ <html>
87
+ <form method="post" action="/login">
88
+ <select name="month"></select>
89
+ <input type="submit" />
90
+ </form>
91
+ </html>
92
+ HTML
93
+ webrat_session.should_receive(:post).with("/login", 'month' => '')
94
+ click_button
95
+ end
96
+
97
+ it "should work without specifying the field name or label" do
98
+ with_html <<-HTML
99
+ <html>
100
+ <form method="post" action="/login">
101
+ <select name="month"><option value="1">January</option></select>
102
+ <input type="submit" />
103
+ </form>
104
+ </html>
105
+ HTML
106
+ webrat_session.should_receive(:post).with("/login", "month" => "1")
107
+ select "January"
108
+ click_button
109
+ end
110
+
111
+ it "should send value from option in list specified by name" do
112
+ with_html <<-HTML
113
+ <html>
114
+ <form method="post" action="/login">
115
+ <select name="start_month"><option value="s1">January</option></select>
116
+ <select name="end_month"><option value="e1">January</option></select>
117
+ <input type="submit" />
118
+ </form>
119
+ </html>
120
+ HTML
121
+ webrat_session.should_receive(:post).with("/login", "start_month" => "s1", "end_month" => "e1")
122
+ select "January", :from => "end_month"
123
+ click_button
124
+ end
125
+
126
+ it "should send value from option in list specified by label" do
127
+ with_html <<-HTML
128
+ <html>
129
+ <form method="post" action="/login">
130
+ <label for="start_month">Start Month</label>
131
+ <select id="start_month" name="start_month"><option value="s1">January</option></select>
132
+ <label for="end_month">End Month</label>
133
+ <select id="end_month" name="end_month"><option value="e1">January</option></select>
134
+ <input type="submit" />
135
+ </form>
136
+ </html>
137
+ HTML
138
+ webrat_session.should_receive(:post).with("/login", "start_month" => "s1", "end_month" => "e1")
139
+ select "January", :from => "End Month"
140
+ click_button
141
+ end
142
+
143
+ it "should use option text if no value" do
144
+ with_html <<-HTML
145
+ <html>
146
+ <form method="post" action="/login">
147
+ <select name="month"><option>January</option></select>
148
+ <input type="submit" />
149
+ </form>
150
+ </html>
151
+ HTML
152
+ webrat_session.should_receive(:post).with("/login", "month" => "January")
153
+ select "January", :from => "month"
154
+ click_button
155
+ end
156
+
157
+ it "should find option by regexp" do
158
+ with_html <<-HTML
159
+ <html>
160
+ <form method="post" action="/login">
161
+ <select name="month"><option>January</option></select>
162
+ <input type="submit" />
163
+ </form>
164
+ </html>
165
+ HTML
166
+ webrat_session.should_receive(:post).with("/login", "month" => "January")
167
+ select /jan/i
168
+ click_button
169
+ end
170
+
171
+ it "should find options by regexp with HTML entities" do
172
+ with_html <<-HTML
173
+ <html>
174
+ <form method="post" action="/login">
175
+ <select name="month"><option>Peanut butter &amp; jelly</option></select>
176
+ <input type="submit" />
177
+ </form>
178
+ </html>
179
+ HTML
180
+
181
+ webrat_session.should_receive(:post).with("/login", "month" => "Peanut butter & jelly")
182
+ select /Peanut butter & jelly/
183
+ click_button
184
+ end
185
+
186
+ it "should not find options by regexp with HTML entities in the regexp" do
187
+ with_html <<-HTML
188
+ <html>
189
+ <form method="post" action="/login">
190
+ <select name="month"><option>Peanut butter &amp; jelly</option></select>
191
+ <input type="submit" />
192
+ </form>
193
+ </html>
194
+ HTML
195
+
196
+ lambda {
197
+ select /Peanut butter &amp; jelly/
198
+ }.should raise_error(Webrat::NotFoundError)
199
+ end
200
+
201
+ it "should fail if no option matching the regexp exists" do
202
+ with_html <<-HTML
203
+ <html>
204
+ <form method="post" action="/login">
205
+ <select name="month"><option>January</option></select>
206
+ <input type="submit" />
207
+ </form>
208
+ </html>
209
+ HTML
210
+
211
+ lambda {
212
+ select /feb/i
213
+ }.should raise_error(Webrat::NotFoundError)
214
+ end
215
+
216
+ it "should find option by regexp in list specified by label" do
217
+ with_html <<-HTML
218
+ <html>
219
+ <form method="post" action="/login">
220
+ <label for="start_month">Start Month</label>
221
+ <select id="start_month" name="start_month"><option value="s1">January</option></select>
222
+ <label for="end_month">End Month</label>
223
+ <select id="end_month" name="end_month"><option value="e1">January</option></select>
224
+ <input type="submit" />
225
+ </form>
226
+ </html>
227
+ HTML
228
+ webrat_session.should_receive(:post).with("/login", "start_month" => "s1", "end_month" => "e1")
229
+ select /jan/i, :from => "End Month"
230
+ click_button
231
+ end
232
+
233
+ it "should properly handle submitting HTML entities in select values" do
234
+ with_html <<-HTML
235
+ <html>
236
+ <form method="post" action="/login">
237
+ <select name="month"><option>Peanut butter &amp; jelly</option></select>
238
+ <input type="submit" />
239
+ </form>
240
+ </html>
241
+ HTML
242
+
243
+ webrat_session.should_receive(:post).with("/login", "month" => "Peanut butter & jelly")
244
+ click_button
245
+ end
246
+
247
+ it "should properly handle locating with HTML entities in select values" do
248
+ with_html <<-HTML
249
+ <html>
250
+ <form method="post" action="/login">
251
+ <select name="month"><option>Peanut butter &amp; jelly</option></select>
252
+ <input type="submit" />
253
+ </form>
254
+ </html>
255
+ HTML
256
+
257
+ webrat_session.should_receive(:post).with("/login", "month" => "Peanut butter & jelly")
258
+ select "Peanut butter & jelly"
259
+ click_button
260
+ end
261
+
262
+ it "should not locate based on HTML entities" do
263
+ with_html <<-HTML
264
+ <html>
265
+ <form method="post" action="/login">
266
+ <select name="month"><option>Peanut butter &amp; jelly</option></select>
267
+ <input type="submit" />
268
+ </form>
269
+ </html>
270
+ HTML
271
+
272
+ lambda {
273
+ select "Peanut butter &amp; jelly"
274
+ }.should raise_error(Webrat::NotFoundError)
275
+ end
276
+
277
+ it "should submit duplicates selected options as a single value" do
278
+ with_html <<-HTML
279
+ <html>
280
+ <form method="post" action="/login">
281
+ <select name="clothes"><option value="pants" selected="selected">pants</option><option value="pants" selected="selected">pants</option></select>
282
+ <input type="submit" />
283
+ </form>
284
+ </html>
285
+ HTML
286
+
287
+ webrat_session.should_receive(:post).with("/login", "clothes" => "pants")
288
+ click_button
289
+ end
290
+
291
+ it "should allow fields to be unselected" do
292
+ with_html <<-HTML
293
+ <html>
294
+ <form method="post" action="/login">
295
+ <select name="clothes">
296
+ <option value="tshirt" selected="selected">tshirt</option>
297
+ <option value="pants">pants</option>
298
+ </select>
299
+ <input type="submit" />
300
+ </form>
301
+ </html>
302
+ HTML
303
+
304
+ webrat_session.should_receive(:post).with("/login", {"clothes"=>""})
305
+ unselect "tshirt"
306
+ click_button
307
+ end
308
+
309
+ #
310
+ # Mutliple Selection Fields
311
+ #
312
+
313
+ it "should not submit any values for multiples without any selected" do
314
+ with_html <<-HTML
315
+ <html>
316
+ <form method="post" action="/login">
317
+ <select name="clothes[]" multiple="multiple">
318
+ <option value="tshirt">tshirt</option>
319
+ <option value="pants">pants</option>
320
+ </select>
321
+ <input type="submit" />
322
+ </form>
323
+ </html>
324
+ HTML
325
+
326
+ webrat_session.should_receive(:post).with("/login", {})
327
+ click_button
328
+ end
329
+
330
+ it "should submit with preselected values" do
331
+ with_html <<-HTML
332
+ <html>
333
+ <form method="post" action="/login">
334
+ <select name="clothes[]" multiple="multiple">
335
+ <option value="tshirt" selected="selected">tshirt</option>
336
+ <option value="pants" selected="selected">pants</option>
337
+ </select>
338
+ <input type="submit" />
339
+ </form>
340
+ </html>
341
+ HTML
342
+
343
+ webrat_session.should_receive(:post).with("/login", "clothes" => ['tshirt', 'pants'])
344
+ click_button
345
+ end
346
+
347
+ it "should allow selection of multiple fields" do
348
+ with_html <<-HTML
349
+ <html>
350
+ <form method="post" action="/login">
351
+ <select name="clothes[]" multiple="multiple">
352
+ <option value="tshirt">tshirt</option>
353
+ <option value="pants">pants</option>
354
+ </select>
355
+ <input type="submit" />
356
+ </form>
357
+ </html>
358
+ HTML
359
+
360
+ webrat_session.should_receive(:post).with("/login", "clothes" => ['pants'])
361
+ select 'pants'
362
+ click_button
363
+ end
364
+
365
+ it "should not overwrite preselected multiples" do
366
+ with_html <<-HTML
367
+ <html>
368
+ <form method="post" action="/login">
369
+ <select name="clothes[]" multiple="multiple">
370
+ <option value="tshirt" selected="selected">tshirt</option>
371
+ <option value="pants">pants</option>
372
+ </select>
373
+ <input type="submit" />
374
+ </form>
375
+ </html>
376
+ HTML
377
+
378
+ webrat_session.should_receive(:post).with("/login", "clothes" => ['tshirt', 'pants'])
379
+ select 'pants'
380
+ click_button
381
+ end
382
+
383
+ it "should allow fields that exist to be selected or throw errors" do
384
+ with_html <<-HTML
385
+ <html>
386
+ <form method="post" action="/login">
387
+ <select name="clothes[]" multiple="multiple">
388
+ <option value="top" selected="selected">shirt</option>
389
+ <option value="pants">trousers</option>
390
+ </select>
391
+ <input type="submit" />
392
+ </form>
393
+ </html>
394
+ HTML
395
+
396
+ lambda { select "shirt" }.should_not raise_error(Webrat::NotFoundError)
397
+ lambda { select "trousers" }.should_not raise_error(Webrat::NotFoundError)
398
+ lambda { select "shoes" }.should raise_error(Webrat::NotFoundError)
399
+ end
400
+
401
+ it "should allow selected fields to be unselected" do
402
+ with_html <<-HTML
403
+ <html>
404
+ <form method="post" action="/login">
405
+ <select name="clothes[]" multiple="multiple">
406
+ <option value="tshirt" selected="selected">tshirt</option>
407
+ <option value="pants" selected="selected">pants</option>
408
+ </select>
409
+ <input type="submit" />
410
+ </form>
411
+ </html>
412
+ HTML
413
+
414
+ webrat_session.should_receive(:post).with("/login", "clothes" => ['pants'])
415
+ unselect 'tshirt'
416
+ click_button
417
+ end
418
+
419
+ it "should be able to select options with special characters" do
420
+ with_html <<-HTML
421
+ <html>
422
+ <form method="post" action="/login">
423
+ <select name="clothes[]" multiple="multiple">
424
+ <option>tshirt &amp; sweater</option>
425
+ <option>pants &amp; socks</option>
426
+ </select>
427
+ <input type="submit" />
428
+ </form>
429
+ </html>
430
+ HTML
431
+
432
+ webrat_session.should_receive(:post).with("/login", "clothes" => ['pants & socks'])
433
+ select 'pants & socks'
434
+ click_button
435
+ end
436
+
437
+ it "should be able to unselect options with special characters" do
438
+ with_html <<-HTML
439
+ <html>
440
+ <form method="post" action="/login">
441
+ <select name="clothes[]" multiple="multiple">
442
+ <option selected="selected">tshirt &amp; sweater</option>
443
+ <option selected="selected">pants &amp; socks</option>
444
+ </select>
445
+ <input type="submit" />
446
+ </form>
447
+ </html>
448
+ HTML
449
+
450
+ webrat_session.should_receive(:post).with("/login", "clothes" => ['tshirt & sweater'])
451
+ unselect 'pants & socks'
452
+ click_button
453
+ end
454
+
455
+ end
@@ -0,0 +1,100 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "select_time" do
4
+ it "should send the values for each individual time component" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <form action="/appointments" method="post">
8
+ <label for="appointment_time">Time</label><br />
9
+ <select id="appointment_time_4i" name="appointment[time(4i)]">
10
+ <option value="09">09</option>
11
+ </select>
12
+ : <select id="appointment_time_5i" name="appointment[time(5i)]">
13
+ <option value="30">30</option>
14
+ </select>
15
+ <input type="submit" />
16
+ </form>
17
+ </html>
18
+ HTML
19
+ webrat_session.should_receive(:post).with("/appointments",
20
+ "appointment" => {"time(4i)" => "09", "time(5i)" => "30"})
21
+ select_time "9:30AM", :from => "Time"
22
+ click_button
23
+ end
24
+
25
+ it "should accept a time object" do
26
+ with_html <<-HTML
27
+ <html>
28
+ <form action="/appointments" method="post">
29
+ <label for="appointment_time">Time</label><br />
30
+ <select id="appointment_time_4i" name="appointment[time(4i)]">
31
+ <option value="09">09</option>
32
+ </select>
33
+ : <select id="appointment_time_5i" name="appointment[time(5i)]">
34
+ <option value="30">30</option>
35
+ </select>
36
+ <input type="submit" />
37
+ </form>
38
+ </html>
39
+ HTML
40
+ webrat_session.should_receive(:post).with("/appointments",
41
+ "appointment" => {"time(4i)" => "09", "time(5i)" => "30"})
42
+ select_time Time.parse("9:30AM"), :from => "Time"
43
+ click_button
44
+ end
45
+
46
+ it "should work when the label ends in a non word character" do
47
+ with_html <<-HTML
48
+ <html>
49
+ <form action="/appointments" method="post">
50
+ <label for="appointment_time">Time #</label><br />
51
+ <select id="appointment_time_4i" name="appointment[time(4i)]">
52
+ <option value="09">09</option>
53
+ </select>
54
+ : <select id="appointment_time_5i" name="appointment[time(5i)]">
55
+ <option value="30">30</option>
56
+ </select>
57
+ <input type="submit" />
58
+ </form>
59
+ </html>
60
+ HTML
61
+ webrat_session.should_receive(:post).with("/appointments",
62
+ "appointment" => {"time(4i)" => "09", "time(5i)" => "30"})
63
+ select_time "9:30AM", :from => "Time #"
64
+ click_button
65
+ end
66
+
67
+ it "should work when no label is specified" do
68
+ with_html <<-HTML
69
+ <html>
70
+ <form action="/appointments" method="post">
71
+ <select id="appointment_time_4i" name="appointment[time(4i)]">
72
+ <option value="09">09</option>
73
+ </select>
74
+ : <select id="appointment_time_5i" name="appointment[time(5i)]">
75
+ <option value="30">30</option>
76
+ </select>
77
+ <input type="submit" />
78
+ </form>
79
+ </html>
80
+ HTML
81
+ webrat_session.should_receive(:post).with("/appointments",
82
+ "appointment" => {"time(4i)" => "09", "time(5i)" => "30"})
83
+ select_time "9:30"
84
+ click_button
85
+ end
86
+
87
+ it "should fail if the specified label is not found" do
88
+ with_html <<-HTML
89
+ <html>
90
+ <form method="post" action="/appointments">
91
+ <select name="month"><option>January</option></select>
92
+ <input type="submit" />
93
+ </form>
94
+ </html>
95
+ HTML
96
+
97
+ lambda { select_time "9:30", :from => "Time" }.should raise_error(Webrat::NotFoundError)
98
+ end
99
+
100
+ end
@@ -0,0 +1,49 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require "webrat/selenium/silence_stream"
4
+ require "webrat/selenium/application_server_factory"
5
+
6
+ require "webrat/selenium/application_servers"
7
+
8
+ describe Webrat::Selenium::ApplicationServerFactory do
9
+
10
+ it "should require and create a sinatra server in sinatra mode" do
11
+ server = mock(Webrat::Selenium::ApplicationServers::Sinatra)
12
+ Webrat.configuration.application_framework = :sinatra
13
+ Webrat::Selenium::ApplicationServerFactory.should_receive(:require).with("webrat/selenium/application_servers/sinatra")
14
+ Webrat::Selenium::ApplicationServers::Sinatra.should_receive(:new).and_return(server)
15
+ Webrat::Selenium::ApplicationServerFactory.app_server_instance.should == server
16
+ end
17
+
18
+ it "should require and create a merb server in merb mode" do
19
+ server = mock(Webrat::Selenium::ApplicationServers::Merb)
20
+ Webrat.configuration.application_framework = :merb
21
+ Webrat::Selenium::ApplicationServerFactory.should_receive(:require).with("webrat/selenium/application_servers/merb")
22
+ Webrat::Selenium::ApplicationServers::Merb.should_receive(:new).and_return(server)
23
+ Webrat::Selenium::ApplicationServerFactory.app_server_instance
24
+ end
25
+
26
+ it "should require and create a rails server in rails mode" do
27
+ server = mock(Webrat::Selenium::ApplicationServers::Rails)
28
+ Webrat.configuration.application_framework = :rails
29
+ Webrat::Selenium::ApplicationServerFactory.should_receive(:require).with("webrat/selenium/application_servers/rails")
30
+ Webrat::Selenium::ApplicationServers::Rails.should_receive(:new).and_return(server)
31
+ Webrat::Selenium::ApplicationServerFactory.app_server_instance
32
+ end
33
+
34
+ it "should require and create a rails server in external mode" do
35
+ server = mock(Webrat::Selenium::ApplicationServers::External)
36
+ Webrat.configuration.application_framework = :external
37
+ Webrat::Selenium::ApplicationServerFactory.should_receive(:require).with("webrat/selenium/application_servers/external")
38
+ Webrat::Selenium::ApplicationServers::External.should_receive(:new).and_return(server)
39
+ Webrat::Selenium::ApplicationServerFactory.app_server_instance
40
+ end
41
+
42
+ it "should handle unknown servers with an exception in unknown modes" do
43
+ Webrat.configuration.application_framework = :unknown
44
+ lambda {
45
+ Webrat::Selenium::ApplicationServerFactory.app_server_instance
46
+ }.should raise_error(Webrat::WebratError)
47
+ end
48
+
49
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
2
+
3
+ require "webrat/selenium/application_servers/base"
4
+ require "webrat/selenium/application_servers/external"
5
+
6
+ describe Webrat::Selenium::ApplicationServers::External do
7
+
8
+ it "should just boot up with no exceptions" do
9
+ Webrat::Selenium::ApplicationServers::External.new.boot
10
+ end
11
+
12
+ end
@@ -0,0 +1,37 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require "webrat/selenium/silence_stream"
4
+ require "webrat/selenium/selenium_session"
5
+
6
+ describe Webrat::SeleniumSession do
7
+
8
+ before :each do
9
+ Webrat.configuration.mode = :selenium
10
+ @selenium = Webrat::SeleniumSession.new()
11
+ end
12
+
13
+ it "should throw timeout instead of spec expectionnotmet error" do
14
+ lambda {
15
+ @selenium.wait_for(:timeout => 0.0001) do
16
+ raise ::Spec::Expectations::ExpectationNotMetError
17
+ end
18
+ }.should raise_error(Webrat::TimeoutError)
19
+ end
20
+
21
+ it "should throw timeout instead of selenium command error" do
22
+ lambda {
23
+ @selenium.wait_for(:timeout => 0.0001) do
24
+ raise ::Selenium::CommandError
25
+ end
26
+ }.should raise_error(Webrat::TimeoutError)
27
+ end
28
+
29
+ it "should throw timeout instead of webrat error" do
30
+ lambda {
31
+ @selenium.wait_for(:timeout => 0.0001) do
32
+ raise Webrat::WebratError.new
33
+ end
34
+ }.should raise_error(Webrat::TimeoutError)
35
+ end
36
+
37
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "set_hidden_field" do
4
+ it "needs specs"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "submit_form" do
4
+ it "needs specs"
5
+ end