raldred-webrat 0.4.4.2

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 (160) hide show
  1. data/History.txt +346 -0
  2. data/MIT-LICENSE.txt +19 -0
  3. data/README.rdoc +85 -0
  4. data/Rakefile +168 -0
  5. data/install.rb +1 -0
  6. data/lib/webrat.rb +31 -0
  7. data/lib/webrat/core.rb +14 -0
  8. data/lib/webrat/core/configuration.rb +102 -0
  9. data/lib/webrat/core/elements/area.rb +31 -0
  10. data/lib/webrat/core/elements/element.rb +33 -0
  11. data/lib/webrat/core/elements/field.rb +405 -0
  12. data/lib/webrat/core/elements/form.rb +103 -0
  13. data/lib/webrat/core/elements/label.rb +31 -0
  14. data/lib/webrat/core/elements/link.rb +92 -0
  15. data/lib/webrat/core/elements/select_option.rb +35 -0
  16. data/lib/webrat/core/locators.rb +20 -0
  17. data/lib/webrat/core/locators/area_locator.rb +38 -0
  18. data/lib/webrat/core/locators/button_locator.rb +54 -0
  19. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  20. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  21. data/lib/webrat/core/locators/field_locator.rb +25 -0
  22. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  23. data/lib/webrat/core/locators/form_locator.rb +19 -0
  24. data/lib/webrat/core/locators/label_locator.rb +34 -0
  25. data/lib/webrat/core/locators/link_locator.rb +75 -0
  26. data/lib/webrat/core/locators/locator.rb +20 -0
  27. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  28. data/lib/webrat/core/logging.rb +24 -0
  29. data/lib/webrat/core/matchers.rb +4 -0
  30. data/lib/webrat/core/matchers/have_content.rb +73 -0
  31. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  32. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  33. data/lib/webrat/core/matchers/have_xpath.rb +147 -0
  34. data/lib/webrat/core/methods.rb +63 -0
  35. data/lib/webrat/core/mime.rb +29 -0
  36. data/lib/webrat/core/save_and_open_page.rb +50 -0
  37. data/lib/webrat/core/scope.rb +350 -0
  38. data/lib/webrat/core/session.rb +289 -0
  39. data/lib/webrat/core/xml.rb +115 -0
  40. data/lib/webrat/core/xml/hpricot.rb +19 -0
  41. data/lib/webrat/core/xml/nokogiri.rb +76 -0
  42. data/lib/webrat/core/xml/rexml.rb +24 -0
  43. data/lib/webrat/core_extensions/blank.rb +58 -0
  44. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  45. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  46. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  47. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  48. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  49. data/lib/webrat/mechanize.rb +74 -0
  50. data/lib/webrat/merb.rb +9 -0
  51. data/lib/webrat/merb_session.rb +65 -0
  52. data/lib/webrat/rack.rb +24 -0
  53. data/lib/webrat/rack_test.rb +32 -0
  54. data/lib/webrat/rails.rb +105 -0
  55. data/lib/webrat/rspec-rails.rb +13 -0
  56. data/lib/webrat/selenium.rb +81 -0
  57. data/lib/webrat/selenium/application_server.rb +73 -0
  58. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  59. data/lib/webrat/selenium/location_strategy_javascript/label.js +15 -0
  60. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  61. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
  62. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  63. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  64. data/lib/webrat/selenium/matchers.rb +4 -0
  65. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  66. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  67. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  68. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  69. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  70. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  71. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  72. data/lib/webrat/selenium/selenium_rc_server.rb +84 -0
  73. data/lib/webrat/selenium/selenium_session.rb +242 -0
  74. data/lib/webrat/selenium/silence_stream.rb +18 -0
  75. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  76. data/lib/webrat/sinatra.rb +44 -0
  77. data/spec/fakes/test_session.rb +34 -0
  78. data/spec/integration/merb/app/controllers/application.rb +2 -0
  79. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  80. data/spec/integration/merb/app/controllers/testing.rb +18 -0
  81. data/spec/integration/merb/config/environments/development.rb +15 -0
  82. data/spec/integration/merb/config/environments/rake.rb +11 -0
  83. data/spec/integration/merb/config/environments/test.rb +14 -0
  84. data/spec/integration/merb/config/init.rb +25 -0
  85. data/spec/integration/merb/config/rack.rb +11 -0
  86. data/spec/integration/merb/config/router.rb +33 -0
  87. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  88. data/spec/integration/merb/spec/webrat_spec.rb +32 -0
  89. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  90. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  91. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  92. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  93. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  94. data/spec/integration/rack/rack_app.rb +16 -0
  95. data/spec/integration/rack/test/test_helper.rb +20 -0
  96. data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
  97. data/spec/integration/rails/app/controllers/application.rb +15 -0
  98. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  99. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  100. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  101. data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
  102. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  103. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  104. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  105. data/spec/integration/rails/config/boot.rb +109 -0
  106. data/spec/integration/rails/config/environment.rb +12 -0
  107. data/spec/integration/rails/config/environments/development.rb +17 -0
  108. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  109. data/spec/integration/rails/config/environments/test.rb +22 -0
  110. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  111. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  112. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  113. data/spec/integration/rails/config/routes.rb +17 -0
  114. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  115. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  116. data/spec/integration/rails/test/integration/link_click_test.rb +21 -0
  117. data/spec/integration/rails/test/integration/webrat_test.rb +75 -0
  118. data/spec/integration/rails/test/test_helper.rb +25 -0
  119. data/spec/integration/sinatra/classic_app.rb +64 -0
  120. data/spec/integration/sinatra/modular_app.rb +16 -0
  121. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  122. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  123. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  124. data/spec/private/core/configuration_spec.rb +106 -0
  125. data/spec/private/core/field_spec.rb +85 -0
  126. data/spec/private/core/link_spec.rb +24 -0
  127. data/spec/private/core/logging_spec.rb +10 -0
  128. data/spec/private/core/session_spec.rb +198 -0
  129. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  130. data/spec/private/merb/merb_session_spec.rb +42 -0
  131. data/spec/private/nokogiri_spec.rb +77 -0
  132. data/spec/private/rails/attaches_file_spec.rb +81 -0
  133. data/spec/private/rails/rails_session_spec.rb +110 -0
  134. data/spec/public/basic_auth_spec.rb +24 -0
  135. data/spec/public/check_spec.rb +191 -0
  136. data/spec/public/choose_spec.rb +118 -0
  137. data/spec/public/click_area_spec.rb +106 -0
  138. data/spec/public/click_button_spec.rb +496 -0
  139. data/spec/public/click_link_spec.rb +541 -0
  140. data/spec/public/fill_in_spec.rb +209 -0
  141. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  142. data/spec/public/locators/field_labeled_spec.rb +172 -0
  143. data/spec/public/locators/field_with_id_spec.rb +16 -0
  144. data/spec/public/matchers/contain_spec.rb +114 -0
  145. data/spec/public/matchers/have_selector_spec.rb +142 -0
  146. data/spec/public/matchers/have_tag_spec.rb +39 -0
  147. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  148. data/spec/public/reload_spec.rb +10 -0
  149. data/spec/public/save_and_open_spec.rb +51 -0
  150. data/spec/public/select_date_spec.rb +112 -0
  151. data/spec/public/select_datetime_spec.rb +137 -0
  152. data/spec/public/select_spec.rb +249 -0
  153. data/spec/public/select_time_spec.rb +100 -0
  154. data/spec/public/set_hidden_field_spec.rb +5 -0
  155. data/spec/public/submit_form_spec.rb +5 -0
  156. data/spec/public/visit_spec.rb +58 -0
  157. data/spec/public/within_spec.rb +177 -0
  158. data/spec/spec_helper.rb +50 -0
  159. data/vendor/selenium-server.jar +0 -0
  160. metadata +220 -0
