raldred-webrat 0.4.4.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 (160) hide show
  1. data/History.txt +346 -0
  2. data/MIT-LICENSE.txt +19 -0
  3. data/README.rdoc +85 -0
  4. data/Rakefile +168 -0
  5. data/install.rb +1 -0
  6. data/lib/webrat.rb +31 -0
  7. data/lib/webrat/core.rb +14 -0
  8. data/lib/webrat/core/configuration.rb +102 -0
  9. data/lib/webrat/core/elements/area.rb +31 -0
  10. data/lib/webrat/core/elements/element.rb +33 -0
  11. data/lib/webrat/core/elements/field.rb +405 -0
  12. data/lib/webrat/core/elements/form.rb +103 -0
  13. data/lib/webrat/core/elements/label.rb +31 -0
  14. data/lib/webrat/core/elements/link.rb +92 -0
  15. data/lib/webrat/core/elements/select_option.rb +35 -0
  16. data/lib/webrat/core/locators.rb +20 -0
  17. data/lib/webrat/core/locators/area_locator.rb +38 -0
  18. data/lib/webrat/core/locators/button_locator.rb +54 -0
  19. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  20. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  21. data/lib/webrat/core/locators/field_locator.rb +25 -0
  22. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  23. data/lib/webrat/core/locators/form_locator.rb +19 -0
  24. data/lib/webrat/core/locators/label_locator.rb +34 -0
  25. data/lib/webrat/core/locators/link_locator.rb +75 -0
  26. data/lib/webrat/core/locators/locator.rb +20 -0
  27. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  28. data/lib/webrat/core/logging.rb +24 -0
  29. data/lib/webrat/core/matchers.rb +4 -0
  30. data/lib/webrat/core/matchers/have_content.rb +73 -0
  31. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  32. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  33. data/lib/webrat/core/matchers/have_xpath.rb +147 -0
  34. data/lib/webrat/core/methods.rb +63 -0
  35. data/lib/webrat/core/mime.rb +29 -0
  36. data/lib/webrat/core/save_and_open_page.rb +50 -0
  37. data/lib/webrat/core/scope.rb +350 -0
  38. data/lib/webrat/core/session.rb +289 -0
  39. data/lib/webrat/core/xml.rb +115 -0
  40. data/lib/webrat/core/xml/hpricot.rb +19 -0
  41. data/lib/webrat/core/xml/nokogiri.rb +76 -0
  42. data/lib/webrat/core/xml/rexml.rb +24 -0
  43. data/lib/webrat/core_extensions/blank.rb +58 -0
  44. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  45. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  46. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  47. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  48. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  49. data/lib/webrat/mechanize.rb +74 -0
  50. data/lib/webrat/merb.rb +9 -0
  51. data/lib/webrat/merb_session.rb +65 -0
  52. data/lib/webrat/rack.rb +24 -0
  53. data/lib/webrat/rack_test.rb +32 -0
  54. data/lib/webrat/rails.rb +105 -0
  55. data/lib/webrat/rspec-rails.rb +13 -0
  56. data/lib/webrat/selenium.rb +81 -0
  57. data/lib/webrat/selenium/application_server.rb +73 -0
  58. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  59. data/lib/webrat/selenium/location_strategy_javascript/label.js +15 -0
  60. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  61. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
  62. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  63. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  64. data/lib/webrat/selenium/matchers.rb +4 -0
  65. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  66. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  67. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  68. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  69. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  70. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  71. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  72. data/lib/webrat/selenium/selenium_rc_server.rb +84 -0
  73. data/lib/webrat/selenium/selenium_session.rb +242 -0
  74. data/lib/webrat/selenium/silence_stream.rb +18 -0
  75. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  76. data/lib/webrat/sinatra.rb +44 -0
  77. data/spec/fakes/test_session.rb +34 -0
  78. data/spec/integration/merb/app/controllers/application.rb +2 -0
  79. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  80. data/spec/integration/merb/app/controllers/testing.rb +18 -0
  81. data/spec/integration/merb/config/environments/development.rb +15 -0
  82. data/spec/integration/merb/config/environments/rake.rb +11 -0
  83. data/spec/integration/merb/config/environments/test.rb +14 -0
  84. data/spec/integration/merb/config/init.rb +25 -0
  85. data/spec/integration/merb/config/rack.rb +11 -0
  86. data/spec/integration/merb/config/router.rb +33 -0
  87. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  88. data/spec/integration/merb/spec/webrat_spec.rb +32 -0
  89. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  90. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  91. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  92. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  93. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  94. data/spec/integration/rack/rack_app.rb +16 -0
  95. data/spec/integration/rack/test/test_helper.rb +20 -0
  96. data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
  97. data/spec/integration/rails/app/controllers/application.rb +15 -0
  98. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  99. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  100. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  101. data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
  102. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  103. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  104. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  105. data/spec/integration/rails/config/boot.rb +109 -0
  106. data/spec/integration/rails/config/environment.rb +12 -0
  107. data/spec/integration/rails/config/environments/development.rb +17 -0
  108. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  109. data/spec/integration/rails/config/environments/test.rb +22 -0
  110. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  111. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  112. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  113. data/spec/integration/rails/config/routes.rb +17 -0
  114. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  115. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  116. data/spec/integration/rails/test/integration/link_click_test.rb +21 -0
  117. data/spec/integration/rails/test/integration/webrat_test.rb +75 -0
  118. data/spec/integration/rails/test/test_helper.rb +25 -0
  119. data/spec/integration/sinatra/classic_app.rb +64 -0
  120. data/spec/integration/sinatra/modular_app.rb +16 -0
  121. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  122. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  123. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  124. data/spec/private/core/configuration_spec.rb +106 -0
  125. data/spec/private/core/field_spec.rb +85 -0
  126. data/spec/private/core/link_spec.rb +24 -0
  127. data/spec/private/core/logging_spec.rb +10 -0
  128. data/spec/private/core/session_spec.rb +198 -0
  129. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  130. data/spec/private/merb/merb_session_spec.rb +42 -0
  131. data/spec/private/nokogiri_spec.rb +77 -0
  132. data/spec/private/rails/attaches_file_spec.rb +81 -0
  133. data/spec/private/rails/rails_session_spec.rb +110 -0
  134. data/spec/public/basic_auth_spec.rb +24 -0
  135. data/spec/public/check_spec.rb +191 -0
  136. data/spec/public/choose_spec.rb +118 -0
  137. data/spec/public/click_area_spec.rb +106 -0
  138. data/spec/public/click_button_spec.rb +496 -0
  139. data/spec/public/click_link_spec.rb +541 -0
  140. data/spec/public/fill_in_spec.rb +209 -0
  141. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  142. data/spec/public/locators/field_labeled_spec.rb +172 -0
  143. data/spec/public/locators/field_with_id_spec.rb +16 -0
  144. data/spec/public/matchers/contain_spec.rb +114 -0
  145. data/spec/public/matchers/have_selector_spec.rb +142 -0
  146. data/spec/public/matchers/have_tag_spec.rb +39 -0
  147. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  148. data/spec/public/reload_spec.rb +10 -0
  149. data/spec/public/save_and_open_spec.rb +51 -0
  150. data/spec/public/select_date_spec.rb +112 -0
  151. data/spec/public/select_datetime_spec.rb +137 -0
  152. data/spec/public/select_spec.rb +249 -0
  153. data/spec/public/select_time_spec.rb +100 -0
  154. data/spec/public/set_hidden_field_spec.rb +5 -0
  155. data/spec/public/submit_form_spec.rb +5 -0
  156. data/spec/public/visit_spec.rb +58 -0
  157. data/spec/public/within_spec.rb +177 -0
  158. data/spec/spec_helper.rb +50 -0
  159. data/vendor/selenium-server.jar +0 -0
  160. metadata +220 -0
