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,83 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ module Webrat
4
+ describe Field do
5
+ it "should have nice inspect output" do
6
+ html = <<-HTML
7
+ <html>
8
+ <input type='checkbox' checked='checked' />
9
+ </html>
10
+ HTML
11
+
12
+ element = Webrat::XML.document(html).css("input").first
13
+ checkbox = CheckboxField.new(nil, element)
14
+ checkbox.inspect.should =~ /^#<Webrat::CheckboxField @element=/
15
+ end
16
+ end
17
+
18
+ describe CheckboxField do
19
+ it "should say it is checked if it is" do
20
+ html = <<-HTML
21
+ <html>
22
+ <input type='checkbox' checked='checked' />
23
+ </html>
24
+ HTML
25
+
26
+ element = Webrat::XML.document(html).css("input").first
27
+ checkbox = CheckboxField.new(nil, element)
28
+ checkbox.should be_checked
29
+ end
30
+
31
+ it "should say it is not checked if it is not" do
32
+ html = <<-HTML
33
+ <html>
34
+ <input type='checkbox' />
35
+ </html>
36
+ HTML
37
+
38
+ element = Webrat::XML.document(html).css("input").first
39
+ checkbox = CheckboxField.new(nil, element)
40
+ checkbox.should_not be_checked
41
+ end
42
+ end
43
+
44
+ describe RadioField do
45
+ it "should say it is checked if it is" do
46
+ html = <<-HTML
47
+ <html>
48
+ <input type='radio' checked='checked' />
49
+ </html>
50
+ HTML
51
+
52
+ element = Webrat::XML.document(html).css("input").first
53
+ radio_button = RadioField.new(nil, element)
54
+ radio_button.should be_checked
55
+ end
56
+
57
+ it "should say it is not checked if it is not" do
58
+ html = <<-HTML
59
+ <html><input type='radio' /></html>
60
+ HTML
61
+
62
+ element = Webrat::XML.document(html).css("input").first
63
+ radio_button = RadioField.new(nil, element)
64
+ radio_button.should_not be_checked
65
+ end
66
+ end
67
+
68
+ describe TextField do
69
+ it 'should not escape values in mechanize mode' do
70
+ Webrat.configuration.mode = :mechanize
71
+
72
+ html = <<-HTML
73
+ <html>
74
+ <input type="text" name="email" value="user@example.com" />
75
+ </html>
76
+ HTML
77
+
78
+ element = Webrat::XML.document(html).css('input').first
79
+ text_field = TextField.new(nil, element)
80
+ text_field.to_query_string.should == 'email=user@example.com'
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,51 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe "Multiple nested params" do
4
+ it "should be corretly posted" do
5
+ Webrat.configuration.mode = :rails
6
+
7
+ with_html <<-HTML
8
+ <html>
9
+ <form method="post" action="/family">
10
+ <div class="couple">
11
+ <div class="parent">
12
+ <select name="user[family][parents][0][][gender]">
13
+ <option selected="selected" value="Mother">Mother</option>
14
+ <option value="Father">Father</option>
15
+ </select>
16
+ <input type="text" value="Alice" name="user[family][parents][0][][name]" />
17
+ </div>
18
+ <div class="parent">
19
+ <select name="user[family][parents][0][][gender]">
20
+ <option value="Mother">Mother</option>
21
+ <option selected="selected" value="Father">Father</option>
22
+ </select>
23
+ <input type="text" value="Michael" name="user[family][parents][0][][name]" />
24
+ </div>
25
+ </div>
26
+ <div class="couple">
27
+ <div class="parent">
28
+ <select name="user[family][parents][1][][gender]">
29
+ <option selected="selected" value="Mother">Mother</option>
30
+ <option value="Father">Father</option>
31
+ </select>
32
+ <input type="text" value="Jenny" name="user[family][parents][1][][name]" />
33
+ </div>
34
+ </div>
35
+ <input type="submit" />
36
+ </form>
37
+ </html>
38
+ HTML
39
+
40
+ params = { "user" => { "family" => { "parents" => {
41
+ "0" => [ {"name" => "Alice", "gender"=>"Mother"}, {"name" => "Michael", "gender"=>"Father"} ],
42
+ "1" => [ {"name" => "Jenny", "gender"=>"Mother"} ]
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ webrat_session.should_receive(:post).with("/family", params)
49
+ click_button
50
+ end
51
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Link do
4
+ # include Webrat::Link
5
+
6
+ before do
7
+ webrat_session = mock(Webrat::TestAdapter)
8
+ @link_text_with_nbsp = 'Link' + [0xA0].pack("U") + 'Text'
9
+ end
10
+
11
+ it "should pass through relative urls" do
12
+ link = Webrat::Link.new(webrat_session, {"href" => "/path"})
13
+ webrat_session.should_receive(:request_page).with("/path", :get, {})
14
+ link.click
15
+ end
16
+
17
+ it "shouldnt put base url onto " do
18
+ url = "https://www.example.com/path"
19
+ webrat_session.should_receive(:request_page).with(url, :get, {})
20
+ link = Webrat::Link.new(webrat_session, {"href" => url})
21
+ link.click
22
+ end
23
+
24
+ end
@@ -0,0 +1,182 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Session do
4
+
5
+ it "should expose the current_dom" do
6
+ session = Webrat::Session.new
7
+
8
+ def session.response
9
+ Object.new
10
+ end
11
+
12
+ def session.response_body
13
+ "<html></html>"
14
+ end
15
+
16
+ session.should respond_to(:current_dom)
17
+ end
18
+
19
+ it "should provide a current_page for backwards compatibility" do
20
+ session = Webrat::Session.new
21
+ current_page = session.current_page
22
+ current_page.should_not be_nil
23
+ current_page.should respond_to(:url)
24
+ end
25
+
26
+ it "should allow custom headers to be set" do
27
+ session = Webrat::Session.new
28
+ session.header('Accept', 'application/xml')
29
+
30
+ session.instance_variable_get(:@custom_headers)['Accept'].should == 'application/xml'
31
+ end
32
+
33
+ it "should return a copy of the headers to be sent" do
34
+ session = Webrat::Session.new
35
+ session.instance_eval {
36
+ @default_headers = {'HTTP_X_FORWARDED_FOR' => '192.168.1.1'}
37
+ @custom_headers = {'Accept' => 'application/xml'}
38
+ }
39
+ session.headers.should == {'HTTP_X_FORWARDED_FOR' => '192.168.1.1', 'Accept' => 'application/xml'}
40
+ end
41
+
42
+ describe "#http_accept" do
43
+ before(:each) do
44
+ webrat_session = Webrat::Session.new
45
+ end
46
+
47
+ it "should set the Accept header with the string Mime type" do
48
+ webrat_session.http_accept('application/xml')
49
+ webrat_session.headers['Accept'].should == 'application/xml'
50
+ end
51
+
52
+ it "should set the Accept head with the string value of the symbol Mime type" do
53
+ webrat_session.http_accept(:xml)
54
+ webrat_session.headers['Accept'].should == 'application/xml'
55
+ end
56
+
57
+ it "should raise an error if a symbol Mime type is passed that does not exist" do
58
+ lambda { webrat_session.http_accept(:oogabooga) }.should raise_error(ArgumentError)
59
+ end
60
+
61
+ it "should recognize a couple of webrat-specific formats" do
62
+ webrat_session.http_accept(:multipart_form).should == "multipart/form-data"
63
+ webrat_session.http_accept(:url_encoded_form).should == "application/x-www-form-urlencoded"
64
+ end
65
+ end
66
+
67
+ describe "#request_page" do
68
+ before(:each) do
69
+ webrat_session = Webrat::Session.new
70
+ end
71
+
72
+ it "should raise an error if the request is not a success" do
73
+ webrat_session.stub!(:get)
74
+ webrat_session.stub!(:response_body => "Exception caught")
75
+ webrat_session.stub!(:response_code => 500)
76
+ webrat_session.stub!(:formatted_error => "application error")
77
+ webrat_session.stub!(:save_and_open_page)
78
+
79
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
80
+ end
81
+
82
+ it "should raise an error but not open if the request is not a success and config quashes save_and_open" do
83
+ Webrat.configure do |config|
84
+ config.open_error_files = false
85
+ end
86
+ webrat_session.stub!(:get)
87
+ webrat_session.stub!(:response_body => "Exception caught")
88
+ webrat_session.stub!(:response_code => 500)
89
+ webrat_session.stub!(:formatted_error => "application error")
90
+ webrat_session.should_not_receive(:save_and_open_page)
91
+
92
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
93
+ end
94
+
95
+ it "should now follow external redirects" do
96
+ webrat_session.should_receive(:internal_redirect?).and_return(false)
97
+
98
+ webrat_session.request_page("/oldurl", :get, {})
99
+
100
+ webrat_session.current_url.should == "/oldurl"
101
+ end
102
+ end
103
+
104
+ describe "#redirect?" do
105
+ before(:each) do
106
+ webrat_session = Webrat::Session.new
107
+ end
108
+
109
+ it "should return true if the last response was a redirect" do
110
+ webrat_session.stub!(:response_code => 301)
111
+ webrat_session.redirect?.should be_true
112
+ end
113
+
114
+ it "should return false if the last response wasn't a redirect" do
115
+ webrat_session.stub!(:response_code => 200)
116
+ webrat_session.redirect?.should be_false
117
+ end
118
+
119
+ it "should return false if the last response was a 304 Not Modified" do
120
+ webrat_session.stub!(:response_code => 304)
121
+ webrat_session.redirect?.should be_false
122
+ end
123
+ end
124
+
125
+ describe "#internal_redirect?" do
126
+ before(:each) do
127
+ webrat_session = Webrat::Session.new
128
+ end
129
+
130
+ it "should return true if the last response was a redirect and the host of the current_url matches that of the response location" do
131
+ webrat_session.stub!(:redirect? => true)
132
+ webrat_session.stub!(:current_url => "http://example.com")
133
+ webrat_session.stub!(:response_location => "http://example.com")
134
+ webrat_session.internal_redirect?.should be_true
135
+ end
136
+
137
+ it "should return true if the last response was a redirect and the hosts are the same but the subdomains are different" do
138
+ webrat_session.stub!(:redirect? => true)
139
+ webrat_session.stub!(:current_url => "http://example.com")
140
+ webrat_session.stub!(:response_location => "http://myName.example.com")
141
+ webrat_session.internal_redirect?.should be_true
142
+ end
143
+
144
+ it "should return false if the last response was not a redirect" do
145
+ webrat_session.stub!(:redirect? => false)
146
+ webrat_session.internal_redirect?.should be_false
147
+ end
148
+
149
+ it "should return false if the last response was a redirect but the host of the current_url doesn't matches that of the response location" do
150
+ webrat_session.stub!(:redirect? => true)
151
+ webrat_session.stub!(:current_url => "http://example.com")
152
+ webrat_session.stub!(:response_location => "http://google.com")
153
+ webrat_session.internal_redirect?.should be_false
154
+ end
155
+
156
+ it "should return false if the last response was a redirect but the host of the current_url doesn't matches that of the response location, but they have the same subdomain" do
157
+ webrat_session.stub!(:redirect? => true)
158
+ webrat_session.stub!(:current_url => "http://login.example.com")
159
+ webrat_session.stub!(:response_location => "http://login.google.com")
160
+ webrat_session.internal_redirect?.should be_false
161
+ end
162
+ end
163
+
164
+ describe "#redirected_to" do
165
+ before(:each) do
166
+ webrat_session = Webrat::Session.new
167
+ end
168
+
169
+ it "should return nil if not redirected" do
170
+ webrat_session.stub!(:redirect? => false)
171
+ webrat_session.redirected_to.should be_nil
172
+ end
173
+
174
+ it "should return the response_location if redirected" do
175
+ webrat_session.stub!(:redirect? => true)
176
+ webrat_session.stub!(:response_location => "http://www.example.com")
177
+ webrat_session.redirected_to.should == "http://www.example.com"
178
+ end
179
+
180
+ end
181
+
182
+ end
@@ -0,0 +1,96 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Webrat::MechanizeAdapter do
4
+
5
+ Mechanize = WWW::Mechanize if defined?(WWW::Mechanize)
6
+
7
+ before :each do
8
+ Webrat.configuration.mode = :mechanize
9
+ end
10
+
11
+ before(:each) do
12
+ @mech = Webrat::MechanizeAdapter.new
13
+ end
14
+
15
+ describe "mechanize" do
16
+ it "should disable the following of redirects on the mechanize instance" do
17
+ mech = @mech.mechanize
18
+ mech.redirect_ok.should be_false
19
+ end
20
+ end
21
+
22
+ describe "post" do
23
+ def url
24
+ 'http://test.host/users'
25
+ end
26
+
27
+ def data
28
+ {:user => {:first_name => 'Nancy', :last_name => 'Callahan'}}
29
+ end
30
+
31
+ def flattened_data
32
+ {'user[first_name]' => 'Nancy', 'user[last_name]' => 'Callahan'}
33
+ end
34
+
35
+ it "should flatten model post data" do
36
+ mechanize = mock(:mechanize)
37
+ mechanize.stub!(:redirect_ok=)
38
+ Mechanize.stub!(:new => mechanize)
39
+ mechanize.should_receive(:post).with(url, flattened_data)
40
+ Webrat::MechanizeAdapter.new.post(url, data)
41
+ end
42
+ end
43
+
44
+ describe "#absolute_url" do
45
+ before(:each) do
46
+ @session = Webrat::MechanizeAdapter.new
47
+ @session.stub!(:current_url).and_return(absolute_url)
48
+ end
49
+
50
+ def absolute_url
51
+ 'http://test.host/users/fred/cabbages'
52
+ end
53
+
54
+ def rooted_url
55
+ '/users/fred/cabbages'
56
+ end
57
+
58
+ def relative_url
59
+ '../../wilma'
60
+ end
61
+
62
+ it "should return unmodified url if prefixed with scheme" do
63
+ @session.absolute_url(absolute_url).should == absolute_url
64
+ end
65
+
66
+ it "should prefix scheme and hostname if url begins with /" do
67
+ @session.absolute_url(rooted_url).should == absolute_url
68
+ end
69
+
70
+ it "should resolve sibling URLs relative to current path" do
71
+ @session.absolute_url(relative_url).should == 'http://test.host/users/wilma'
72
+ end
73
+
74
+ it "should cope with sibling URLs from root of site" do
75
+ @session.stub!(:current_url).and_return('http://test.host')
76
+ @session.absolute_url(relative_url).should == 'http://test.host/wilma'
77
+ end
78
+
79
+ it "should cope with https" do
80
+ @session.stub!(:current_url).and_return('https://test.host')
81
+ @session.absolute_url(relative_url).should == 'https://test.host/wilma'
82
+ end
83
+ end
84
+
85
+ describe "response_headers" do
86
+ it "should return the Headers object from the response" do
87
+ mech = @mech.mechanize
88
+ resp = mock('Mechanize::File')
89
+ hdr = Mechanize::Headers.new
90
+ resp.should_receive(:header).and_return(hdr)
91
+ mech.stub!(:get).and_return(resp)
92
+ @mech.get('/', nil)
93
+ @mech.response_headers.should == hdr
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ # if defined?(Nokogiri::XML) && Webrat.configuration.parse_with_nokogiri?
4
+ describe "Nokogiri Extension" do
5
+ include Webrat::Matchers
6
+
7
+ def fail
8
+ raise_error(Spec::Expectations::ExpectationNotMetError)
9
+ end
10
+
11
+ before(:each) do
12
+ @text_and_password = <<-HTML
13
+ <div>
14
+ <input type="text"/>
15
+ <input type="password"/>
16
+ <span type="text"/>
17
+ </div>
18
+ HTML
19
+
20
+ @text_only = <<-HTML
21
+ <div>
22
+ <input type="text" disabled="disabled" />
23
+ </div>
24
+ HTML
25
+
26
+ @password_only = <<-HTML
27
+ <div>
28
+ <input type="password"/>
29
+ <div>
30
+ HTML
31
+ end
32
+
33
+ describe ":text" do
34
+ it "passes have_selector(:text) if a node with type=text exists" do
35
+ @text_and_password.should have_selector(":text")
36
+ end
37
+
38
+ it "passes not have_selector(:text) if no node with text=text exists" do
39
+ @password_only.should_not have_selector(":text")
40
+ end
41
+
42
+ it "fails have_selector(:text) if no node with type=text exists" do
43
+ lambda { @password_only.should have_selector(":text") }.should fail
44
+ end
45
+
46
+ it "fails not have_selector(:text) if a node with type=text exists" do
47
+ lambda { @text_only.should_not have_selector(":text") }.should fail
48
+ end
49
+
50
+ it "works together with other selectors" do
51
+ @text_and_password.should have_selector("input:text[type*='te']")
52
+ end
53
+ end
54
+
55
+ describe ":password" do
56
+ it "passes have_selector(:password) if a node with type=password exists" do
57
+ @text_and_password.should have_selector(":password")
58
+ end
59
+
60
+ it "passes not have_selector(:text) if no node with text=text exists" do
61
+ @text_only.should_not have_selector(":password")
62
+ end
63
+
64
+ it "fails have_selector(:password) if no node with type=password exists" do
65
+ lambda { @text_only.should have_selector(":password") }.should fail
66
+ end
67
+
68
+ it "fails not have_selector(:password) if a node with type=password exists" do
69
+ lambda { @password_only.should_not have_selector(":password") }.should fail
70
+ end
71
+
72
+ it "works together with other selectors" do
73
+ @text_and_password.should have_selector("input:password[type*='pa']")
74
+ end
75
+ end
76
+ end
77
+ # end