mkuklis-webrat 0.5.1 → 0.6.rc1
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.
- data/.document +3 -3
- data/.gitignore +14 -14
- data/History.txt +413 -413
- data/MIT-LICENSE.txt +19 -19
- data/README.rdoc +84 -84
- data/Rakefile +187 -187
- data/VERSION +1 -1
- data/install.rb +1 -1
- data/lib/webrat/adapters/mechanize.rb +78 -78
- data/lib/webrat/adapters/merb.rb +11 -11
- data/lib/webrat/adapters/rack.rb +25 -25
- data/lib/webrat/adapters/rails.rb +81 -81
- data/lib/webrat/adapters/sinatra.rb +9 -9
- data/lib/webrat/core/configuration.rb +92 -92
- data/lib/webrat/core/elements/area.rb +31 -31
- data/lib/webrat/core/elements/element.rb +33 -33
- data/lib/webrat/core/elements/field.rb +487 -487
- data/lib/webrat/core/elements/form.rb +103 -103
- data/lib/webrat/core/elements/label.rb +31 -31
- data/lib/webrat/core/elements/link.rb +93 -93
- data/lib/webrat/core/elements/select_option.rb +48 -48
- data/lib/webrat/core/locators/area_locator.rb +38 -38
- data/lib/webrat/core/locators/button_locator.rb +54 -54
- data/lib/webrat/core/locators/field_by_id_locator.rb +37 -37
- data/lib/webrat/core/locators/field_labeled_locator.rb +56 -56
- data/lib/webrat/core/locators/field_locator.rb +25 -25
- data/lib/webrat/core/locators/field_named_locator.rb +41 -41
- data/lib/webrat/core/locators/form_locator.rb +19 -19
- data/lib/webrat/core/locators/label_locator.rb +34 -34
- data/lib/webrat/core/locators/link_locator.rb +74 -74
- data/lib/webrat/core/locators/locator.rb +20 -20
- data/lib/webrat/core/locators/select_option_locator.rb +59 -59
- data/lib/webrat/core/locators.rb +20 -20
- data/lib/webrat/core/logging.rb +23 -23
- data/lib/webrat/core/matchers/have_content.rb +68 -68
- data/lib/webrat/core/matchers/have_selector.rb +74 -74
- data/lib/webrat/core/matchers/have_tag.rb +21 -21
- data/lib/webrat/core/matchers/have_xpath.rb +122 -122
- data/lib/webrat/core/matchers.rb +4 -4
- data/lib/webrat/core/methods.rb +64 -64
- data/lib/webrat/core/mime.rb +18 -18
- data/lib/webrat/core/save_and_open_page.rb +48 -48
- data/lib/webrat/core/scope.rb +365 -365
- data/lib/webrat/core/session.rb +306 -306
- data/lib/webrat/core/xml.rb +72 -72
- data/lib/webrat/core.rb +13 -13
- data/lib/webrat/core_extensions/blank.rb +58 -58
- data/lib/webrat/core_extensions/deprecate.rb +8 -8
- data/lib/webrat/core_extensions/detect_mapped.rb +12 -12
- data/lib/webrat/core_extensions/meta_class.rb +6 -6
- data/lib/webrat/core_extensions/nil_to_param.rb +5 -5
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -27
- data/lib/webrat/integrations/merb.rb +10 -10
- data/lib/webrat/integrations/rails.rb +25 -25
- data/lib/webrat/integrations/rspec-rails.rb +10 -10
- data/lib/webrat/integrations/selenium.rb +11 -11
- data/lib/webrat/merb.rb +9 -9
- data/lib/webrat/rspec-rails.rb +2 -2
- data/lib/webrat/selenium/application_server_factory.rb +40 -40
- data/lib/webrat/selenium/application_servers/external.rb +26 -26
- data/lib/webrat/selenium/application_servers/merb.rb +50 -50
- data/lib/webrat/selenium/application_servers/rails.rb +3 -6
- data/lib/webrat/selenium/application_servers/sinatra.rb +37 -37
- data/lib/webrat/selenium/application_servers.rb +5 -5
- data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -19
- data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -42
- data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -6
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -32
- data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -15
- data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -5
- data/lib/webrat/selenium/matchers/have_content.rb +66 -66
- data/lib/webrat/selenium/matchers/have_selector.rb +49 -49
- data/lib/webrat/selenium/matchers/have_tag.rb +72 -72
- data/lib/webrat/selenium/matchers/have_xpath.rb +45 -45
- data/lib/webrat/selenium/matchers.rb +4 -4
- data/lib/webrat/selenium/selenium_extensions.js +5 -5
- data/lib/webrat/selenium/selenium_rc_server.rb +86 -86
- data/lib/webrat/selenium/selenium_session.rb +267 -272
- data/lib/webrat/selenium/silence_stream.rb +18 -18
- data/lib/webrat/selenium.rb +70 -70
- data/lib/webrat.rb +18 -18
- data/spec/fakes/test_adapter.rb +37 -37
- data/spec/integration/mechanize/Rakefile +6 -6
- data/spec/integration/mechanize/config.ru +1 -1
- data/spec/integration/mechanize/sample_app.rb +20 -20
- data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -22
- data/spec/integration/mechanize/spec/spec_helper.rb +27 -27
- data/spec/integration/merb/.gitignore +20 -20
- data/spec/integration/merb/Rakefile +35 -35
- data/spec/integration/merb/app/controllers/application.rb +2 -2
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -13
- data/spec/integration/merb/app/controllers/testing.rb +27 -27
- data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -63
- data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -47
- data/spec/integration/merb/app/views/layout/application.html.erb +11 -11
- data/spec/integration/merb/app/views/testing/show_form.html.erb +26 -26
- data/spec/integration/merb/app/views/testing/upload.html.erb +8 -8
- data/spec/integration/merb/config/environments/development.rb +15 -15
- data/spec/integration/merb/config/environments/rake.rb +11 -11
- data/spec/integration/merb/config/environments/test.rb +14 -14
- data/spec/integration/merb/config/init.rb +25 -25
- data/spec/integration/merb/config/rack.rb +11 -11
- data/spec/integration/merb/config/router.rb +34 -34
- data/spec/integration/merb/spec/spec.opts +1 -1
- data/spec/integration/merb/spec/spec_helper.rb +26 -26
- data/spec/integration/merb/spec/webrat_spec.rb +39 -39
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -31
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -64
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -124
- data/spec/integration/merb/tasks/merb.thor/main.thor +149 -149
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -93
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -40
- data/spec/integration/rack/Rakefile +5 -5
- data/spec/integration/rack/app.rb +89 -89
- data/spec/integration/rack/test/helper.rb +21 -21
- data/spec/integration/rack/test/webrat_rack_test.rb +73 -73
- data/spec/integration/rails/.gitignore +3 -3
- data/spec/integration/rails/Rakefile +30 -30
- data/spec/integration/rails/app/controllers/application.rb +15 -15
- data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -7
- data/spec/integration/rails/app/controllers/fields_controller.rb +4 -4
- data/spec/integration/rails/app/controllers/links_controller.rb +7 -7
- data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -46
- data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -2
- data/spec/integration/rails/app/helpers/fields_helper.rb +2 -2
- data/spec/integration/rails/app/helpers/links_helper.rb +2 -2
- data/spec/integration/rails/app/views/buttons/show.html.erb +10 -10
- data/spec/integration/rails/app/views/fields/show.html.erb +8 -8
- data/spec/integration/rails/app/views/links/show.html.erb +5 -5
- data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +3 -3
- data/spec/integration/rails/app/views/webrat/buttons.html.erb +10 -10
- data/spec/integration/rails/app/views/webrat/form.html.erb +27 -27
- data/spec/integration/rails/app/views/webrat/within.html.erb +2 -2
- data/spec/integration/rails/config/boot.rb +109 -109
- data/spec/integration/rails/config/environment.rb +12 -12
- data/spec/integration/rails/config/environments/development.rb +17 -17
- data/spec/integration/rails/config/environments/selenium.rb +22 -22
- data/spec/integration/rails/config/environments/test.rb +22 -22
- data/spec/integration/rails/config/initializers/inflections.rb +10 -10
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -5
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -17
- data/spec/integration/rails/config/locales/en.yml +4 -4
- data/spec/integration/rails/config/routes.rb +19 -19
- data/spec/integration/rails/public/404.html +29 -29
- data/spec/integration/rails/public/422.html +29 -29
- data/spec/integration/rails/public/500.html +33 -33
- data/spec/integration/rails/script/about +3 -3
- data/spec/integration/rails/script/console +3 -3
- data/spec/integration/rails/script/dbconsole +3 -3
- data/spec/integration/rails/script/destroy +3 -3
- data/spec/integration/rails/script/generate +3 -3
- data/spec/integration/rails/script/performance/benchmarker +3 -3
- data/spec/integration/rails/script/performance/profiler +3 -3
- data/spec/integration/rails/script/performance/request +3 -3
- data/spec/integration/rails/script/plugin +3 -3
- data/spec/integration/rails/script/process/inspector +3 -3
- data/spec/integration/rails/script/process/reaper +3 -3
- data/spec/integration/rails/script/process/spawner +3 -3
- data/spec/integration/rails/script/runner +3 -3
- data/spec/integration/rails/script/server +3 -3
- data/spec/integration/rails/test/integration/button_click_test.rb +80 -80
- data/spec/integration/rails/test/integration/fill_in_test.rb +24 -24
- data/spec/integration/rails/test/integration/link_click_test.rb +27 -27
- data/spec/integration/rails/test/integration/webrat_test.rb +122 -122
- data/spec/integration/rails/test/test_helper.rb +26 -26
- data/spec/integration/sinatra/Rakefile +5 -5
- data/spec/integration/sinatra/classic_app.rb +64 -64
- data/spec/integration/sinatra/modular_app.rb +16 -16
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -37
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -18
- data/spec/integration/sinatra/test/test_helper.rb +17 -17
- data/spec/private/core/configuration_spec.rb +87 -87
- data/spec/private/core/field_spec.rb +85 -85
- data/spec/private/core/link_spec.rb +24 -24
- data/spec/private/core/session_spec.rb +200 -200
- data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -73
- data/spec/private/nokogiri_spec.rb +77 -77
- data/spec/private/rails/attaches_file_spec.rb +81 -81
- data/spec/private/rails/rails_adapter_spec.rb +86 -86
- data/spec/private/selenium/application_servers/rails_spec.rb +26 -26
- data/spec/public/basic_auth_spec.rb +24 -24
- data/spec/public/check_spec.rb +191 -191
- data/spec/public/choose_spec.rb +118 -118
- data/spec/public/click_area_spec.rb +106 -106
- data/spec/public/click_button_spec.rb +494 -494
- data/spec/public/click_link_spec.rb +511 -511
- data/spec/public/fill_in_spec.rb +224 -224
- data/spec/public/locators/field_by_xpath_spec.rb +19 -19
- data/spec/public/locators/field_labeled_spec.rb +172 -172
- data/spec/public/locators/field_with_id_spec.rb +16 -16
- data/spec/public/matchers/contain_spec.rb +114 -114
- data/spec/public/matchers/have_selector_spec.rb +146 -146
- data/spec/public/matchers/have_tag_spec.rb +39 -39
- data/spec/public/matchers/have_xpath_spec.rb +136 -136
- data/spec/public/reload_spec.rb +10 -10
- data/spec/public/save_and_open_spec.rb +70 -70
- data/spec/public/select_date_spec.rb +112 -112
- data/spec/public/select_datetime_spec.rb +137 -137
- data/spec/public/select_spec.rb +455 -455
- data/spec/public/select_time_spec.rb +100 -100
- data/spec/public/selenium/application_server_factory_spec.rb +49 -49
- data/spec/public/selenium/application_servers/external_spec.rb +12 -12
- data/spec/public/selenium/selenium_session_spec.rb +37 -37
- data/spec/public/set_hidden_field_spec.rb +5 -5
- data/spec/public/submit_form_spec.rb +5 -5
- data/spec/public/visit_spec.rb +58 -58
- data/spec/public/within_spec.rb +177 -177
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +54 -54
- data/webrat.gemspec +360 -0
- metadata +6 -5
data/spec/public/select_spec.rb
CHANGED
@@ -1,455 +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 & 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 & 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 & jelly</option></select>
|
191
|
-
<input type="submit" />
|
192
|
-
</form>
|
193
|
-
</html>
|
194
|
-
HTML
|
195
|
-
|
196
|
-
lambda {
|
197
|
-
select /Peanut butter & 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 & 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 & 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 & jelly</option></select>
|
267
|
-
<input type="submit" />
|
268
|
-
</form>
|
269
|
-
</html>
|
270
|
-
HTML
|
271
|
-
|
272
|
-
lambda {
|
273
|
-
select "Peanut butter & 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 & sweater</option>
|
425
|
-
<option>pants & 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 & sweater</option>
|
443
|
-
<option selected="selected">pants & 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
|
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 & 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 & 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 & jelly</option></select>
|
191
|
+
<input type="submit" />
|
192
|
+
</form>
|
193
|
+
</html>
|
194
|
+
HTML
|
195
|
+
|
196
|
+
lambda {
|
197
|
+
select /Peanut butter & 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 & 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 & 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 & jelly</option></select>
|
267
|
+
<input type="submit" />
|
268
|
+
</form>
|
269
|
+
</html>
|
270
|
+
HTML
|
271
|
+
|
272
|
+
lambda {
|
273
|
+
select "Peanut butter & 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 & sweater</option>
|
425
|
+
<option>pants & 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 & sweater</option>
|
443
|
+
<option selected="selected">pants & 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
|