indirect-webrat 0.7.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.
Files changed (218) hide show
  1. data/.document +4 -0
  2. data/.gitignore +21 -0
  3. data/Gemfile +14 -0
  4. data/History.txt +470 -0
  5. data/MIT-LICENSE.txt +19 -0
  6. data/README.rdoc +85 -0
  7. data/Rakefile +143 -0
  8. data/Thorfile +118 -0
  9. data/install.rb +1 -0
  10. data/lib/webrat.rb +18 -0
  11. data/lib/webrat/adapters/mechanize.rb +94 -0
  12. data/lib/webrat/adapters/merb.rb +11 -0
  13. data/lib/webrat/adapters/rack.rb +30 -0
  14. data/lib/webrat/adapters/rails.rb +77 -0
  15. data/lib/webrat/adapters/sinatra.rb +9 -0
  16. data/lib/webrat/core.rb +13 -0
  17. data/lib/webrat/core/configuration.rb +114 -0
  18. data/lib/webrat/core/elements/area.rb +31 -0
  19. data/lib/webrat/core/elements/element.rb +33 -0
  20. data/lib/webrat/core/elements/field.rb +438 -0
  21. data/lib/webrat/core/elements/form.rb +127 -0
  22. data/lib/webrat/core/elements/label.rb +31 -0
  23. data/lib/webrat/core/elements/link.rb +93 -0
  24. data/lib/webrat/core/elements/select_option.rb +48 -0
  25. data/lib/webrat/core/locators.rb +20 -0
  26. data/lib/webrat/core/locators/area_locator.rb +38 -0
  27. data/lib/webrat/core/locators/button_locator.rb +54 -0
  28. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  29. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  30. data/lib/webrat/core/locators/field_locator.rb +25 -0
  31. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  32. data/lib/webrat/core/locators/form_locator.rb +19 -0
  33. data/lib/webrat/core/locators/label_locator.rb +34 -0
  34. data/lib/webrat/core/locators/link_locator.rb +82 -0
  35. data/lib/webrat/core/locators/locator.rb +20 -0
  36. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  37. data/lib/webrat/core/logging.rb +23 -0
  38. data/lib/webrat/core/matchers.rb +4 -0
  39. data/lib/webrat/core/matchers/have_content.rb +68 -0
  40. data/lib/webrat/core/matchers/have_selector.rb +85 -0
  41. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  42. data/lib/webrat/core/matchers/have_xpath.rb +124 -0
  43. data/lib/webrat/core/methods.rb +73 -0
  44. data/lib/webrat/core/mime.rb +18 -0
  45. data/lib/webrat/core/save_and_open_page.rb +28 -0
  46. data/lib/webrat/core/scope.rb +362 -0
  47. data/lib/webrat/core/session.rb +318 -0
  48. data/lib/webrat/core/xml.rb +44 -0
  49. data/lib/webrat/core_extensions/blank.rb +58 -0
  50. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  51. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  52. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  53. data/lib/webrat/core_extensions/nil_to_query_string.rb +5 -0
  54. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  55. data/lib/webrat/integrations/merb.rb +10 -0
  56. data/lib/webrat/integrations/rack.rb +9 -0
  57. data/lib/webrat/integrations/rails.rb +25 -0
  58. data/lib/webrat/integrations/rspec-rails.rb +11 -0
  59. data/lib/webrat/integrations/selenium.rb +11 -0
  60. data/lib/webrat/merb.rb +9 -0
  61. data/lib/webrat/rspec-rails.rb +2 -0
  62. data/lib/webrat/selenium.rb +70 -0
  63. data/lib/webrat/selenium/application_server_factory.rb +43 -0
  64. data/lib/webrat/selenium/application_servers.rb +5 -0
  65. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  66. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  67. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  68. data/lib/webrat/selenium/application_servers/rack.rb +51 -0
  69. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  70. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  71. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  72. data/lib/webrat/selenium/location_strategy_javascript/label.js +48 -0
  73. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -0
  74. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -0
  75. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  76. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  77. data/lib/webrat/selenium/matchers.rb +4 -0
  78. data/lib/webrat/selenium/matchers/have_content.rb +78 -0
  79. data/lib/webrat/selenium/matchers/have_selector.rb +57 -0
  80. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  81. data/lib/webrat/selenium/matchers/have_xpath.rb +53 -0
  82. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  83. data/lib/webrat/selenium/selenium_rc_server.rb +89 -0
  84. data/lib/webrat/selenium/selenium_session.rb +276 -0
  85. data/lib/webrat/selenium/silence_stream.rb +18 -0
  86. data/spec/fakes/test_adapter.rb +33 -0
  87. data/spec/integration/mechanize/Rakefile +7 -0
  88. data/spec/integration/mechanize/config.ru +2 -0
  89. data/spec/integration/mechanize/sample_app.rb +35 -0
  90. data/spec/integration/mechanize/spec/mechanize_spec.rb +30 -0
  91. data/spec/integration/mechanize/spec/spec_helper.rb +29 -0
  92. data/spec/integration/merb/.gitignore +21 -0
  93. data/spec/integration/merb/Rakefile +35 -0
  94. data/spec/integration/merb/app/controllers/application.rb +2 -0
  95. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  96. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  97. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  98. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  99. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  100. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  101. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  102. data/spec/integration/merb/config/environments/development.rb +15 -0
  103. data/spec/integration/merb/config/environments/rake.rb +11 -0
  104. data/spec/integration/merb/config/environments/test.rb +14 -0
  105. data/spec/integration/merb/config/init.rb +25 -0
  106. data/spec/integration/merb/config/rack.rb +11 -0
  107. data/spec/integration/merb/config/router.rb +34 -0
  108. data/spec/integration/merb/spec/spec.opts +1 -0
  109. data/spec/integration/merb/spec/spec_helper.rb +26 -0
  110. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  111. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  112. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  113. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  114. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  115. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  116. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  117. data/spec/integration/rack/Rakefile +5 -0
  118. data/spec/integration/rack/app.rb +89 -0
  119. data/spec/integration/rack/test/helper.rb +20 -0
  120. data/spec/integration/rack/test/webrat_rack_test.rb +74 -0
  121. data/spec/integration/rails/.gitignore +3 -0
  122. data/spec/integration/rails/Rakefile +30 -0
  123. data/spec/integration/rails/app/controllers/application_controller.rb +15 -0
  124. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  125. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  126. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  127. data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -0
  128. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  129. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  130. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  131. data/spec/integration/rails/app/views/buttons/show.html.erb +9 -0
  132. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  133. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  134. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  135. data/spec/integration/rails/app/views/webrat/buttons.html.erb +9 -0
  136. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  137. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  138. data/spec/integration/rails/config/boot.rb +109 -0
  139. data/spec/integration/rails/config/environment.rb +12 -0
  140. data/spec/integration/rails/config/environments/development.rb +17 -0
  141. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  142. data/spec/integration/rails/config/environments/test.rb +22 -0
  143. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  144. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  145. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  146. data/spec/integration/rails/config/locales/en.yml +5 -0
  147. data/spec/integration/rails/config/routes.rb +19 -0
  148. data/spec/integration/rails/public/404.html +30 -0
  149. data/spec/integration/rails/public/422.html +30 -0
  150. data/spec/integration/rails/public/500.html +33 -0
  151. data/spec/integration/rails/script/about +4 -0
  152. data/spec/integration/rails/script/console +3 -0
  153. data/spec/integration/rails/script/dbconsole +3 -0
  154. data/spec/integration/rails/script/destroy +3 -0
  155. data/spec/integration/rails/script/generate +3 -0
  156. data/spec/integration/rails/script/performance/benchmarker +3 -0
  157. data/spec/integration/rails/script/performance/profiler +3 -0
  158. data/spec/integration/rails/script/performance/request +3 -0
  159. data/spec/integration/rails/script/plugin +3 -0
  160. data/spec/integration/rails/script/process/inspector +3 -0
  161. data/spec/integration/rails/script/process/reaper +3 -0
  162. data/spec/integration/rails/script/process/spawner +3 -0
  163. data/spec/integration/rails/script/runner +3 -0
  164. data/spec/integration/rails/script/server +3 -0
  165. data/spec/integration/rails/test/integration/button_click_test.rb +66 -0
  166. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  167. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  168. data/spec/integration/rails/test/integration/webrat_test.rb +123 -0
  169. data/spec/integration/rails/test/test_helper.rb +27 -0
  170. data/spec/integration/sinatra/Rakefile +5 -0
  171. data/spec/integration/sinatra/classic_app.rb +63 -0
  172. data/spec/integration/sinatra/modular_app.rb +15 -0
  173. data/spec/integration/sinatra/test/classic_app_test.rb +38 -0
  174. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  175. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  176. data/spec/private/core/configuration_spec.rb +87 -0
  177. data/spec/private/core/field_spec.rb +83 -0
  178. data/spec/private/core/form_spec.rb +51 -0
  179. data/spec/private/core/link_spec.rb +24 -0
  180. data/spec/private/core/session_spec.rb +182 -0
  181. data/spec/private/mechanize/mechanize_adapter_spec.rb +96 -0
  182. data/spec/private/nokogiri_spec.rb +77 -0
  183. data/spec/private/rails/attaches_file_spec.rb +114 -0
  184. data/spec/private/rails/rails_adapter_spec.rb +79 -0
  185. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  186. data/spec/public/basic_auth_spec.rb +35 -0
  187. data/spec/public/check_spec.rb +191 -0
  188. data/spec/public/choose_spec.rb +118 -0
  189. data/spec/public/click_area_spec.rb +106 -0
  190. data/spec/public/click_button_spec.rb +494 -0
  191. data/spec/public/click_link_spec.rb +544 -0
  192. data/spec/public/fill_in_spec.rb +224 -0
  193. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  194. data/spec/public/locators/field_labeled_spec.rb +172 -0
  195. data/spec/public/locators/field_with_id_spec.rb +16 -0
  196. data/spec/public/matchers/contain_spec.rb +118 -0
  197. data/spec/public/matchers/have_selector_spec.rb +146 -0
  198. data/spec/public/matchers/have_tag_spec.rb +39 -0
  199. data/spec/public/matchers/have_xpath_spec.rb +165 -0
  200. data/spec/public/reload_spec.rb +10 -0
  201. data/spec/public/save_and_open_spec.rb +49 -0
  202. data/spec/public/select_date_spec.rb +112 -0
  203. data/spec/public/select_datetime_spec.rb +137 -0
  204. data/spec/public/select_spec.rb +474 -0
  205. data/spec/public/select_time_spec.rb +100 -0
  206. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  207. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  208. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  209. data/spec/public/set_hidden_field_spec.rb +5 -0
  210. data/spec/public/submit_form_spec.rb +56 -0
  211. data/spec/public/visit_spec.rb +58 -0
  212. data/spec/public/within_spec.rb +177 -0
  213. data/spec/rcov.opts +1 -0
  214. data/spec/spec.opts +2 -0
  215. data/spec/spec_helper.rb +53 -0
  216. data/vendor/selenium-server.jar +0 -0
  217. data/webrat.gemspec +355 -0
  218. metadata +424 -0
