mkuklis-webrat 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. data/.document +4 -0
  2. data/.gitignore +15 -0
  3. data/History.txt +413 -0
  4. data/MIT-LICENSE.txt +19 -0
  5. data/README.rdoc +85 -0
  6. data/Rakefile +188 -0
  7. data/VERSION +1 -0
  8. data/install.rb +1 -0
  9. data/lib/webrat/adapters/mechanize.rb +78 -0
  10. data/lib/webrat/adapters/merb.rb +11 -0
  11. data/lib/webrat/adapters/rack.rb +25 -0
  12. data/lib/webrat/adapters/rails.rb +81 -0
  13. data/lib/webrat/adapters/sinatra.rb +9 -0
  14. data/lib/webrat/core/configuration.rb +92 -0
  15. data/lib/webrat/core/elements/area.rb +31 -0
  16. data/lib/webrat/core/elements/element.rb +33 -0
  17. data/lib/webrat/core/elements/field.rb +487 -0
  18. data/lib/webrat/core/elements/form.rb +103 -0
  19. data/lib/webrat/core/elements/label.rb +31 -0
  20. data/lib/webrat/core/elements/link.rb +93 -0
  21. data/lib/webrat/core/elements/select_option.rb +48 -0
  22. data/lib/webrat/core/locators/area_locator.rb +38 -0
  23. data/lib/webrat/core/locators/button_locator.rb +54 -0
  24. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  25. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  26. data/lib/webrat/core/locators/field_locator.rb +25 -0
  27. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  28. data/lib/webrat/core/locators/form_locator.rb +19 -0
  29. data/lib/webrat/core/locators/label_locator.rb +34 -0
  30. data/lib/webrat/core/locators/link_locator.rb +74 -0
  31. data/lib/webrat/core/locators/locator.rb +20 -0
  32. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  33. data/lib/webrat/core/locators.rb +20 -0
  34. data/lib/webrat/core/logging.rb +23 -0
  35. data/lib/webrat/core/matchers/have_content.rb +68 -0
  36. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  37. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  38. data/lib/webrat/core/matchers/have_xpath.rb +122 -0
  39. data/lib/webrat/core/matchers.rb +4 -0
  40. data/lib/webrat/core/methods.rb +64 -0
  41. data/lib/webrat/core/mime.rb +18 -0
  42. data/lib/webrat/core/save_and_open_page.rb +48 -0
  43. data/lib/webrat/core/scope.rb +365 -0
  44. data/lib/webrat/core/session.rb +306 -0
  45. data/lib/webrat/core/xml.rb +72 -0
  46. data/lib/webrat/core.rb +13 -0
  47. data/lib/webrat/core_extensions/blank.rb +58 -0
  48. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  49. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  50. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  51. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  52. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  53. data/lib/webrat/integrations/merb.rb +10 -0
  54. data/lib/webrat/integrations/rails.rb +25 -0
  55. data/lib/webrat/integrations/rspec-rails.rb +10 -0
  56. data/lib/webrat/integrations/selenium.rb +11 -0
  57. data/lib/webrat/merb.rb +9 -0
  58. data/lib/webrat/rspec-rails.rb +2 -0
  59. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  60. data/lib/webrat/selenium/application_servers/base.rb +54 -0
  61. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  62. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  63. data/lib/webrat/selenium/application_servers/rails.rb +67 -0
  64. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  65. data/lib/webrat/selenium/application_servers.rb +5 -0
  66. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  67. data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -0
  68. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -0
  69. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -0
  70. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  71. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  72. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  73. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  74. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  75. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  76. data/lib/webrat/selenium/matchers.rb +4 -0
  77. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  78. data/lib/webrat/selenium/selenium_rc_server.rb +86 -0
  79. data/lib/webrat/selenium/selenium_session.rb +272 -0
  80. data/lib/webrat/selenium/silence_stream.rb +18 -0
  81. data/lib/webrat/selenium.rb +70 -0
  82. data/lib/webrat.rb +18 -0
  83. data/spec/fakes/test_adapter.rb +37 -0
  84. data/spec/integration/mechanize/Rakefile +7 -0
  85. data/spec/integration/mechanize/config.ru +2 -0
  86. data/spec/integration/mechanize/sample_app.rb +20 -0
  87. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
  88. data/spec/integration/mechanize/spec/spec_helper.rb +27 -0
  89. data/spec/integration/merb/.gitignore +21 -0
  90. data/spec/integration/merb/Rakefile +35 -0
  91. data/spec/integration/merb/app/controllers/application.rb +2 -0
  92. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  93. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  94. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  95. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  96. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  97. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  98. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  99. data/spec/integration/merb/config/environments/development.rb +15 -0
  100. data/spec/integration/merb/config/environments/rake.rb +11 -0
  101. data/spec/integration/merb/config/environments/test.rb +14 -0
  102. data/spec/integration/merb/config/init.rb +25 -0
  103. data/spec/integration/merb/config/rack.rb +11 -0
  104. data/spec/integration/merb/config/router.rb +34 -0
  105. data/spec/integration/merb/spec/spec.opts +1 -0
  106. data/spec/integration/merb/spec/spec_helper.rb +26 -0
  107. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  108. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  109. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  110. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  111. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  112. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  113. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  114. data/spec/integration/rack/Rakefile +5 -0
  115. data/spec/integration/rack/app.rb +89 -0
  116. data/spec/integration/rack/test/helper.rb +21 -0
  117. data/spec/integration/rack/test/webrat_rack_test.rb +73 -0
  118. data/spec/integration/rails/.gitignore +3 -0
  119. data/spec/integration/rails/Rakefile +30 -0
  120. data/spec/integration/rails/app/controllers/application.rb +15 -0
  121. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  122. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  123. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  124. data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -0
  125. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  126. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  127. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  128. data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  129. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  130. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  131. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  132. data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  133. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  134. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  135. data/spec/integration/rails/config/boot.rb +109 -0
  136. data/spec/integration/rails/config/environment.rb +12 -0
  137. data/spec/integration/rails/config/environments/development.rb +17 -0
  138. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  139. data/spec/integration/rails/config/environments/test.rb +22 -0
  140. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  141. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  142. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  143. data/spec/integration/rails/config/locales/en.yml +5 -0
  144. data/spec/integration/rails/config/routes.rb +19 -0
  145. data/spec/integration/rails/public/404.html +30 -0
  146. data/spec/integration/rails/public/422.html +30 -0
  147. data/spec/integration/rails/public/500.html +33 -0
  148. data/spec/integration/rails/script/about +4 -0
  149. data/spec/integration/rails/script/console +3 -0
  150. data/spec/integration/rails/script/dbconsole +3 -0
  151. data/spec/integration/rails/script/destroy +3 -0
  152. data/spec/integration/rails/script/generate +3 -0
  153. data/spec/integration/rails/script/performance/benchmarker +3 -0
  154. data/spec/integration/rails/script/performance/profiler +3 -0
  155. data/spec/integration/rails/script/performance/request +3 -0
  156. data/spec/integration/rails/script/plugin +3 -0
  157. data/spec/integration/rails/script/process/inspector +3 -0
  158. data/spec/integration/rails/script/process/reaper +3 -0
  159. data/spec/integration/rails/script/process/spawner +3 -0
  160. data/spec/integration/rails/script/runner +3 -0
  161. data/spec/integration/rails/script/server +3 -0
  162. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  163. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  164. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  165. data/spec/integration/rails/test/integration/webrat_test.rb +122 -0
  166. data/spec/integration/rails/test/test_helper.rb +26 -0
  167. data/spec/integration/sinatra/Rakefile +5 -0
  168. data/spec/integration/sinatra/classic_app.rb +64 -0
  169. data/spec/integration/sinatra/modular_app.rb +16 -0
  170. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  171. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  172. data/spec/integration/sinatra/test/test_helper.rb +17 -0
  173. data/spec/private/core/configuration_spec.rb +87 -0
  174. data/spec/private/core/field_spec.rb +85 -0
  175. data/spec/private/core/link_spec.rb +24 -0
  176. data/spec/private/core/session_spec.rb +200 -0
  177. data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -0
  178. data/spec/private/nokogiri_spec.rb +77 -0
  179. data/spec/private/rails/attaches_file_spec.rb +81 -0
  180. data/spec/private/rails/rails_adapter_spec.rb +86 -0
  181. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  182. data/spec/public/basic_auth_spec.rb +24 -0
  183. data/spec/public/check_spec.rb +191 -0
  184. data/spec/public/choose_spec.rb +118 -0
  185. data/spec/public/click_area_spec.rb +106 -0
  186. data/spec/public/click_button_spec.rb +494 -0
  187. data/spec/public/click_link_spec.rb +511 -0
  188. data/spec/public/fill_in_spec.rb +224 -0
  189. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  190. data/spec/public/locators/field_labeled_spec.rb +172 -0
  191. data/spec/public/locators/field_with_id_spec.rb +16 -0
  192. data/spec/public/matchers/contain_spec.rb +114 -0
  193. data/spec/public/matchers/have_selector_spec.rb +146 -0
  194. data/spec/public/matchers/have_tag_spec.rb +39 -0
  195. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  196. data/spec/public/reload_spec.rb +10 -0
  197. data/spec/public/save_and_open_spec.rb +70 -0
  198. data/spec/public/select_date_spec.rb +112 -0
  199. data/spec/public/select_datetime_spec.rb +137 -0
  200. data/spec/public/select_spec.rb +455 -0
  201. data/spec/public/select_time_spec.rb +100 -0
  202. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  203. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  204. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  205. data/spec/public/set_hidden_field_spec.rb +5 -0
  206. data/spec/public/submit_form_spec.rb +5 -0
  207. data/spec/public/visit_spec.rb +58 -0
  208. data/spec/public/within_spec.rb +177 -0
  209. data/spec/rcov.opts +1 -0
  210. data/spec/spec.opts +2 -0
  211. data/spec/spec_helper.rb +54 -0
  212. data/vendor/selenium-server.jar +0 -0
  213. metadata +409 -0
@@ -0,0 +1,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 &amp; 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&nbsp;is&nbsp;a&nbsp;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&nbsp;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 &nbsp;" 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&nbsp;Other&nbsp;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