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
@@ -1,511 +1,511 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
-
|
3
|
-
describe "click_link" do
|
4
|
-
it "should click links with ampertands" do
|
5
|
-
with_html <<-HTML
|
6
|
-
<html>
|
7
|
-
<a href="/page">Save & go back</a>
|
8
|
-
</html>
|
9
|
-
HTML
|
10
|
-
webrat_session.should_receive(:get).with("/page", {})
|
11
|
-
click_link "Save & go back"
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should use get by default" do
|
15
|
-
with_html <<-HTML
|
16
|
-
<html>
|
17
|
-
<a href="/page">Link text</a>
|
18
|
-
</html>
|
19
|
-
HTML
|
20
|
-
webrat_session.should_receive(:get).with("/page", {})
|
21
|
-
click_link "Link text"
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should click get links" do
|
25
|
-
with_html <<-HTML
|
26
|
-
<html>
|
27
|
-
<a href="/page">Link text</a>
|
28
|
-
</html>
|
29
|
-
HTML
|
30
|
-
webrat_session.should_receive(:get).with("/page", {})
|
31
|
-
click_link "Link text", :method => :get
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should click link on substring" do
|
35
|
-
with_html <<-HTML
|
36
|
-
<html>
|
37
|
-
<a href="/page">Link text</a>
|
38
|
-
</html>
|
39
|
-
HTML
|
40
|
-
webrat_session.should_receive(:get).with("/page", {})
|
41
|
-
click_link "ink tex", :method => :get
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should click delete links" do
|
45
|
-
with_html <<-HTML
|
46
|
-
<html>
|
47
|
-
<a href="/page">Link text</a>
|
48
|
-
</html>
|
49
|
-
HTML
|
50
|
-
webrat_session.should_receive(:delete).with("/page", {})
|
51
|
-
click_link "Link text", :method => :delete
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
it "should click post links" do
|
56
|
-
with_html <<-HTML
|
57
|
-
<html>
|
58
|
-
<a href="/page">Link text</a>
|
59
|
-
</html>
|
60
|
-
HTML
|
61
|
-
webrat_session.should_receive(:post).with("/page", {})
|
62
|
-
click_link "Link text", :method => :post
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should click put links" do
|
66
|
-
with_html <<-HTML
|
67
|
-
<html>
|
68
|
-
<a href="/page">Link text</a>
|
69
|
-
</html>
|
70
|
-
HTML
|
71
|
-
webrat_session.should_receive(:put).with("/page", {})
|
72
|
-
click_link "Link text", :method => :put
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should click links by regexp" do
|
76
|
-
with_html <<-HTML
|
77
|
-
<html>
|
78
|
-
<a href="/page">Link text</a>
|
79
|
-
</html>
|
80
|
-
HTML
|
81
|
-
webrat_session.should_receive(:get).with("/page", {})
|
82
|
-
click_link /link [a-z]/i
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should click links by id" do
|
86
|
-
with_html <<-HTML
|
87
|
-
<html>
|
88
|
-
<a id="link_text_link" href="/page">Link text</a>
|
89
|
-
</html>
|
90
|
-
HTML
|
91
|
-
webrat_session.should_receive(:get).with("/page", {})
|
92
|
-
click_link "link_text_link"
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should click links by id regexp" do
|
96
|
-
with_html <<-HTML
|
97
|
-
<html>
|
98
|
-
<a id="link_text_link" href="/page">Link text</a>
|
99
|
-
</html>
|
100
|
-
HTML
|
101
|
-
webrat_session.should_receive(:get).with("/page", {})
|
102
|
-
click_link /_text_/
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should click links by title" do
|
106
|
-
with_html <<-HTML
|
107
|
-
<html>
|
108
|
-
<a title="piddle" href="/page">Link text</a>
|
109
|
-
</html>
|
110
|
-
HTML
|
111
|
-
webrat_session.should_receive(:get).with("/page", {})
|
112
|
-
click_link 'piddle'
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should click links by title regex" do
|
116
|
-
with_html <<-HTML
|
117
|
-
<html>
|
118
|
-
<a title="piddlediddle" href="/page">Link text</a>
|
119
|
-
</html>
|
120
|
-
HTML
|
121
|
-
webrat_session.should_receive(:get).with("/page", {})
|
122
|
-
click_link /iddle/
|
123
|
-
end
|
124
|
-
|
125
|
-
|
126
|
-
it "should click rails javascript links with authenticity tokens" do
|
127
|
-
with_html <<-HTML
|
128
|
-
<html>
|
129
|
-
<a href="/posts" onclick="var f = document.createElement('form');
|
130
|
-
f.style.display = 'none';
|
131
|
-
this.parentNode.appendChild(f);
|
132
|
-
f.method = 'POST';
|
133
|
-
f.action = this.href;
|
134
|
-
var s = document.createElement('input');
|
135
|
-
s.setAttribute('type', 'hidden');
|
136
|
-
s.setAttribute('name', 'authenticity_token');
|
137
|
-
s.setAttribute('value', 'aa79cb354597a60a3786e7e291ed4f74d77d3a62');
|
138
|
-
f.appendChild(s);
|
139
|
-
f.submit();
|
140
|
-
return false;">Posts</a>
|
141
|
-
</html>
|
142
|
-
HTML
|
143
|
-
webrat_session.should_receive(:post).with("/posts", "authenticity_token" => "aa79cb354597a60a3786e7e291ed4f74d77d3a62")
|
144
|
-
click_link "Posts"
|
145
|
-
end
|
146
|
-
|
147
|
-
it "should click rails javascript delete links" do
|
148
|
-
with_html <<-HTML
|
149
|
-
<html>
|
150
|
-
<a href="/posts/1" onclick="var f = document.createElement('form');
|
151
|
-
f.style.display = 'none';
|
152
|
-
this.parentNode.appendChild(f);
|
153
|
-
f.method = 'POST';
|
154
|
-
f.action = this.href;
|
155
|
-
var m = document.createElement('input');
|
156
|
-
m.setAttribute('type', 'hidden');
|
157
|
-
m.setAttribute('name', '_method');
|
158
|
-
m.setAttribute('value', 'delete');
|
159
|
-
f.appendChild(m);
|
160
|
-
f.submit();
|
161
|
-
return false;">Delete</a>
|
162
|
-
</html>
|
163
|
-
HTML
|
164
|
-
webrat_session.should_receive(:delete).with("/posts/1", {})
|
165
|
-
click_link "Delete"
|
166
|
-
end
|
167
|
-
|
168
|
-
it "should click rails javascript post links" do
|
169
|
-
with_html <<-HTML
|
170
|
-
<html>
|
171
|
-
<a href="/posts" onclick="var f = document.createElement('form');
|
172
|
-
f.style.display = 'none';
|
173
|
-
this.parentNode.appendChild(f);
|
174
|
-
f.method = 'POST';
|
175
|
-
f.action = this.href;
|
176
|
-
f.submit();
|
177
|
-
return false;">Posts</a>
|
178
|
-
</html>
|
179
|
-
HTML
|
180
|
-
webrat_session.should_receive(:post).with("/posts", {})
|
181
|
-
click_link "Posts"
|
182
|
-
end
|
183
|
-
|
184
|
-
it "should click rails javascript post links without javascript" do
|
185
|
-
with_html <<-HTML
|
186
|
-
<html>
|
187
|
-
<a href="/posts" onclick="var f = document.createElement('form');
|
188
|
-
f.style.display = 'none';
|
189
|
-
this.parentNode.appendChild(f);
|
190
|
-
f.method = 'POST';
|
191
|
-
f.action = this.href;
|
192
|
-
f.submit();
|
193
|
-
return false;">Posts</a>
|
194
|
-
</html>
|
195
|
-
HTML
|
196
|
-
webrat_session.should_receive(:get).with("/posts", {})
|
197
|
-
click_link "Posts", :javascript => false
|
198
|
-
end
|
199
|
-
|
200
|
-
it "should click rails javascript post links" do
|
201
|
-
with_html <<-HTML
|
202
|
-
<html>
|
203
|
-
<a href="/posts" onclick="var f = document.createElement('form');
|
204
|
-
f.style.display = 'none';
|
205
|
-
this.parentNode.appendChild(f);
|
206
|
-
f.method = 'POST';
|
207
|
-
f.action = this.href;
|
208
|
-
var m = document.createElement('input');
|
209
|
-
m.setAttribute('type', 'hidden');
|
210
|
-
m.setAttribute('name', '_method');
|
211
|
-
m.setAttribute('value', 'post');
|
212
|
-
f.appendChild(m);
|
213
|
-
f.submit();
|
214
|
-
return false;">Post</a></h2>
|
215
|
-
</html>
|
216
|
-
HTML
|
217
|
-
webrat_session.should_receive(:post).with("/posts", {})
|
218
|
-
click_link "Post"
|
219
|
-
end
|
220
|
-
|
221
|
-
it "should click rails javascript put links" do
|
222
|
-
with_html <<-HTML
|
223
|
-
<html>
|
224
|
-
<a href="/posts" onclick="var f = document.createElement('form');
|
225
|
-
f.style.display = 'none';
|
226
|
-
this.parentNode.appendChild(f);
|
227
|
-
f.method = 'POST';
|
228
|
-
f.action = this.href;
|
229
|
-
var m = document.createElement('input');
|
230
|
-
m.setAttribute('type', 'hidden');
|
231
|
-
m.setAttribute('name', '_method');
|
232
|
-
m.setAttribute('value', 'put');
|
233
|
-
f.appendChild(m);
|
234
|
-
f.submit();
|
235
|
-
return false;">Put</a></h2>
|
236
|
-
</html>
|
237
|
-
HTML
|
238
|
-
webrat_session.should_receive(:put).with("/posts", {})
|
239
|
-
click_link "Put"
|
240
|
-
end
|
241
|
-
|
242
|
-
it "should fail if the javascript link doesn't have a value for the _method input" do
|
243
|
-
with_html <<-HTML
|
244
|
-
<html>
|
245
|
-
<a href="/posts/1" onclick="var f = document.createElement('form');
|
246
|
-
f.style.display = 'none';
|
247
|
-
this.parentNode.appendChild(f);
|
248
|
-
f.method = 'POST';
|
249
|
-
f.action = this.href;
|
250
|
-
var m = document.createElement('input');
|
251
|
-
m.setAttribute('type', 'hidden');
|
252
|
-
m.setAttribute('name', '_method');
|
253
|
-
f.appendChild(m);
|
254
|
-
f.submit();
|
255
|
-
return false;">Link</a>
|
256
|
-
</html>
|
257
|
-
HTML
|
258
|
-
|
259
|
-
lambda {
|
260
|
-
click_link "Link"
|
261
|
-
}.should raise_error(Webrat::WebratError)
|
262
|
-
end
|
263
|
-
|
264
|
-
it "should assert valid response" do
|
265
|
-
with_html <<-HTML
|
266
|
-
<html>
|
267
|
-
<a href="/page">Link text</a>
|
268
|
-
</html>
|
269
|
-
HTML
|
270
|
-
webrat_session.response_code = 501
|
271
|
-
lambda { click_link "Link text" }.should raise_error(Webrat::PageLoadError)
|
272
|
-
end
|
273
|
-
|
274
|
-
[200, 300, 400, 499].each do |status|
|
275
|
-
it "should consider the #{status} status code as success" do
|
276
|
-
with_html <<-HTML
|
277
|
-
<html>
|
278
|
-
<a href="/page">Link text</a>
|
279
|
-
</html>
|
280
|
-
HTML
|
281
|
-
webrat_session.stub!(:redirect? => false)
|
282
|
-
webrat_session.response_code = status
|
283
|
-
lambda { click_link "Link text" }.should_not raise_error
|
284
|
-
end
|
285
|
-
end
|
286
|
-
|
287
|
-
it "should fail is the link doesn't exist" do
|
288
|
-
with_html <<-HTML
|
289
|
-
<html>
|
290
|
-
<a href="/page">Link text</a>
|
291
|
-
</html>
|
292
|
-
HTML
|
293
|
-
|
294
|
-
lambda {
|
295
|
-
click_link "Missing link"
|
296
|
-
}.should raise_error(Webrat::NotFoundError)
|
297
|
-
end
|
298
|
-
|
299
|
-
it "should not be case sensitive" do
|
300
|
-
with_html <<-HTML
|
301
|
-
<html>
|
302
|
-
<a href="/page">Link text</a>
|
303
|
-
</html>
|
304
|
-
HTML
|
305
|
-
webrat_session.should_receive(:get).with("/page", {})
|
306
|
-
click_link "LINK TEXT"
|
307
|
-
end
|
308
|
-
|
309
|
-
it "should match link substrings" do
|
310
|
-
with_html <<-HTML
|
311
|
-
<html>
|
312
|
-
<a href="/page">This is some cool link text, isn't it?</a>
|
313
|
-
</html>
|
314
|
-
HTML
|
315
|
-
webrat_session.should_receive(:get).with("/page", {})
|
316
|
-
click_link "Link text"
|
317
|
-
end
|
318
|
-
|
319
|
-
it "should work with elements in the link" do
|
320
|
-
with_html <<-HTML
|
321
|
-
<html>
|
322
|
-
<a href="/page"><span>Link text</span></a>
|
323
|
-
</html>
|
324
|
-
HTML
|
325
|
-
webrat_session.should_receive(:get).with("/page", {})
|
326
|
-
click_link "Link text"
|
327
|
-
end
|
328
|
-
|
329
|
-
it "should match the first matching link" do
|
330
|
-
with_html <<-HTML
|
331
|
-
<html>
|
332
|
-
<a href="/page1">Link text</a>
|
333
|
-
<a href="/page2">Link text</a>
|
334
|
-
</html>
|
335
|
-
HTML
|
336
|
-
webrat_session.should_receive(:get).with("/page1", {})
|
337
|
-
click_link "Link text"
|
338
|
-
end
|
339
|
-
|
340
|
-
it "should choose the shortest link text match" do
|
341
|
-
with_html <<-HTML
|
342
|
-
<html>
|
343
|
-
<a href="/page1">Linkerama</a>
|
344
|
-
<a href="/page2">Link</a>
|
345
|
-
</html>
|
346
|
-
HTML
|
347
|
-
|
348
|
-
webrat_session.should_receive(:get).with("/page2", {})
|
349
|
-
click_link "Link"
|
350
|
-
end
|
351
|
-
|
352
|
-
it "should treat non-breaking spaces as spaces" do
|
353
|
-
with_html <<-HTML
|
354
|
-
<html>
|
355
|
-
<a href="/page1">This is a link</a>
|
356
|
-
</html>
|
357
|
-
HTML
|
358
|
-
|
359
|
-
webrat_session.should_receive(:get).with("/page1", {})
|
360
|
-
click_link "This is a link"
|
361
|
-
end
|
362
|
-
|
363
|
-
it "should not match on non-text contents" do
|
364
|
-
pending "needs fix" do
|
365
|
-
with_html <<-HTML
|
366
|
-
<html>
|
367
|
-
<a href="/page1"><span class="location">My house</span></a>
|
368
|
-
<a href="/page2">Location</a>
|
369
|
-
</html>
|
370
|
-
HTML
|
371
|
-
|
372
|
-
webrat_session.should_receive(:get).with("/page2", {})
|
373
|
-
click_link "Location"
|
374
|
-
end
|
375
|
-
end
|
376
|
-
|
377
|
-
it "should click link within a selector" do
|
378
|
-
with_html <<-HTML
|
379
|
-
<html>
|
380
|
-
<a href="/page1">Link</a>
|
381
|
-
<div id="container">
|
382
|
-
<a href="/page2">Link</a>
|
383
|
-
</div>
|
384
|
-
</html>
|
385
|
-
HTML
|
386
|
-
|
387
|
-
webrat_session.should_receive(:get).with("/page2", {})
|
388
|
-
click_link_within "#container", "Link"
|
389
|
-
end
|
390
|
-
|
391
|
-
it "should not make request when link is local anchor" do
|
392
|
-
with_html <<-HTML
|
393
|
-
<html>
|
394
|
-
<a href="#section-1">Jump to Section 1</a>
|
395
|
-
</html>
|
396
|
-
HTML
|
397
|
-
# Don't know why webrat_session.should_receive(:get).never doesn't work here
|
398
|
-
webrat_session.should_receive(:send).with('get_via_redirect', '#section-1', {}).never
|
399
|
-
click_link "Jump to Section 1"
|
400
|
-
end
|
401
|
-
|
402
|
-
it "should follow relative links" do
|
403
|
-
webrat_session.stub!(:current_url => "/page")
|
404
|
-
with_html <<-HTML
|
405
|
-
<html>
|
406
|
-
<a href="sub">Jump to sub page</a>
|
407
|
-
</html>
|
408
|
-
HTML
|
409
|
-
webrat_session.should_receive(:get).with("/page/sub", {})
|
410
|
-
click_link "Jump to sub page"
|
411
|
-
end
|
412
|
-
|
413
|
-
it "should follow fully qualified local links" do
|
414
|
-
webrat_session.stub!(:current_url => "/page")
|
415
|
-
with_html <<-HTML
|
416
|
-
<html>
|
417
|
-
<a href="http://subdomain.example.com/page/sub">Jump to sub page</a>
|
418
|
-
</html>
|
419
|
-
HTML
|
420
|
-
webrat_session.should_receive(:get).with("http://subdomain.example.com/page/sub", {})
|
421
|
-
click_link "Jump to sub page"
|
422
|
-
end
|
423
|
-
|
424
|
-
it "should follow fully qualified local links to example.com" do
|
425
|
-
with_html <<-HTML
|
426
|
-
<html>
|
427
|
-
<a href="http://www.example.com/page/sub">Jump to sub page</a>
|
428
|
-
</html>
|
429
|
-
HTML
|
430
|
-
webrat_session.should_receive(:get).with("http://www.example.com/page/sub", {})
|
431
|
-
click_link "Jump to sub page"
|
432
|
-
end
|
433
|
-
|
434
|
-
it "should follow query parameters" do
|
435
|
-
webrat_session.stub!(:current_url => "/page")
|
436
|
-
with_html <<-HTML
|
437
|
-
<html>
|
438
|
-
<a href="?foo=bar">Jump to foo bar</a>
|
439
|
-
</html>
|
440
|
-
HTML
|
441
|
-
webrat_session.should_receive(:get).with("/page?foo=bar", {})
|
442
|
-
click_link "Jump to foo bar"
|
443
|
-
end
|
444
|
-
|
445
|
-
it "should matches_text? on regexp" do
|
446
|
-
pending "need to update these"
|
447
|
-
link = Webrat::Link.new(webrat_session, nil)
|
448
|
-
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
449
|
-
link.matches_text?(/link/i).should == 0
|
450
|
-
end
|
451
|
-
|
452
|
-
it "should matches_text? on link_text" do
|
453
|
-
pending "need to update these"
|
454
|
-
link = Webrat::Link.new(webrat_session, nil)
|
455
|
-
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
456
|
-
link.matches_text?("Link Text").should == 0
|
457
|
-
end
|
458
|
-
|
459
|
-
it "should matches_text? on substring" do
|
460
|
-
pending "need to update these"
|
461
|
-
link = Webrat::Link.new(webrat_session, nil)
|
462
|
-
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
463
|
-
link.matches_text?("nk Te").should_not be_nil
|
464
|
-
end
|
465
|
-
|
466
|
-
it "should not matches_text? on link_text case insensitive" do
|
467
|
-
pending "need to update these"
|
468
|
-
link = Webrat::Link.new(webrat_session, nil)
|
469
|
-
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
470
|
-
link.should_receive(:inner_html).and_return('Link Text')
|
471
|
-
link.should_receive(:title).and_return(nil)
|
472
|
-
link.matches_text?("link_text").should == false
|
473
|
-
end
|
474
|
-
|
475
|
-
it "should match text not include " do
|
476
|
-
pending "need to update these"
|
477
|
-
link = Webrat::Link.new(webrat_session, nil)
|
478
|
-
link.should_receive(:text).and_return('LinkText')
|
479
|
-
link.matches_text?("LinkText").should == 0
|
480
|
-
end
|
481
|
-
|
482
|
-
it "should not matches_text? on wrong text" do
|
483
|
-
pending "need to update these"
|
484
|
-
link = Webrat::Link.new(webrat_session, nil)
|
485
|
-
nbsp = [0xA0].pack("U")
|
486
|
-
link.should_receive(:text).and_return("Some"+nbsp+"Other"+nbsp+"Link")
|
487
|
-
link.should_receive(:inner_html).and_return("Some Other Link")
|
488
|
-
link.should_receive(:title).and_return(nil)
|
489
|
-
link.matches_text?("Link Text").should == false
|
490
|
-
end
|
491
|
-
|
492
|
-
it "should match text including character reference" do
|
493
|
-
pending "need to update these"
|
494
|
-
no_ko_gi_ri = [0x30CE,0x30B3,0x30AE,0x30EA]
|
495
|
-
nokogiri_ja_kana = no_ko_gi_ri.pack("U*")
|
496
|
-
nokogiri_char_ref = no_ko_gi_ri.map{|c| "&#x%X;" % c }.join("")
|
497
|
-
|
498
|
-
link = Webrat::Link.new(webrat_session, nil)
|
499
|
-
link.should_receive(:text).and_return(nokogiri_ja_kana)
|
500
|
-
link.matches_text?(nokogiri_ja_kana).should == 0
|
501
|
-
end
|
502
|
-
|
503
|
-
it "should match img link" do
|
504
|
-
pending "need to update these"
|
505
|
-
link = Webrat::Link.new(webrat_session, nil)
|
506
|
-
link.should_receive(:text).and_return('')
|
507
|
-
link.should_receive(:inner_html).and_return('<img src="logo.png" />')
|
508
|
-
link.matches_text?('logo.png').should == 10
|
509
|
-
end
|
510
|
-
|
511
|
-
end
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe "click_link" do
|
4
|
+
it "should click links with ampertands" do
|
5
|
+
with_html <<-HTML
|
6
|
+
<html>
|
7
|
+
<a href="/page">Save & go back</a>
|
8
|
+
</html>
|
9
|
+
HTML
|
10
|
+
webrat_session.should_receive(:get).with("/page", {})
|
11
|
+
click_link "Save & go back"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should use get by default" do
|
15
|
+
with_html <<-HTML
|
16
|
+
<html>
|
17
|
+
<a href="/page">Link text</a>
|
18
|
+
</html>
|
19
|
+
HTML
|
20
|
+
webrat_session.should_receive(:get).with("/page", {})
|
21
|
+
click_link "Link text"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should click get links" do
|
25
|
+
with_html <<-HTML
|
26
|
+
<html>
|
27
|
+
<a href="/page">Link text</a>
|
28
|
+
</html>
|
29
|
+
HTML
|
30
|
+
webrat_session.should_receive(:get).with("/page", {})
|
31
|
+
click_link "Link text", :method => :get
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should click link on substring" do
|
35
|
+
with_html <<-HTML
|
36
|
+
<html>
|
37
|
+
<a href="/page">Link text</a>
|
38
|
+
</html>
|
39
|
+
HTML
|
40
|
+
webrat_session.should_receive(:get).with("/page", {})
|
41
|
+
click_link "ink tex", :method => :get
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should click delete links" do
|
45
|
+
with_html <<-HTML
|
46
|
+
<html>
|
47
|
+
<a href="/page">Link text</a>
|
48
|
+
</html>
|
49
|
+
HTML
|
50
|
+
webrat_session.should_receive(:delete).with("/page", {})
|
51
|
+
click_link "Link text", :method => :delete
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
it "should click post links" do
|
56
|
+
with_html <<-HTML
|
57
|
+
<html>
|
58
|
+
<a href="/page">Link text</a>
|
59
|
+
</html>
|
60
|
+
HTML
|
61
|
+
webrat_session.should_receive(:post).with("/page", {})
|
62
|
+
click_link "Link text", :method => :post
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should click put links" do
|
66
|
+
with_html <<-HTML
|
67
|
+
<html>
|
68
|
+
<a href="/page">Link text</a>
|
69
|
+
</html>
|
70
|
+
HTML
|
71
|
+
webrat_session.should_receive(:put).with("/page", {})
|
72
|
+
click_link "Link text", :method => :put
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should click links by regexp" do
|
76
|
+
with_html <<-HTML
|
77
|
+
<html>
|
78
|
+
<a href="/page">Link text</a>
|
79
|
+
</html>
|
80
|
+
HTML
|
81
|
+
webrat_session.should_receive(:get).with("/page", {})
|
82
|
+
click_link /link [a-z]/i
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should click links by id" do
|
86
|
+
with_html <<-HTML
|
87
|
+
<html>
|
88
|
+
<a id="link_text_link" href="/page">Link text</a>
|
89
|
+
</html>
|
90
|
+
HTML
|
91
|
+
webrat_session.should_receive(:get).with("/page", {})
|
92
|
+
click_link "link_text_link"
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should click links by id regexp" do
|
96
|
+
with_html <<-HTML
|
97
|
+
<html>
|
98
|
+
<a id="link_text_link" href="/page">Link text</a>
|
99
|
+
</html>
|
100
|
+
HTML
|
101
|
+
webrat_session.should_receive(:get).with("/page", {})
|
102
|
+
click_link /_text_/
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should click links by title" do
|
106
|
+
with_html <<-HTML
|
107
|
+
<html>
|
108
|
+
<a title="piddle" href="/page">Link text</a>
|
109
|
+
</html>
|
110
|
+
HTML
|
111
|
+
webrat_session.should_receive(:get).with("/page", {})
|
112
|
+
click_link 'piddle'
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should click links by title regex" do
|
116
|
+
with_html <<-HTML
|
117
|
+
<html>
|
118
|
+
<a title="piddlediddle" href="/page">Link text</a>
|
119
|
+
</html>
|
120
|
+
HTML
|
121
|
+
webrat_session.should_receive(:get).with("/page", {})
|
122
|
+
click_link /iddle/
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
it "should click rails javascript links with authenticity tokens" do
|
127
|
+
with_html <<-HTML
|
128
|
+
<html>
|
129
|
+
<a href="/posts" onclick="var f = document.createElement('form');
|
130
|
+
f.style.display = 'none';
|
131
|
+
this.parentNode.appendChild(f);
|
132
|
+
f.method = 'POST';
|
133
|
+
f.action = this.href;
|
134
|
+
var s = document.createElement('input');
|
135
|
+
s.setAttribute('type', 'hidden');
|
136
|
+
s.setAttribute('name', 'authenticity_token');
|
137
|
+
s.setAttribute('value', 'aa79cb354597a60a3786e7e291ed4f74d77d3a62');
|
138
|
+
f.appendChild(s);
|
139
|
+
f.submit();
|
140
|
+
return false;">Posts</a>
|
141
|
+
</html>
|
142
|
+
HTML
|
143
|
+
webrat_session.should_receive(:post).with("/posts", "authenticity_token" => "aa79cb354597a60a3786e7e291ed4f74d77d3a62")
|
144
|
+
click_link "Posts"
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should click rails javascript delete links" do
|
148
|
+
with_html <<-HTML
|
149
|
+
<html>
|
150
|
+
<a href="/posts/1" onclick="var f = document.createElement('form');
|
151
|
+
f.style.display = 'none';
|
152
|
+
this.parentNode.appendChild(f);
|
153
|
+
f.method = 'POST';
|
154
|
+
f.action = this.href;
|
155
|
+
var m = document.createElement('input');
|
156
|
+
m.setAttribute('type', 'hidden');
|
157
|
+
m.setAttribute('name', '_method');
|
158
|
+
m.setAttribute('value', 'delete');
|
159
|
+
f.appendChild(m);
|
160
|
+
f.submit();
|
161
|
+
return false;">Delete</a>
|
162
|
+
</html>
|
163
|
+
HTML
|
164
|
+
webrat_session.should_receive(:delete).with("/posts/1", {})
|
165
|
+
click_link "Delete"
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should click rails javascript post links" do
|
169
|
+
with_html <<-HTML
|
170
|
+
<html>
|
171
|
+
<a href="/posts" onclick="var f = document.createElement('form');
|
172
|
+
f.style.display = 'none';
|
173
|
+
this.parentNode.appendChild(f);
|
174
|
+
f.method = 'POST';
|
175
|
+
f.action = this.href;
|
176
|
+
f.submit();
|
177
|
+
return false;">Posts</a>
|
178
|
+
</html>
|
179
|
+
HTML
|
180
|
+
webrat_session.should_receive(:post).with("/posts", {})
|
181
|
+
click_link "Posts"
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should click rails javascript post links without javascript" do
|
185
|
+
with_html <<-HTML
|
186
|
+
<html>
|
187
|
+
<a href="/posts" onclick="var f = document.createElement('form');
|
188
|
+
f.style.display = 'none';
|
189
|
+
this.parentNode.appendChild(f);
|
190
|
+
f.method = 'POST';
|
191
|
+
f.action = this.href;
|
192
|
+
f.submit();
|
193
|
+
return false;">Posts</a>
|
194
|
+
</html>
|
195
|
+
HTML
|
196
|
+
webrat_session.should_receive(:get).with("/posts", {})
|
197
|
+
click_link "Posts", :javascript => false
|
198
|
+
end
|
199
|
+
|
200
|
+
it "should click rails javascript post links" do
|
201
|
+
with_html <<-HTML
|
202
|
+
<html>
|
203
|
+
<a href="/posts" onclick="var f = document.createElement('form');
|
204
|
+
f.style.display = 'none';
|
205
|
+
this.parentNode.appendChild(f);
|
206
|
+
f.method = 'POST';
|
207
|
+
f.action = this.href;
|
208
|
+
var m = document.createElement('input');
|
209
|
+
m.setAttribute('type', 'hidden');
|
210
|
+
m.setAttribute('name', '_method');
|
211
|
+
m.setAttribute('value', 'post');
|
212
|
+
f.appendChild(m);
|
213
|
+
f.submit();
|
214
|
+
return false;">Post</a></h2>
|
215
|
+
</html>
|
216
|
+
HTML
|
217
|
+
webrat_session.should_receive(:post).with("/posts", {})
|
218
|
+
click_link "Post"
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should click rails javascript put links" do
|
222
|
+
with_html <<-HTML
|
223
|
+
<html>
|
224
|
+
<a href="/posts" onclick="var f = document.createElement('form');
|
225
|
+
f.style.display = 'none';
|
226
|
+
this.parentNode.appendChild(f);
|
227
|
+
f.method = 'POST';
|
228
|
+
f.action = this.href;
|
229
|
+
var m = document.createElement('input');
|
230
|
+
m.setAttribute('type', 'hidden');
|
231
|
+
m.setAttribute('name', '_method');
|
232
|
+
m.setAttribute('value', 'put');
|
233
|
+
f.appendChild(m);
|
234
|
+
f.submit();
|
235
|
+
return false;">Put</a></h2>
|
236
|
+
</html>
|
237
|
+
HTML
|
238
|
+
webrat_session.should_receive(:put).with("/posts", {})
|
239
|
+
click_link "Put"
|
240
|
+
end
|
241
|
+
|
242
|
+
it "should fail if the javascript link doesn't have a value for the _method input" do
|
243
|
+
with_html <<-HTML
|
244
|
+
<html>
|
245
|
+
<a href="/posts/1" onclick="var f = document.createElement('form');
|
246
|
+
f.style.display = 'none';
|
247
|
+
this.parentNode.appendChild(f);
|
248
|
+
f.method = 'POST';
|
249
|
+
f.action = this.href;
|
250
|
+
var m = document.createElement('input');
|
251
|
+
m.setAttribute('type', 'hidden');
|
252
|
+
m.setAttribute('name', '_method');
|
253
|
+
f.appendChild(m);
|
254
|
+
f.submit();
|
255
|
+
return false;">Link</a>
|
256
|
+
</html>
|
257
|
+
HTML
|
258
|
+
|
259
|
+
lambda {
|
260
|
+
click_link "Link"
|
261
|
+
}.should raise_error(Webrat::WebratError)
|
262
|
+
end
|
263
|
+
|
264
|
+
it "should assert valid response" do
|
265
|
+
with_html <<-HTML
|
266
|
+
<html>
|
267
|
+
<a href="/page">Link text</a>
|
268
|
+
</html>
|
269
|
+
HTML
|
270
|
+
webrat_session.response_code = 501
|
271
|
+
lambda { click_link "Link text" }.should raise_error(Webrat::PageLoadError)
|
272
|
+
end
|
273
|
+
|
274
|
+
[200, 300, 400, 499].each do |status|
|
275
|
+
it "should consider the #{status} status code as success" do
|
276
|
+
with_html <<-HTML
|
277
|
+
<html>
|
278
|
+
<a href="/page">Link text</a>
|
279
|
+
</html>
|
280
|
+
HTML
|
281
|
+
webrat_session.stub!(:redirect? => false)
|
282
|
+
webrat_session.response_code = status
|
283
|
+
lambda { click_link "Link text" }.should_not raise_error
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should fail is the link doesn't exist" do
|
288
|
+
with_html <<-HTML
|
289
|
+
<html>
|
290
|
+
<a href="/page">Link text</a>
|
291
|
+
</html>
|
292
|
+
HTML
|
293
|
+
|
294
|
+
lambda {
|
295
|
+
click_link "Missing link"
|
296
|
+
}.should raise_error(Webrat::NotFoundError)
|
297
|
+
end
|
298
|
+
|
299
|
+
it "should not be case sensitive" do
|
300
|
+
with_html <<-HTML
|
301
|
+
<html>
|
302
|
+
<a href="/page">Link text</a>
|
303
|
+
</html>
|
304
|
+
HTML
|
305
|
+
webrat_session.should_receive(:get).with("/page", {})
|
306
|
+
click_link "LINK TEXT"
|
307
|
+
end
|
308
|
+
|
309
|
+
it "should match link substrings" do
|
310
|
+
with_html <<-HTML
|
311
|
+
<html>
|
312
|
+
<a href="/page">This is some cool link text, isn't it?</a>
|
313
|
+
</html>
|
314
|
+
HTML
|
315
|
+
webrat_session.should_receive(:get).with("/page", {})
|
316
|
+
click_link "Link text"
|
317
|
+
end
|
318
|
+
|
319
|
+
it "should work with elements in the link" do
|
320
|
+
with_html <<-HTML
|
321
|
+
<html>
|
322
|
+
<a href="/page"><span>Link text</span></a>
|
323
|
+
</html>
|
324
|
+
HTML
|
325
|
+
webrat_session.should_receive(:get).with("/page", {})
|
326
|
+
click_link "Link text"
|
327
|
+
end
|
328
|
+
|
329
|
+
it "should match the first matching link" do
|
330
|
+
with_html <<-HTML
|
331
|
+
<html>
|
332
|
+
<a href="/page1">Link text</a>
|
333
|
+
<a href="/page2">Link text</a>
|
334
|
+
</html>
|
335
|
+
HTML
|
336
|
+
webrat_session.should_receive(:get).with("/page1", {})
|
337
|
+
click_link "Link text"
|
338
|
+
end
|
339
|
+
|
340
|
+
it "should choose the shortest link text match" do
|
341
|
+
with_html <<-HTML
|
342
|
+
<html>
|
343
|
+
<a href="/page1">Linkerama</a>
|
344
|
+
<a href="/page2">Link</a>
|
345
|
+
</html>
|
346
|
+
HTML
|
347
|
+
|
348
|
+
webrat_session.should_receive(:get).with("/page2", {})
|
349
|
+
click_link "Link"
|
350
|
+
end
|
351
|
+
|
352
|
+
it "should treat non-breaking spaces as spaces" do
|
353
|
+
with_html <<-HTML
|
354
|
+
<html>
|
355
|
+
<a href="/page1">This is a link</a>
|
356
|
+
</html>
|
357
|
+
HTML
|
358
|
+
|
359
|
+
webrat_session.should_receive(:get).with("/page1", {})
|
360
|
+
click_link "This is a link"
|
361
|
+
end
|
362
|
+
|
363
|
+
it "should not match on non-text contents" do
|
364
|
+
pending "needs fix" do
|
365
|
+
with_html <<-HTML
|
366
|
+
<html>
|
367
|
+
<a href="/page1"><span class="location">My house</span></a>
|
368
|
+
<a href="/page2">Location</a>
|
369
|
+
</html>
|
370
|
+
HTML
|
371
|
+
|
372
|
+
webrat_session.should_receive(:get).with("/page2", {})
|
373
|
+
click_link "Location"
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
it "should click link within a selector" do
|
378
|
+
with_html <<-HTML
|
379
|
+
<html>
|
380
|
+
<a href="/page1">Link</a>
|
381
|
+
<div id="container">
|
382
|
+
<a href="/page2">Link</a>
|
383
|
+
</div>
|
384
|
+
</html>
|
385
|
+
HTML
|
386
|
+
|
387
|
+
webrat_session.should_receive(:get).with("/page2", {})
|
388
|
+
click_link_within "#container", "Link"
|
389
|
+
end
|
390
|
+
|
391
|
+
it "should not make request when link is local anchor" do
|
392
|
+
with_html <<-HTML
|
393
|
+
<html>
|
394
|
+
<a href="#section-1">Jump to Section 1</a>
|
395
|
+
</html>
|
396
|
+
HTML
|
397
|
+
# Don't know why webrat_session.should_receive(:get).never doesn't work here
|
398
|
+
webrat_session.should_receive(:send).with('get_via_redirect', '#section-1', {}).never
|
399
|
+
click_link "Jump to Section 1"
|
400
|
+
end
|
401
|
+
|
402
|
+
it "should follow relative links" do
|
403
|
+
webrat_session.stub!(:current_url => "/page")
|
404
|
+
with_html <<-HTML
|
405
|
+
<html>
|
406
|
+
<a href="sub">Jump to sub page</a>
|
407
|
+
</html>
|
408
|
+
HTML
|
409
|
+
webrat_session.should_receive(:get).with("/page/sub", {})
|
410
|
+
click_link "Jump to sub page"
|
411
|
+
end
|
412
|
+
|
413
|
+
it "should follow fully qualified local links" do
|
414
|
+
webrat_session.stub!(:current_url => "/page")
|
415
|
+
with_html <<-HTML
|
416
|
+
<html>
|
417
|
+
<a href="http://subdomain.example.com/page/sub">Jump to sub page</a>
|
418
|
+
</html>
|
419
|
+
HTML
|
420
|
+
webrat_session.should_receive(:get).with("http://subdomain.example.com/page/sub", {})
|
421
|
+
click_link "Jump to sub page"
|
422
|
+
end
|
423
|
+
|
424
|
+
it "should follow fully qualified local links to example.com" do
|
425
|
+
with_html <<-HTML
|
426
|
+
<html>
|
427
|
+
<a href="http://www.example.com/page/sub">Jump to sub page</a>
|
428
|
+
</html>
|
429
|
+
HTML
|
430
|
+
webrat_session.should_receive(:get).with("http://www.example.com/page/sub", {})
|
431
|
+
click_link "Jump to sub page"
|
432
|
+
end
|
433
|
+
|
434
|
+
it "should follow query parameters" do
|
435
|
+
webrat_session.stub!(:current_url => "/page")
|
436
|
+
with_html <<-HTML
|
437
|
+
<html>
|
438
|
+
<a href="?foo=bar">Jump to foo bar</a>
|
439
|
+
</html>
|
440
|
+
HTML
|
441
|
+
webrat_session.should_receive(:get).with("/page?foo=bar", {})
|
442
|
+
click_link "Jump to foo bar"
|
443
|
+
end
|
444
|
+
|
445
|
+
it "should matches_text? on regexp" do
|
446
|
+
pending "need to update these"
|
447
|
+
link = Webrat::Link.new(webrat_session, nil)
|
448
|
+
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
449
|
+
link.matches_text?(/link/i).should == 0
|
450
|
+
end
|
451
|
+
|
452
|
+
it "should matches_text? on link_text" do
|
453
|
+
pending "need to update these"
|
454
|
+
link = Webrat::Link.new(webrat_session, nil)
|
455
|
+
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
456
|
+
link.matches_text?("Link Text").should == 0
|
457
|
+
end
|
458
|
+
|
459
|
+
it "should matches_text? on substring" do
|
460
|
+
pending "need to update these"
|
461
|
+
link = Webrat::Link.new(webrat_session, nil)
|
462
|
+
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
463
|
+
link.matches_text?("nk Te").should_not be_nil
|
464
|
+
end
|
465
|
+
|
466
|
+
it "should not matches_text? on link_text case insensitive" do
|
467
|
+
pending "need to update these"
|
468
|
+
link = Webrat::Link.new(webrat_session, nil)
|
469
|
+
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
470
|
+
link.should_receive(:inner_html).and_return('Link Text')
|
471
|
+
link.should_receive(:title).and_return(nil)
|
472
|
+
link.matches_text?("link_text").should == false
|
473
|
+
end
|
474
|
+
|
475
|
+
it "should match text not include " do
|
476
|
+
pending "need to update these"
|
477
|
+
link = Webrat::Link.new(webrat_session, nil)
|
478
|
+
link.should_receive(:text).and_return('LinkText')
|
479
|
+
link.matches_text?("LinkText").should == 0
|
480
|
+
end
|
481
|
+
|
482
|
+
it "should not matches_text? on wrong text" do
|
483
|
+
pending "need to update these"
|
484
|
+
link = Webrat::Link.new(webrat_session, nil)
|
485
|
+
nbsp = [0xA0].pack("U")
|
486
|
+
link.should_receive(:text).and_return("Some"+nbsp+"Other"+nbsp+"Link")
|
487
|
+
link.should_receive(:inner_html).and_return("Some Other Link")
|
488
|
+
link.should_receive(:title).and_return(nil)
|
489
|
+
link.matches_text?("Link Text").should == false
|
490
|
+
end
|
491
|
+
|
492
|
+
it "should match text including character reference" do
|
493
|
+
pending "need to update these"
|
494
|
+
no_ko_gi_ri = [0x30CE,0x30B3,0x30AE,0x30EA]
|
495
|
+
nokogiri_ja_kana = no_ko_gi_ri.pack("U*")
|
496
|
+
nokogiri_char_ref = no_ko_gi_ri.map{|c| "&#x%X;" % c }.join("")
|
497
|
+
|
498
|
+
link = Webrat::Link.new(webrat_session, nil)
|
499
|
+
link.should_receive(:text).and_return(nokogiri_ja_kana)
|
500
|
+
link.matches_text?(nokogiri_ja_kana).should == 0
|
501
|
+
end
|
502
|
+
|
503
|
+
it "should match img link" do
|
504
|
+
pending "need to update these"
|
505
|
+
link = Webrat::Link.new(webrat_session, nil)
|
506
|
+
link.should_receive(:text).and_return('')
|
507
|
+
link.should_receive(:inner_html).and_return('<img src="logo.png" />')
|
508
|
+
link.matches_text?('logo.png').should == 10
|
509
|
+
end
|
510
|
+
|
511
|
+
end
|