@@ -0,0 +1,137 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "select_datetime" do
4
+ it "should send the values for each individual date and time components" 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_1i" name="appointment[time(1i)]">
10
+ <option value="2003">2003</option>
11
+ </select>
12
+ <select id="appointment_time_2i" name="appointment[time(2i)]">
13
+ <option value="12">December</option>
14
+ </select>
15
+ <select id="appointment_time_3i" name="appointment[time(3i)]">
16
+ <option value="25">25</option>
17
+ </select>
18
+ <select id="appointment_time_4i" name="appointment[time(4i)]">
19
+ <option value="09">09</option>
20
+ </select>
21
+ : <select id="appointment_time_5i" name="appointment[time(5i)]">
22
+ <option value="30">30</option>
23
+ </select>
24
+ <input type="submit" />
25
+ </form>
26
+ </html>
27
+ HTML
28
+ webrat_session.should_receive(:post).with("/appointments",
29
+ "appointment" => {"time(1i)" => '2003', "time(2i)" => "12", "time(3i)" => "25", "time(4i)" => "09", "time(5i)" => "30"})
30
+ select_datetime "December 25, 2003 9:30", :from => "Time"
31
+ click_button
32
+ end
33
+
34
+ it "should accept a time object" do
35
+ with_html <<-HTML
36
+ <html>
37
+ <form action="/appointments" method="post">
38
+ <label for="appointment_time">Time</label><br />
39
+ <select id="appointment_time_1i" name="appointment[time(1i)]">
40
+ <option value="2003">2003</option>
41
+ </select>
42
+ <select id="appointment_time_2i" name="appointment[time(2i)]">
43
+ <option value="12">December</option>
44
+ </select>
45
+ <select id="appointment_time_3i" name="appointment[time(3i)]">
46
+ <option value="25">25</option>
47
+ </select>
48
+ <select id="appointment_time_4i" name="appointment[time(4i)]">
49
+ <option value="09">09</option>
50
+ </select>
51
+ : <select id="appointment_time_5i" name="appointment[time(5i)]">
52
+ <option value="30">30</option>
53
+ </select>
54
+ <input type="submit" />
55
+ </form>
56
+ </html>
57
+ HTML
58
+ webrat_session.should_receive(:post).with("/appointments",
59
+ "appointment" => {"time(1i)" => '2003', "time(2i)" => "12", "time(3i)" => "25", "time(4i)" => "09", "time(5i)" => "30"})
60
+ select_datetime Time.parse("December 25, 2003 9:30"), :from => "Time"
61
+ click_button
62
+ end
63
+
64
+ it "should work when the label ends in a non word character" do
65
+ with_html <<-HTML
66
+ <html>
67
+ <form action="/appointments" method="post">
68
+ <label for="appointment_time">Time ?</label><br />
69
+ <select id="appointment_time_1i" name="appointment[time(1i)]">
70
+ <option value="2003">2003</option>
71
+ </select>
72
+ <select id="appointment_time_2i" name="appointment[time(2i)]">
73
+ <option value="12">December</option>
74
+ </select>
75
+ <select id="appointment_time_3i" name="appointment[time(3i)]">
76
+ <option value="25">25</option>
77
+ </select>
78
+ <select id="appointment_time_4i" name="appointment[time(4i)]">
79
+ <option value="09">09</option>
80
+ </select>
81
+ : <select id="appointment_time_5i" name="appointment[time(5i)]">
82
+ <option value="30">30</option>
83
+ </select>
84
+ <input type="submit" />
85
+ </form>
86
+ </html>
87
+ HTML
88
+ webrat_session.should_receive(:post).with("/appointments",
89
+ "appointment" => {"time(1i)" => '2003', "time(2i)" => "12", "time(3i)" => "25", "time(4i)" => "09", "time(5i)" => "30"})
90
+ select_datetime "December 25, 2003 9:30", :from => "Time ?"
91
+ click_button
92
+ end
93
+
94
+
95
+ it "should work when no label is specified" do
96
+ with_html <<-HTML
97
+ <html>
98
+ <form action="/appointments" method="post">
99
+ <select id="appointment_time_1i" name="appointment[time(1i)]">
100
+ <option value="2003">2003</option>
101
+ </select>
102
+ <select id="appointment_time_2i" name="appointment[time(2i)]">
103
+ <option value="12">December</option>
104
+ </select>
105
+ <select id="appointment_time_3i" name="appointment[time(3i)]">
106
+ <option value="25">25</option>
107
+ </select>
108
+ <select id="appointment_time_4i" name="appointment[time(4i)]">
109
+ <option value="09">09</option>
110
+ </select>
111
+ : <select id="appointment_time_5i" name="appointment[time(5i)]">
112
+ <option value="30">30</option>
113
+ </select>
114
+ <input type="submit" />
115
+ </form>
116
+ </html>
117
+ HTML
118
+ webrat_session.should_receive(:post).with("/appointments",
119
+ "appointment" => {"time(1i)" => '2003', "time(2i)" => "12", "time(3i)" => "25", "time(4i)" => "09", "time(5i)" => "30"})
120
+ select_datetime "December 25, 2003 9:30"
121
+ click_button
122
+ end
123
+
124
+ it "should fail if the specified label is not found" do
125
+ with_html <<-HTML
126
+ <html>
127
+ <form method="post" action="/appointments">
128
+ <select name="month"><option>January</option></select>
129
+ <input type="submit" />
130
+ </form>
131
+ </html>
132
+ HTML
133
+
134
+ lambda { select_datetime "December 25, 2003 9:30", :from => "Time" }.should raise_error(Webrat::NotFoundError)
135
+ end
136
+
137
+ end
@@ -0,0 +1,249 @@
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 fail if no option matching the regexp exists" do
172
+ with_html <<-HTML
173
+ <html>
174
+ <form method="post" action="/login">
175
+ <select name="month"><option>January</option></select>
176
+ <input type="submit" />
177
+ </form>
178
+ </html>
179
+ HTML
180
+
181
+ lambda {
182
+ select /feb/i
183
+ }.should raise_error(Webrat::NotFoundError)
184
+ end
185
+
186
+ it "should find option by regexp in list specified by label" do
187
+ with_html <<-HTML
188
+ <html>
189
+ <form method="post" action="/login">
190
+ <label for="start_month">Start Month</label>
191
+ <select id="start_month" name="start_month"><option value="s1">January</option></select>
192
+ <label for="end_month">End Month</label>
193
+ <select id="end_month" name="end_month"><option value="e1">January</option></select>
194
+ <input type="submit" />
195
+ </form>
196
+ </html>
197
+ HTML
198
+ webrat_session.should_receive(:post).with("/login", "start_month" => "s1", "end_month" => "e1")
199
+ select /jan/i, :from => "End Month"
200
+ click_button
201
+ end
202
+
203
+ it "should properly handle submitting HTML entities in select values" do
204
+ pending "needs bug fix" do
205
+ with_html <<-HTML
206
+ <html>
207
+ <form method="post" action="/login">
208
+ <select name="month"><option>Peanut butter &amp; jelly</option></select>
209
+ <input type="submit" />
210
+ </form>
211
+ </html>
212
+ HTML
213
+ webrat_session.should_receive(:post).with("/login", "month" => "Peanut butter & jelly")
214
+ click_button
215
+ end
216
+ end
217
+
218
+ it "should properly handle locating with HTML entities in select values" do
219
+ pending "needs bug fix" do
220
+ with_html <<-HTML
221
+ <html>
222
+ <form method="post" action="/login">
223
+ <select name="month"><option>Peanut butter &amp; jelly</option></select>
224
+ <input type="submit" />
225
+ </form>
226
+ </html>
227
+ HTML
228
+
229
+ lambda {
230
+ select "Peanut butter & jelly"
231
+ }.should_not raise_error(Webrat::NotFoundError)
232
+ end
233
+ end
234
+
235
+ it "should submit duplicates selected options as a single value" do
236
+ with_html <<-HTML
237
+ <html>
238
+ <form method="post" action="/login">
239
+ <select name="clothes"><option value="pants" selected="selected">pants</option><option value="pants" selected="selected">pants</option></select>
240
+ <input type="submit" />
241
+ </form>
242
+ </html>
243
+ HTML
244
+
245
+ webrat_session.should_receive(:post).with("/login", "clothes" => "pants")
246
+ click_button
247
+ end
248
+
249
+ 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