@@ -0,0 +1,544 @@
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 2.3.4 javascript links with authenticity tokens" do
148
+ with_html <<-HTML
149
+ <html>
150
+ <a href="/posts" 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 s = document.createElement('input');
156
+ s.setAttribute('type', 'hidden');
157
+ s.setAttribute('name', 'authenticity_token');
158
+ s.setAttribute('value', 'aa79cb354597a60a3786e7e291ed4f74d77d3a62=/$a');
159
+ f.appendChild(s);
160
+ f.submit();
161
+ return false;">Posts</a>
162
+ </html>
163
+ HTML
164
+ webrat_session.should_receive(:post).with("/posts", "authenticity_token" => "aa79cb354597a60a3786e7e291ed4f74d77d3a62=/$a")
165
+ click_link "Posts"
166
+ end
167
+
168
+ it "should click rails javascript delete links" do
169
+ with_html <<-HTML
170
+ <html>
171
+ <a href="/posts/1" 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
+ var m = document.createElement('input');
177
+ m.setAttribute('type', 'hidden');
178
+ m.setAttribute('name', '_method');
179
+ m.setAttribute('value', 'delete');
180
+ f.appendChild(m);
181
+ f.submit();
182
+ return false;">Delete</a>
183
+ </html>
184
+ HTML
185
+ webrat_session.should_receive(:delete).with("/posts/1", {})
186
+ click_link "Delete"
187
+ end
188
+
189
+ it "should click rails javascript post links" do
190
+ with_html <<-HTML
191
+ <html>
192
+ <a href="/posts" onclick="var f = document.createElement('form');
193
+ f.style.display = 'none';
194
+ this.parentNode.appendChild(f);
195
+ f.method = 'POST';
196
+ f.action = this.href;
197
+ f.submit();
198
+ return false;">Posts</a>
199
+ </html>
200
+ HTML
201
+ webrat_session.should_receive(:post).with("/posts", {})
202
+ click_link "Posts"
203
+ end
204
+
205
+ it "should click rails javascript post links without javascript" do
206
+ with_html <<-HTML
207
+ <html>
208
+ <a href="/posts" onclick="var f = document.createElement('form');
209
+ f.style.display = 'none';
210
+ this.parentNode.appendChild(f);
211
+ f.method = 'POST';
212
+ f.action = this.href;
213
+ f.submit();
214
+ return false;">Posts</a>
215
+ </html>
216
+ HTML
217
+ webrat_session.should_receive(:get).with("/posts", {})
218
+ click_link "Posts", :javascript => false
219
+ end
220
+
221
+ it "should click rails javascript post 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', 'post');
233
+ f.appendChild(m);
234
+ f.submit();
235
+ return false;">Post</a></h2>
236
+ </html>
237
+ HTML
238
+ webrat_session.should_receive(:post).with("/posts", {})
239
+ click_link "Post"
240
+ end
241
+
242
+ it "should click rails javascript put links" do
243
+ with_html <<-HTML
244
+ <html>
245
+ <a href="/posts" 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
+ m.setAttribute('value', 'put');
254
+ f.appendChild(m);
255
+ f.submit();
256
+ return false;">Put</a></h2>
257
+ </html>
258
+ HTML
259
+ webrat_session.should_receive(:put).with("/posts", {})
260
+ click_link "Put"
261
+ end
262
+
263
+ it "should fail if the javascript link doesn't have a value for the _method input" do
264
+ with_html <<-HTML
265
+ <html>
266
+ <a href="/posts/1" onclick="var f = document.createElement('form');
267
+ f.style.display = 'none';
268
+ this.parentNode.appendChild(f);
269
+ f.method = 'POST';
270
+ f.action = this.href;
271
+ var m = document.createElement('input');
272
+ m.setAttribute('type', 'hidden');
273
+ m.setAttribute('name', '_method');
274
+ f.appendChild(m);
275
+ f.submit();
276
+ return false;">Link</a>
277
+ </html>
278
+ HTML
279
+
280
+ lambda {
281
+ click_link "Link"
282
+ }.should raise_error(Webrat::WebratError)
283
+ end
284
+
285
+ it "should assert valid response" do
286
+ with_html <<-HTML
287
+ <html>
288
+ <a href="/page">Link text</a>
289
+ </html>
290
+ HTML
291
+ webrat_session.response_code = 501
292
+ lambda { click_link "Link text" }.should raise_error(Webrat::PageLoadError)
293
+ end
294
+
295
+ [200, 300, 400, 499].each do |status|
296
+ it "should consider the #{status} status code as success" do
297
+ with_html <<-HTML
298
+ <html>
299
+ <a href="/page">Link text</a>
300
+ </html>
301
+ HTML
302
+ webrat_session.stub!(:redirect? => false)
303
+ webrat_session.response_code = status
304
+ lambda { click_link "Link text" }.should_not raise_error
305
+ end
306
+ end
307
+
308
+ it "should fail is the link doesn't exist" do
309
+ with_html <<-HTML
310
+ <html>
311
+ <a href="/page">Link text</a>
312
+ </html>
313
+ HTML
314
+
315
+ lambda {
316
+ click_link "Missing link"
317
+ }.should raise_error(Webrat::NotFoundError)
318
+ end
319
+
320
+ it "should not be case sensitive" do
321
+ with_html <<-HTML
322
+ <html>
323
+ <a href="/page">Link text</a>
324
+ </html>
325
+ HTML
326
+ webrat_session.should_receive(:get).with("/page", {})
327
+ click_link "LINK TEXT"
328
+ end
329
+
330
+ it "should match link substrings" do
331
+ with_html <<-HTML
332
+ <html>
333
+ <a href="/page">This is some cool link text, isn't it?</a>
334
+ </html>
335
+ HTML
336
+ webrat_session.should_receive(:get).with("/page", {})
337
+ click_link "Link text"
338
+ end
339
+
340
+ it "should work with elements in the link" do
341
+ with_html <<-HTML
342
+ <html>
343
+ <a href="/page"><span>Link text</span></a>
344
+ </html>
345
+ HTML
346
+ webrat_session.should_receive(:get).with("/page", {})
347
+ click_link "Link text"
348
+ end
349
+
350
+ it "should match the first matching link" do
351
+ with_html <<-HTML
352
+ <html>
353
+ <a href="/page1">Link text</a>
354
+ <a href="/page2">Link text</a>
355
+ </html>
356
+ HTML
357
+ webrat_session.should_receive(:get).with("/page1", {})
358
+ click_link "Link text"
359
+ end
360
+
361
+ it "should choose the shortest link text match" do
362
+ with_html <<-HTML
363
+ <html>
364
+ <a href="/page1">Linkerama</a>
365
+ <a href="/page2">Link</a>
366
+ </html>
367
+ HTML
368
+
369
+ webrat_session.should_receive(:get).with("/page2", {})
370
+ click_link "Link"
371
+ end
372
+
373
+ it "should choose the shortest link text match, preferring text" do
374
+ with_html <<-HTML
375
+ <html>
376
+ <a href="/page1">Linkerama</a>
377
+ <a title="Link" href="/page2">Foo</a>
378
+ </html>
379
+ HTML
380
+
381
+ webrat_session.should_receive(:get).with("/page1", {})
382
+ click_link "Link"
383
+ end
384
+
385
+ it "should treat non-breaking spaces as spaces" do
386
+ with_html <<-HTML
387
+ <html>
388
+ <a href="/page1">This&nbsp;is&nbsp;a&nbsp;link</a>
389
+ </html>
390
+ HTML
391
+
392
+ webrat_session.should_receive(:get).with("/page1", {})
393
+ click_link "This is a link"
394
+ end
395
+
396
+ it "should not match on non-text contents" do
397
+ pending "needs fix" do
398
+ with_html <<-HTML
399
+ <html>
400
+ <a href="/page1"><span class="location">My house</span></a>
401
+ <a href="/page2">Location</a>
402
+ </html>
403
+ HTML
404
+
405
+ webrat_session.should_receive(:get).with("/page2", {})
406
+ click_link "Location"
407
+ end
408
+ end
409
+
410
+ it "should click link within a selector" do
411
+ with_html <<-HTML
412
+ <html>
413
+ <a href="/page1">Link</a>
414
+ <div id="container">
415
+ <a href="/page2">Link</a>
416
+ </div>
417
+ </html>
418
+ HTML
419
+
420
+ webrat_session.should_receive(:get).with("/page2", {})
421
+ click_link_within "#container", "Link"
422
+ end
423
+
424
+ it "should not make request when link is local anchor" do
425
+ with_html <<-HTML
426
+ <html>
427
+ <a href="#section-1">Jump to Section 1</a>
428
+ </html>
429
+ HTML
430
+ # Don't know why webrat_session.should_receive(:get).never doesn't work here
431
+ webrat_session.should_receive(:send).with('get_via_redirect', '#section-1', {}).never
432
+ click_link "Jump to Section 1"
433
+ end
434
+
435
+ it "should follow relative links" do
436
+ webrat_session.stub!(:current_url => "/page")
437
+ with_html <<-HTML
438
+ <html>
439
+ <a href="sub">Jump to sub page</a>
440
+ </html>
441
+ HTML
442
+ webrat_session.should_receive(:get).with("/page/sub", {})
443
+ click_link "Jump to sub page"
444
+ end
445
+
446
+ it "should follow fully qualified local links" do
447
+ webrat_session.stub!(:current_url => "/page")
448
+ with_html <<-HTML
449
+ <html>
450
+ <a href="http://subdomain.example.com/page/sub">Jump to sub page</a>
451
+ </html>
452
+ HTML
453
+ webrat_session.should_receive(:get).with("http://subdomain.example.com/page/sub", {})
454
+ click_link "Jump to sub page"
455
+ end
456
+
457
+ it "should follow fully qualified local links to example.com" do
458
+ with_html <<-HTML
459
+ <html>
460
+ <a href="http://www.example.com/page/sub">Jump to sub page</a>
461
+ </html>
462
+ HTML
463
+ webrat_session.should_receive(:get).with("http://www.example.com/page/sub", {})
464
+ click_link "Jump to sub page"
465
+ end
466
+
467
+ it "should follow query parameters" do
468
+ webrat_session.stub!(:current_url => "/page")
469
+ with_html <<-HTML
470
+ <html>
471
+ <a href="?foo=bar">Jump to foo bar</a>
472
+ </html>
473
+ HTML
474
+ webrat_session.should_receive(:get).with("/page?foo=bar", {})
475
+ click_link "Jump to foo bar"
476
+ end
477
+
478
+ it "should matches_text? on regexp" do
479
+ pending "need to update these"
480
+ link = Webrat::Link.new(webrat_session, nil)
481
+ link.should_receive(:text).and_return(@link_text_with_nbsp)
482
+ link.matches_text?(/link/i).should == 0
483
+ end
484
+
485
+ it "should matches_text? on link_text" do
486
+ pending "need to update these"
487
+ link = Webrat::Link.new(webrat_session, nil)
488
+ link.should_receive(:text).and_return(@link_text_with_nbsp)
489
+ link.matches_text?("Link Text").should == 0
490
+ end
491
+
492
+ it "should matches_text? on substring" do
493
+ pending "need to update these"
494
+ link = Webrat::Link.new(webrat_session, nil)
495
+ link.should_receive(:text).and_return(@link_text_with_nbsp)
496
+ link.matches_text?("nk Te").should_not be_nil
497
+ end
498
+
499
+ it "should not matches_text? on link_text case insensitive" do
500
+ pending "need to update these"
501
+ link = Webrat::Link.new(webrat_session, nil)
502
+ link.should_receive(:text).and_return(@link_text_with_nbsp)
503
+ link.should_receive(:inner_html).and_return('Link&nbsp;Text')
504
+ link.should_receive(:title).and_return(nil)
505
+ link.matches_text?("link_text").should == false
506
+ end
507
+
508
+ it "should match text not include &nbsp;" do
509
+ pending "need to update these"
510
+ link = Webrat::Link.new(webrat_session, nil)
511
+ link.should_receive(:text).and_return('LinkText')
512
+ link.matches_text?("LinkText").should == 0
513
+ end
514
+
515
+ it "should not matches_text? on wrong text" do
516
+ pending "need to update these"
517
+ link = Webrat::Link.new(webrat_session, nil)
518
+ nbsp = [0xA0].pack("U")
519
+ link.should_receive(:text).and_return("Some"+nbsp+"Other"+nbsp+"Link")
520
+ link.should_receive(:inner_html).and_return("Some&nbsp;Other&nbsp;Link")
521
+ link.should_receive(:title).and_return(nil)
522
+ link.matches_text?("Link Text").should == false
523
+ end
524
+
525
+ it "should match text including character reference" do
526
+ pending "need to update these"
527
+ no_ko_gi_ri = [0x30CE,0x30B3,0x30AE,0x30EA]
528
+ nokogiri_ja_kana = no_ko_gi_ri.pack("U*")
529
+ nokogiri_char_ref = no_ko_gi_ri.map{|c| "&#x%X;" % c }.join("")
530
+
531
+ link = Webrat::Link.new(webrat_session, nil)
532
+ link.should_receive(:text).and_return(nokogiri_ja_kana)
533
+ link.matches_text?(nokogiri_ja_kana).should == 0
534
+ end
535
+
536
+ it "should match img link" do
537
+ pending "need to update these"
538
+ link = Webrat::Link.new(webrat_session, nil)
539
+ link.should_receive(:text).and_return('')
540
+ link.should_receive(:inner_html).and_return('<img src="logo.png" />')
541
+ link.matches_text?('logo.png').should == 10
542
+ end
543
+
544
+ end