diabolo-webrat 0.4.3 → 0.4.4
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/History.txt +8 -0
- data/Rakefile +5 -1
- data/lib/webrat/core/locators/field_labeled_locator.rb +1 -1
- data/lib/webrat/core/locators/label_locator.rb +1 -1
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/lib/webrat/selenium/application_server.rb +71 -0
- data/lib/webrat/selenium/merb_application_server.rb +48 -0
- data/lib/webrat/selenium/rails_application_server.rb +42 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +80 -0
- data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
- data/spec/fakes/test_session.rb +34 -0
- data/spec/integration/merb/app/controllers/application.rb +2 -0
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/spec/integration/merb/app/controllers/testing.rb +18 -0
- data/spec/integration/merb/config/environments/development.rb +15 -0
- data/spec/integration/merb/config/environments/rake.rb +11 -0
- data/spec/integration/merb/config/environments/test.rb +14 -0
- data/spec/integration/merb/config/init.rb +25 -0
- data/spec/integration/merb/config/rack.rb +11 -0
- data/spec/integration/merb/config/router.rb +33 -0
- data/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/spec/integration/merb/spec/webrat_spec.rb +32 -0
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/spec/integration/rails/app/controllers/application.rb +15 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
- data/spec/integration/rails/config/boot.rb +109 -0
- data/spec/integration/rails/config/environment.rb +12 -0
- data/spec/integration/rails/config/environments/development.rb +17 -0
- data/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/spec/integration/rails/config/environments/test.rb +22 -0
- data/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/spec/integration/rails/config/routes.rb +14 -0
- data/spec/integration/rails/test/integration/webrat_test.rb +80 -0
- data/spec/integration/rails/test/test_helper.rb +25 -0
- data/spec/integration/sinatra/classic_app.rb +64 -0
- data/spec/integration/sinatra/modular_app.rb +16 -0
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/spec/private/core/configuration_spec.rb +104 -0
- data/spec/private/core/field_spec.rb +67 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/logging_spec.rb +10 -0
- data/spec/private/core/session_spec.rb +198 -0
- data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/spec/private/merb/merb_session_spec.rb +42 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_session_spec.rb +110 -0
- data/spec/public/basic_auth_spec.rb +24 -0
- data/spec/public/check_spec.rb +191 -0
- data/spec/public/choose_spec.rb +118 -0
- data/spec/public/click_area_spec.rb +106 -0
- data/spec/public/click_button_spec.rb +502 -0
- data/spec/public/click_link_spec.rb +541 -0
- data/spec/public/fill_in_spec.rb +209 -0
- data/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/spec/public/locators/field_labeled_spec.rb +172 -0
- data/spec/public/locators/field_with_id_spec.rb +16 -0
- data/spec/public/matchers/contain_spec.rb +114 -0
- data/spec/public/matchers/have_selector_spec.rb +135 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +123 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +51 -0
- data/spec/public/select_date_spec.rb +112 -0
- data/spec/public/select_datetime_spec.rb +137 -0
- data/spec/public/select_spec.rb +261 -0
- data/spec/public/select_time_spec.rb +100 -0
- data/spec/public/set_hidden_field_spec.rb +5 -0
- data/spec/public/submit_form_spec.rb +5 -0
- data/spec/public/visit_spec.rb +58 -0
- data/spec/public/within_spec.rb +177 -0
- data/spec/spec_helper.rb +50 -0
- metadata +90 -25
|
@@ -0,0 +1,261 @@
|
|
|
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 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
|
+
spec = lambda do
|
|
205
|
+
with_html <<-HTML
|
|
206
|
+
<html>
|
|
207
|
+
<form method="post" action="/login">
|
|
208
|
+
<select name="month"><option>Peanut butter & 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
|
+
|
|
217
|
+
if Webrat.on_java?
|
|
218
|
+
spec.call
|
|
219
|
+
else
|
|
220
|
+
pending("needs bug fix", &spec)
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it "should properly handle locating with HTML entities in select values" do
|
|
225
|
+
spec = lambda do
|
|
226
|
+
with_html <<-HTML
|
|
227
|
+
<html>
|
|
228
|
+
<form method="post" action="/login">
|
|
229
|
+
<select name="month"><option>Peanut butter & jelly</option></select>
|
|
230
|
+
<input type="submit" />
|
|
231
|
+
</form>
|
|
232
|
+
</html>
|
|
233
|
+
HTML
|
|
234
|
+
|
|
235
|
+
lambda {
|
|
236
|
+
select "Peanut butter & jelly"
|
|
237
|
+
}.should_not raise_error(Webrat::NotFoundError)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
if Webrat.on_java?
|
|
241
|
+
spec.call
|
|
242
|
+
else
|
|
243
|
+
pending("needs bug fix", &spec)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
it "should submit duplicates selected options as a single value" do
|
|
248
|
+
with_html <<-HTML
|
|
249
|
+
<html>
|
|
250
|
+
<form method="post" action="/login">
|
|
251
|
+
<select name="clothes"><option value="pants" selected="selected">pants</option><option value="pants" selected="selected">pants</option></select>
|
|
252
|
+
<input type="submit" />
|
|
253
|
+
</form>
|
|
254
|
+
</html>
|
|
255
|
+
HTML
|
|
256
|
+
|
|
257
|
+
webrat_session.should_receive(:post).with("/login", "clothes" => "pants")
|
|
258
|
+
click_button
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
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,58 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe "visit" do
|
|
4
|
+
before do
|
|
5
|
+
with_html <<-HTML
|
|
6
|
+
<html>
|
|
7
|
+
Hello world
|
|
8
|
+
</html>
|
|
9
|
+
HTML
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should use get" do
|
|
13
|
+
webrat_session.should_receive(:get).with("/", {})
|
|
14
|
+
visit("/")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should assert valid response" do
|
|
18
|
+
webrat_session.response_code = 501
|
|
19
|
+
lambda { visit("/") }.should raise_error(Webrat::PageLoadError)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
[200, 300, 400, 499].each do |status|
|
|
23
|
+
it "should consider the #{status} status code as success" do
|
|
24
|
+
webrat_session.stub!(:redirect? => false)
|
|
25
|
+
webrat_session.response_code = status
|
|
26
|
+
lambda { visit("/") }.should_not raise_error
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should require a visit before manipulating page" do
|
|
31
|
+
lambda { fill_in "foo", :with => "blah" }.should raise_error(Webrat::WebratError)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should not follow external redirects" do
|
|
35
|
+
webrat_session.should_receive(:internal_redirect?).and_return(false)
|
|
36
|
+
|
|
37
|
+
visit("/oldurl")
|
|
38
|
+
|
|
39
|
+
current_url.should == "/oldurl"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe "visit with referer" do
|
|
44
|
+
before do
|
|
45
|
+
webrat_session.instance_variable_set(:@current_url, "/old_url")
|
|
46
|
+
with_html <<-HTML
|
|
47
|
+
<html>
|
|
48
|
+
Hello world
|
|
49
|
+
</html>
|
|
50
|
+
HTML
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should use get with referer header" do
|
|
54
|
+
webrat_session.should_receive(:get).with("/", {}, {"HTTP_REFERER" => "/old_url"})
|
|
55
|
+
visit("/")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe "within" do
|
|
4
|
+
it "should work when nested" do
|
|
5
|
+
with_html <<-HTML
|
|
6
|
+
<html>
|
|
7
|
+
<div>
|
|
8
|
+
<a href="/page1">Link</a>
|
|
9
|
+
</div>
|
|
10
|
+
<div id="container">
|
|
11
|
+
<div><a href="/page2">Link</a></div>
|
|
12
|
+
</div>
|
|
13
|
+
</html>
|
|
14
|
+
HTML
|
|
15
|
+
|
|
16
|
+
webrat_session.should_receive(:get).with("/page2", {})
|
|
17
|
+
within "#container" do
|
|
18
|
+
within "div" do
|
|
19
|
+
click_link "Link"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should click links within a scope" do
|
|
25
|
+
with_html <<-HTML
|
|
26
|
+
<html>
|
|
27
|
+
<a href="/page1">Link</a>
|
|
28
|
+
<div id="container">
|
|
29
|
+
<a href="/page2">Link</a>
|
|
30
|
+
</div>
|
|
31
|
+
</html>
|
|
32
|
+
HTML
|
|
33
|
+
|
|
34
|
+
webrat_session.should_receive(:get).with("/page2", {})
|
|
35
|
+
within "#container" do
|
|
36
|
+
click_link "Link"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should submit forms within a scope" do
|
|
41
|
+
with_html <<-HTML
|
|
42
|
+
<html>
|
|
43
|
+
<form id="form1" action="/form1">
|
|
44
|
+
<label>Email: <input type="text" name="email" />
|
|
45
|
+
<input type="submit" value="Add" />
|
|
46
|
+
</form>
|
|
47
|
+
<form id="form2" action="/form2">
|
|
48
|
+
<label>Email: <input type="text" name="email" />
|
|
49
|
+
<input type="submit" value="Add" />
|
|
50
|
+
</form>
|
|
51
|
+
</html>
|
|
52
|
+
HTML
|
|
53
|
+
|
|
54
|
+
webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
|
|
55
|
+
within "#form2" do
|
|
56
|
+
fill_in "Email", :with => "test@example.com"
|
|
57
|
+
click_button
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should work when the scope is inside the form" do
|
|
62
|
+
with_html <<-HTML
|
|
63
|
+
<html>
|
|
64
|
+
<form id="form2" action="/form2">
|
|
65
|
+
<div class="important">
|
|
66
|
+
<label>Email: <input type="text" class="email2" name="email" /></label>
|
|
67
|
+
</div>
|
|
68
|
+
<input type="submit" value="Add" />
|
|
69
|
+
</form>
|
|
70
|
+
</html>
|
|
71
|
+
HTML
|
|
72
|
+
|
|
73
|
+
webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
|
|
74
|
+
within ".important" do
|
|
75
|
+
fill_in "Email", :with => "test@example.com"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
submit_form "form2"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should work when the form submission occurs inside a scope" do
|
|
82
|
+
with_html <<-HTML
|
|
83
|
+
<html>
|
|
84
|
+
<body>
|
|
85
|
+
<div>
|
|
86
|
+
<form id="form2" action="/form2">
|
|
87
|
+
<label for="email">Email</label><input id="email" type="text" class="email2" name="email" />
|
|
88
|
+
<input type="submit" value="Add" />
|
|
89
|
+
</form>
|
|
90
|
+
</div>
|
|
91
|
+
</body>
|
|
92
|
+
</html>
|
|
93
|
+
HTML
|
|
94
|
+
|
|
95
|
+
webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
|
|
96
|
+
within "form[@action='/form2']" do
|
|
97
|
+
fill_in "Email", :with => "test@example.com"
|
|
98
|
+
click_button "Add"
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should work when there are multiple forms with the same label text" do
|
|
103
|
+
with_html <<-HTML
|
|
104
|
+
<html>
|
|
105
|
+
<body>
|
|
106
|
+
<div>
|
|
107
|
+
<form id="form1" action="/form1">
|
|
108
|
+
<label for="email1">Email</label><input id="email1" type="text" class="email1" name="email1" />
|
|
109
|
+
<input type="submit" value="Add" />
|
|
110
|
+
</form>
|
|
111
|
+
<form id="form2" action="/form2">
|
|
112
|
+
<label for="email2">Email</label><input id="email2" type="text" class="email2" name="email2" />
|
|
113
|
+
<input type="submit" value="Add" />
|
|
114
|
+
</form>
|
|
115
|
+
</div>
|
|
116
|
+
</body>
|
|
117
|
+
</html>
|
|
118
|
+
HTML
|
|
119
|
+
|
|
120
|
+
webrat_session.should_receive(:get).with("/form2", "email2" => "test@example.com")
|
|
121
|
+
within "form[@action='/form2']" do
|
|
122
|
+
fill_in "Email", :with => "test@example.com"
|
|
123
|
+
click_button "Add"
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "should not find fields outside of the scope" do
|
|
128
|
+
with_html <<-HTML
|
|
129
|
+
<html>
|
|
130
|
+
<form id="form1" action="/form1">
|
|
131
|
+
<label for="email">Email</label><input id="email" type="text" name="email" />
|
|
132
|
+
<input type="submit" value="Add" />
|
|
133
|
+
</form>
|
|
134
|
+
<form id="form2" action="/form2">
|
|
135
|
+
<label for="email">Email</label><input id="email" type="text" name="email" />
|
|
136
|
+
<input type="submit" value="Add" />
|
|
137
|
+
</form>
|
|
138
|
+
</html>
|
|
139
|
+
HTML
|
|
140
|
+
|
|
141
|
+
webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
|
|
142
|
+
within "#form2" do
|
|
143
|
+
fill_in "Email", :with => "test@example.com"
|
|
144
|
+
click_button "Add"
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "should not find buttons outside of the scope" do
|
|
149
|
+
with_html <<-HTML
|
|
150
|
+
<html>
|
|
151
|
+
<form action="/form1">
|
|
152
|
+
<input type="submit" value="Add" />
|
|
153
|
+
</form>
|
|
154
|
+
<form id="form2" action="/form2">
|
|
155
|
+
</form>
|
|
156
|
+
</html>
|
|
157
|
+
HTML
|
|
158
|
+
|
|
159
|
+
within "#form2" do
|
|
160
|
+
lambda {
|
|
161
|
+
click_button
|
|
162
|
+
}.should raise_error(Webrat::NotFoundError)
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "should raise a Webrat::NotFounderror error when the scope doesn't exist" do
|
|
167
|
+
with_html <<-HTML
|
|
168
|
+
<html>
|
|
169
|
+
</html>
|
|
170
|
+
HTML
|
|
171
|
+
|
|
172
|
+
lambda {
|
|
173
|
+
within "#form2" do
|
|
174
|
+
end
|
|
175
|
+
}.should raise_error(Webrat::NotFoundError)
|
|
176
|
+
end
|
|
177
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "test/unit"
|
|
3
|
+
require "spec"
|
|
4
|
+
|
|
5
|
+
# gem install redgreen for colored test output
|
|
6
|
+
begin require "redgreen" unless ENV['TM_CURRENT_LINE']; rescue LoadError; end
|
|
7
|
+
|
|
8
|
+
webrat_path = File.expand_path(File.dirname(__FILE__) + "/../lib/")
|
|
9
|
+
$LOAD_PATH.unshift(webrat_path) unless $LOAD_PATH.include?(webrat_path)
|
|
10
|
+
|
|
11
|
+
require "webrat"
|
|
12
|
+
require File.expand_path(File.dirname(__FILE__) + "/fakes/test_session")
|
|
13
|
+
|
|
14
|
+
module Webrat
|
|
15
|
+
@@previous_config = nil
|
|
16
|
+
|
|
17
|
+
def self.cache_config_for_test
|
|
18
|
+
@@previous_config = Webrat.configuration.clone
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.reset_for_test
|
|
22
|
+
@@configuration = @@previous_config if @@previous_config
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Spec::Runner.configure do |config|
|
|
27
|
+
include Webrat::Methods
|
|
28
|
+
|
|
29
|
+
def with_html(html)
|
|
30
|
+
raise "This doesn't look like HTML. Wrap it in a <html> tag" unless html =~ /^\s*<[^Hh>]*html/i
|
|
31
|
+
webrat_session.response_body = html
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def with_xml(xml)
|
|
35
|
+
raise "This looks like HTML" if xml =~ /^\s*<[^Hh>]*html/i
|
|
36
|
+
webrat_session.response_body = xml
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
config.before :each do
|
|
40
|
+
Webrat.cache_config_for_test
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
config.after :each do
|
|
44
|
+
Webrat.reset_for_test
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
Webrat.configure do |config|
|
|
49
|
+
config.mode = :merb
|
|
50
|
+
end
|