@@ -0,0 +1,25 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'test_help'
4
+
5
+ begin
6
+ require "redgreen"
7
+ rescue MissingSourceFile
8
+ end
9
+
10
+ require File.dirname(__FILE__) + "/../../../../lib/webrat"
11
+
12
+ Webrat.configure do |config|
13
+ config.mode = ENV['WEBRAT_INTEGRATION_MODE'].to_sym
14
+ end
15
+
16
+ ActionController::Base.class_eval do
17
+ def perform_action
18
+ perform_action_without_rescue
19
+ end
20
+ end
21
+ Dispatcher.class_eval do
22
+ def self.failsafe_response(output, status, exception = nil)
23
+ raise exception
24
+ end
25
+ end
@@ -0,0 +1,64 @@
1
+ require "rubygems"
2
+ require "sinatra"
3
+
4
+ use_in_file_templates!
5
+
6
+ get "/" do
7
+ erb :home
8
+ end
9
+
10
+ get "/go" do
11
+ erb :go
12
+ end
13
+
14
+ get "/internal_redirect" do
15
+ redirect "/"
16
+ end
17
+
18
+ get "/external_redirect" do
19
+ redirect "http://google.com"
20
+ end
21
+
22
+ post "/go" do
23
+ @user = params[:name]
24
+ @email = params[:email]
25
+ erb :hello
26
+ end
27
+
28
+ __END__
29
+
30
+ @@ layout
31
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
32
+ <html>
33
+ <title>sinatra testing with webrat</title>
34
+ <body>
35
+ <%= yield %>
36
+ </body>
37
+ </html>
38
+
39
+ @@ home
40
+ <p> visit <a href="/go">there</a></p>
41
+
42
+ <form>
43
+ <label>
44
+ Prefilled
45
+ <input type="text" name="prefilled" value="text" />
46
+ </label>
47
+ </form>
48
+
49
+ @@ go
50
+ <form method="post" action="/go">
51
+ <div>
52
+ <label for="name">Name</label>
53
+ <input type="text" name="name" id="name">
54
+ </div>
55
+ <div>
56
+ <label for="email">Email</label>
57
+ <input type="text" name="email" id="email">
58
+ </div>
59
+ <input type="submit" value="Submit" />
60
+ </form>
61
+
62
+ @@ hello
63
+ <p>Hello, <%= @user %></p>
64
+ <p>Your email is: <%= @email %></p>
@@ -0,0 +1,16 @@
1
+ require "rubygems"
2
+ require "sinatra/base"
3
+
4
+ class MyModularApp < Sinatra::Default
5
+ get "/" do
6
+ "Hello World"
7
+ end
8
+
9
+ get "/redirect_absolute_url" do
10
+ redirect URI.join(request.url, "foo").to_s
11
+ end
12
+
13
+ get "/foo" do
14
+ "spam"
15
+ end
16
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require File.dirname(__FILE__) + "/../classic_app"
3
+
4
+ class MyClassicAppTest < Test::Unit::TestCase
5
+ def test_visits_pages
6
+ visit "/"
7
+ assert response_body.include?("visit")
8
+
9
+ click_link "there"
10
+ assert response_body.include?('<form method="post" action="/go">')
11
+ end
12
+
13
+ def test_submits_form
14
+ visit "/go"
15
+ fill_in "Name", :with => "World"
16
+ fill_in "Email", :with => "world@example.org"
17
+ click_button "Submit"
18
+
19
+ assert response_body.include?("Hello, World")
20
+ assert response_body.include?("Your email is: world@example.org")
21
+ end
22
+
23
+ def test_check_value_of_field
24
+ visit "/"
25
+ assert field_labeled("Prefilled").value, "text"
26
+ end
27
+
28
+ def test_follows_internal_redirects
29
+ visit "/internal_redirect"
30
+ assert response_body.include?("visit")
31
+ end
32
+
33
+ def test_does_not_follow_external_redirects
34
+ visit "/external_redirect"
35
+ assert response_code == 302
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require File.dirname(__FILE__) + "/../modular_app"
3
+
4
+ class MyModularAppTest < Test::Unit::TestCase
5
+ def app
6
+ MyModularApp
7
+ end
8
+
9
+ def test_it_works
10
+ visit "/"
11
+ assert_contain "Hello World"
12
+ end
13
+
14
+ def test_redirects
15
+ visit "/redirect_absolute_url"
16
+ assert_equal "spam", response_body
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ require "rubygems"
2
+ require "test/unit"
3
+ require "redgreen"
4
+
5
+ require File.dirname(__FILE__) + "/../../../../lib/webrat"
6
+
7
+ Webrat.configure do |config|
8
+ config.mode = :sinatra
9
+ end
10
+
11
+ class Test::Unit::TestCase
12
+ include Webrat::Methods
13
+ include Webrat::Matchers
14
+
15
+ Webrat::Methods.delegate_to_session :response_code, :response_body
16
+ end
@@ -0,0 +1,106 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Configuration do
4
+ predicate_matchers[:parse_with_nokogiri] = :parse_with_nokogiri?
5
+ predicate_matchers[:open_error_files] = :open_error_files?
6
+
7
+ it "should have a mode" do
8
+ Webrat.configuration.should respond_to(:mode)
9
+ end
10
+
11
+ it "should use Nokogiri as the parser by default" do
12
+ config = Webrat::Configuration.new
13
+ config.should parse_with_nokogiri
14
+ end
15
+
16
+ it "should open error files by default" do
17
+ config = Webrat::Configuration.new
18
+ config.should open_error_files
19
+ end
20
+
21
+ it "should detect infinite redirects after 10" do
22
+ config = Webrat::Configuration.new
23
+ config.infinite_redirect_limit.should == 10
24
+ end
25
+
26
+ it "should be configurable with a block" do
27
+ Webrat.configure do |config|
28
+ config.open_error_files = false
29
+ end
30
+
31
+ config = Webrat.configuration
32
+ config.should_not open_error_files
33
+ end
34
+
35
+ it "should be configurable with multiple blocks" do
36
+ Webrat.configure do |config|
37
+ config.open_error_files = false
38
+ end
39
+
40
+ Webrat.configure do |config|
41
+ config.selenium_server_port = 1234
42
+ end
43
+
44
+ config = Webrat.configuration
45
+ config.should_not open_error_files
46
+ config.selenium_server_port.should == 1234
47
+ end
48
+
49
+ [:rails,
50
+ :selenium,
51
+ :rack,
52
+ :sinatra,
53
+ :mechanize].each do |mode|
54
+ it "should require correct lib when in #{mode} mode" do
55
+ config = Webrat::Configuration.new
56
+ config.should_receive(:require).with("webrat/#{mode}")
57
+ config.mode = mode
58
+ end
59
+ end
60
+
61
+ it "should require merb_session when in merb mode" do
62
+ config = Webrat::Configuration.new
63
+ config.should_receive(:require).with("webrat/merb_session")
64
+ config.mode = :merb
65
+ end
66
+
67
+ describe "Selenium" do
68
+ before :each do
69
+ @config = Webrat::Configuration.new
70
+ end
71
+
72
+ it "should use 'test' as the application environment by default" do
73
+ @config.application_environment.should == :test
74
+ end
75
+
76
+ it "should use 3001 as the application port by default" do
77
+ @config.application_port.should == 3001
78
+ end
79
+
80
+ it 'should default application address to localhost' do
81
+ @config.application_address.should == 'localhost'
82
+ end
83
+
84
+ it 'should default selenium server address to nil' do
85
+ @config.selenium_server_address.should be_nil
86
+ end
87
+
88
+ it 'should default selenium server port to 4444' do
89
+ @config.selenium_server_port.should == 4444
90
+ end
91
+
92
+ it 'should default selenium browser key to *firefox' do
93
+ @config.selenium_browser_key.should == '*firefox'
94
+ end
95
+
96
+ it 'should default selenium browser startup timeout to 5 seconds' do
97
+ @config.selenium_browser_startup_timeout.should == 5
98
+ end
99
+
100
+ it 'should allow overriding of the browser startup timeout' do
101
+ @config.selenium_browser_startup_timeout = 10
102
+ @config.selenium_browser_startup_timeout.should == 10
103
+ end
104
+ end
105
+
106
+ end
@@ -0,0 +1,85 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ module Webrat
4
+ describe Field do
5
+ unless Webrat.on_java?
6
+ it "should have nice inspect output" do
7
+ html = <<-HTML
8
+ <html>
9
+ <input type='checkbox' checked='checked' />
10
+ </html>
11
+ HTML
12
+
13
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
14
+ checkbox = CheckboxField.new(nil, element)
15
+ checkbox.inspect.should =~ /#<Webrat::CheckboxField @element=<input type=['"]checkbox['"] checked(=['"]checked['"])?\/?>>/
16
+ end
17
+ end
18
+ end
19
+
20
+ describe CheckboxField do
21
+ it "should say it is checked if it is" do
22
+ html = <<-HTML
23
+ <html>
24
+ <input type='checkbox' checked='checked' />
25
+ </html>
26
+ HTML
27
+
28
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
29
+ checkbox = CheckboxField.new(nil, element)
30
+ checkbox.should be_checked
31
+ end
32
+
33
+ it "should say it is not checked if it is not" do
34
+ html = <<-HTML
35
+ <html>
36
+ <input type='checkbox' />
37
+ </html>
38
+ HTML
39
+
40
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
41
+ checkbox = CheckboxField.new(nil, element)
42
+ checkbox.should_not be_checked
43
+ end
44
+ end
45
+
46
+ describe RadioField do
47
+ it "should say it is checked if it is" do
48
+ html = <<-HTML
49
+ <html>
50
+ <input type='radio' checked='checked' />
51
+ </html>
52
+ HTML
53
+
54
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
55
+ radio_button = RadioField.new(nil, element)
56
+ radio_button.should be_checked
57
+ end
58
+
59
+ it "should say it is not checked if it is not" do
60
+ html = <<-HTML
61
+ <html><input type='radio' /></html>
62
+ HTML
63
+
64
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
65
+ radio_button = RadioField.new(nil, element)
66
+ radio_button.should_not be_checked
67
+ end
68
+ end
69
+
70
+ describe TextField do
71
+ it 'should not escape values in mechanize mode' do
72
+ Webrat.configuration.mode = :mechanize
73
+
74
+ html = <<-HTML
75
+ <html>
76
+ <input type="text" name="email" value="user@example.com" />
77
+ </html>
78
+ HTML
79
+
80
+ element = Webrat::XML.css_search(Webrat::XML.document(html), 'input').first
81
+ text_field = TextField.new(nil, element)
82
+ text_field.to_param.should == { 'email' => 'user@example.com' }
83
+ end
84
+ end
85
+ 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::TestSession)
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,10 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Logging do
4
+
5
+ it "should not log if there is no logger" do
6
+ klass = Class.new
7
+ klass.send(:include, Webrat::Logging)
8
+ klass.new.debug_log "Testing"
9
+ end
10
+ end
@@ -0,0 +1,198 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Session do
4
+
5
+ it "should not have a doc_root" do
6
+ session = Webrat::Session.new
7
+ session.doc_root.should be_nil
8
+ end
9
+
10
+ it "should expose the current_dom" do
11
+ session = Webrat::Session.new
12
+
13
+ def session.response
14
+ Object.new
15
+ end
16
+
17
+ def session.response_body
18
+ "<html></html>"
19
+ end
20
+
21
+ session.should respond_to(:current_dom)
22
+ end
23
+
24
+ it "should open the page in the browser in MacOSX" do
25
+ session = Webrat::Session.new
26
+ session.stub!(:ruby_platform => 'darwin')
27
+ session.should_receive(:`).with("open path")
28
+ session.open_in_browser("path")
29
+ end
30
+
31
+ it "should open the page in the browser in cygwin" do
32
+ session = Webrat::Session.new
33
+ session.stub!(:ruby_platform => 'i386-cygwin')
34
+ session.should_receive(:`).with("rundll32 url.dll,FileProtocolHandler path\\to\\file")
35
+ session.open_in_browser("path/to/file")
36
+ end
37
+
38
+ it "should open the page in the browser in Win32" do
39
+ session = Webrat::Session.new
40
+ session.stub!(:ruby_platform => 'win32')
41
+ session.should_receive(:`).with("rundll32 url.dll,FileProtocolHandler path\\to\\file")
42
+ session.open_in_browser("path/to/file")
43
+ end
44
+
45
+ it "should provide a current_page for backwards compatibility" do
46
+ session = Webrat::Session.new
47
+ current_page = session.current_page
48
+ current_page.should_not be_nil
49
+ current_page.should respond_to(:url)
50
+ end
51
+
52
+ it "should allow custom headers to be set" do
53
+ session = Webrat::Session.new
54
+ session.header('Accept', 'application/xml')
55
+
56
+ session.instance_variable_get(:@custom_headers)['Accept'].should == 'application/xml'
57
+ end
58
+
59
+ it "should return a copy of the headers to be sent" do
60
+ session = Webrat::Session.new
61
+ session.instance_eval {
62
+ @default_headers = {'HTTP_X_FORWARDED_FOR' => '192.168.1.1'}
63
+ @custom_headers = {'Accept' => 'application/xml'}
64
+ }
65
+ session.headers.should == {'HTTP_X_FORWARDED_FOR' => '192.168.1.1', 'Accept' => 'application/xml'}
66
+ end
67
+
68
+ describe "#http_accept" do
69
+ before(:each) do
70
+ webrat_session = Webrat::Session.new
71
+ end
72
+
73
+ it "should set the Accept header with the string Mime type" do
74
+ webrat_session.http_accept('application/xml')
75
+ webrat_session.headers['Accept'].should == 'application/xml'
76
+ end
77
+
78
+ it "should set the Accept head with the string value of the symbol Mime type" do
79
+ webrat_session.http_accept(:xml)
80
+ webrat_session.headers['Accept'].should == 'application/xml'
81
+ end
82
+
83
+ it "should raise an error if a symbol Mime type is passed that does not exist" do
84
+ lambda { webrat_session.http_accept(:oogabooga) }.should raise_error(ArgumentError)
85
+ end
86
+ end
87
+
88
+ describe "#request_page" do
89
+ before(:each) do
90
+ webrat_session = Webrat::Session.new
91
+ end
92
+
93
+ it "should raise an error if the request is not a success" do
94
+ webrat_session.stub!(:get)
95
+ webrat_session.stub!(:response_body => "Exception caught")
96
+ webrat_session.stub!(:response_code => 500)
97
+ webrat_session.stub!(:formatted_error => "application error")
98
+ webrat_session.stub!(:save_and_open_page)
99
+
100
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
101
+ end
102
+
103
+ it "should raise an error but not open if the request is not a success and config quashes save_and_open" do
104
+ Webrat.configure do |config|
105
+ config.open_error_files = false
106
+ end
107
+ webrat_session.stub!(:get)
108
+ webrat_session.stub!(:response_body => "Exception caught")
109
+ webrat_session.stub!(:response_code => 500)
110
+ webrat_session.stub!(:formatted_error => "application error")
111
+ webrat_session.should_not_receive(:save_and_open_page)
112
+
113
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
114
+ end
115
+
116
+ it "should now follow external redirects" do
117
+ webrat_session.should_receive(:internal_redirect?).and_return(false)
118
+
119
+ webrat_session.request_page("/oldurl", :get, {})
120
+
121
+ webrat_session.current_url.should == "/oldurl"
122
+ end
123
+ end
124
+
125
+ describe "#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" do
131
+ webrat_session.stub!(:response_code => 301)
132
+ webrat_session.redirect?.should be_true
133
+ end
134
+
135
+ it "should return false if the last response wasn't a redirect" do
136
+ webrat_session.stub!(:response_code => 200)
137
+ webrat_session.redirect?.should be_false
138
+ end
139
+ end
140
+
141
+ describe "#internal_redirect?" do
142
+ before(:each) do
143
+ webrat_session = Webrat::Session.new
144
+ end
145
+
146
+ 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
147
+ webrat_session.stub!(:redirect? => true)
148
+ webrat_session.stub!(:current_url => "http://example.com")
149
+ webrat_session.stub!(:response_location => "http://example.com")
150
+ webrat_session.internal_redirect?.should be_true
151
+ end
152
+
153
+ it "should return true if the last response was a redirect and the hosts are the same but the subdomains are different" do
154
+ webrat_session.stub!(:redirect? => true)
155
+ webrat_session.stub!(:current_url => "http://example.com")
156
+ webrat_session.stub!(:response_location => "http://myName.example.com")
157
+ webrat_session.internal_redirect?.should be_true
158
+ end
159
+
160
+ it "should return false if the last response was not a redirect" do
161
+ webrat_session.stub!(:redirect? => false)
162
+ webrat_session.internal_redirect?.should be_false
163
+ end
164
+
165
+ 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
166
+ webrat_session.stub!(:redirect? => true)
167
+ webrat_session.stub!(:current_url => "http://example.com")
168
+ webrat_session.stub!(:response_location => "http://google.com")
169
+ webrat_session.internal_redirect?.should be_false
170
+ end
171
+
172
+ 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
173
+ webrat_session.stub!(:redirect? => true)
174
+ webrat_session.stub!(:current_url => "http://login.example.com")
175
+ webrat_session.stub!(:response_location => "http://login.google.com")
176
+ webrat_session.internal_redirect?.should be_false
177
+ end
178
+ end
179
+
180
+ describe "#redirected_to" do
181
+ before(:each) do
182
+ webrat_session = Webrat::Session.new
183
+ end
184
+
185
+ it "should return nil if not redirected" do
186
+ webrat_session.stub!(:redirect? => false)
187
+ webrat_session.redirected_to.should be_nil
188
+ end
189
+
190
+ it "should return the response_location if redirected" do
191
+ webrat_session.stub!(:redirect? => true)
192
+ webrat_session.stub!(:response_location => "http://www.example.com")
193
+ webrat_session.redirected_to.should == "http://www.example.com"
194
+ end
195
+
196
+ end
197
+
198
+ end