diabolo-webrat 0.4.3 → 0.4.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.
- data/History.txt +8 -0
- data/Rakefile +5 -1
- data/lib/webrat/core/locators/field_labeled_locator.rb +1 -1
- data/lib/webrat/core/locators/label_locator.rb +1 -1
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/lib/webrat/selenium/application_server.rb +71 -0
- data/lib/webrat/selenium/merb_application_server.rb +48 -0
- data/lib/webrat/selenium/rails_application_server.rb +42 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +80 -0
- data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
- data/spec/fakes/test_session.rb +34 -0
- data/spec/integration/merb/app/controllers/application.rb +2 -0
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/spec/integration/merb/app/controllers/testing.rb +18 -0
- data/spec/integration/merb/config/environments/development.rb +15 -0
- data/spec/integration/merb/config/environments/rake.rb +11 -0
- data/spec/integration/merb/config/environments/test.rb +14 -0
- data/spec/integration/merb/config/init.rb +25 -0
- data/spec/integration/merb/config/rack.rb +11 -0
- data/spec/integration/merb/config/router.rb +33 -0
- data/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/spec/integration/merb/spec/webrat_spec.rb +32 -0
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/spec/integration/rails/app/controllers/application.rb +15 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
- data/spec/integration/rails/config/boot.rb +109 -0
- data/spec/integration/rails/config/environment.rb +12 -0
- data/spec/integration/rails/config/environments/development.rb +17 -0
- data/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/spec/integration/rails/config/environments/test.rb +22 -0
- data/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/spec/integration/rails/config/routes.rb +14 -0
- data/spec/integration/rails/test/integration/webrat_test.rb +80 -0
- data/spec/integration/rails/test/test_helper.rb +25 -0
- data/spec/integration/sinatra/classic_app.rb +64 -0
- data/spec/integration/sinatra/modular_app.rb +16 -0
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/spec/private/core/configuration_spec.rb +104 -0
- data/spec/private/core/field_spec.rb +67 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/logging_spec.rb +10 -0
- data/spec/private/core/session_spec.rb +198 -0
- data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/spec/private/merb/merb_session_spec.rb +42 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_session_spec.rb +110 -0
- data/spec/public/basic_auth_spec.rb +24 -0
- data/spec/public/check_spec.rb +191 -0
- data/spec/public/choose_spec.rb +118 -0
- data/spec/public/click_area_spec.rb +106 -0
- data/spec/public/click_button_spec.rb +502 -0
- data/spec/public/click_link_spec.rb +541 -0
- data/spec/public/fill_in_spec.rb +209 -0
- data/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/spec/public/locators/field_labeled_spec.rb +172 -0
- data/spec/public/locators/field_with_id_spec.rb +16 -0
- data/spec/public/matchers/contain_spec.rb +114 -0
- data/spec/public/matchers/have_selector_spec.rb +135 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +123 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +51 -0
- data/spec/public/select_date_spec.rb +112 -0
- data/spec/public/select_datetime_spec.rb +137 -0
- data/spec/public/select_spec.rb +261 -0
- data/spec/public/select_time_spec.rb +100 -0
- data/spec/public/set_hidden_field_spec.rb +5 -0
- data/spec/public/submit_form_spec.rb +5 -0
- data/spec/public/visit_spec.rb +58 -0
- data/spec/public/within_spec.rb +177 -0
- data/spec/spec_helper.rb +50 -0
- metadata +90 -25
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class WebratTest < ActionController::IntegrationTest
|
|
4
|
+
|
|
5
|
+
test "should visit fully qualified urls" do
|
|
6
|
+
visit root_url(:host => "chunkybacon.example.com")
|
|
7
|
+
assert_equal "chunkybacon", request.subdomains.first
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test "should visit pages" do
|
|
11
|
+
visit root_path
|
|
12
|
+
assert_contain("Webrat Form")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
test "should submit forms" do
|
|
16
|
+
visit root_path
|
|
17
|
+
fill_in "Text field", :with => "Hello"
|
|
18
|
+
check "TOS"
|
|
19
|
+
select "January"
|
|
20
|
+
click_button "Test"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
test "should check the value of a field" do
|
|
24
|
+
visit "/"
|
|
25
|
+
assert field_labeled("Prefilled").value, "text"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test "should not carry params through redirects" do
|
|
29
|
+
visit before_redirect_form_path
|
|
30
|
+
fill_in "Text field", :with => "value"
|
|
31
|
+
click_button
|
|
32
|
+
|
|
33
|
+
assert response.body !~ /value/
|
|
34
|
+
assert response.body =~ /custom_param/
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
test "should follow internal redirects" do
|
|
38
|
+
visit internal_redirect_path
|
|
39
|
+
assert !response.redirect?
|
|
40
|
+
assert response.body.include?("OK")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
test "should not follow external redirects" do
|
|
44
|
+
visit external_redirect_path
|
|
45
|
+
assert response.redirect?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
test "should click link by text" do
|
|
49
|
+
visit internal_redirect_path
|
|
50
|
+
click_link "Test Link Text"
|
|
51
|
+
assert_contain("Webrat Form")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
test "should click link by id" do
|
|
55
|
+
visit internal_redirect_path
|
|
56
|
+
click_link "link_id"
|
|
57
|
+
assert_contain("Webrat Form")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
test "should be able to assert xpath" do
|
|
61
|
+
visit root_path
|
|
62
|
+
assert_have_xpath "//h1"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
test "should be able to assert selector" do
|
|
66
|
+
visit root_path
|
|
67
|
+
assert_have_selector "h1"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
test "should detect infinite redirects" do
|
|
71
|
+
assert_raises Webrat::InfiniteRedirectError do
|
|
72
|
+
visit infinite_redirect_path
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# test "should be able to assert have tag" do
|
|
77
|
+
# visit root_path
|
|
78
|
+
# assert_have_tag "h1"
|
|
79
|
+
# end
|
|
80
|
+
end
|
|
@@ -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,104 @@
|
|
|
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
|
+
Webrat.stub!(:on_java? => false)
|
|
13
|
+
config = Webrat::Configuration.new
|
|
14
|
+
config.should parse_with_nokogiri
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should not use Nokogiri as the parser when on JRuby" do
|
|
18
|
+
Webrat.stub!(:on_java? => true)
|
|
19
|
+
config = Webrat::Configuration.new
|
|
20
|
+
config.should_not parse_with_nokogiri
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should open error files by default" do
|
|
24
|
+
config = Webrat::Configuration.new
|
|
25
|
+
config.should open_error_files
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should detect infinite redirects after 10" do
|
|
29
|
+
config = Webrat::Configuration.new
|
|
30
|
+
config.infinite_redirect_limit.should == 10
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should be configurable with a block" do
|
|
34
|
+
Webrat.configure do |config|
|
|
35
|
+
config.open_error_files = false
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
config = Webrat.configuration
|
|
39
|
+
config.should_not open_error_files
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should be configurable with multiple blocks" do
|
|
43
|
+
Webrat.configure do |config|
|
|
44
|
+
config.open_error_files = false
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
Webrat.configure do |config|
|
|
48
|
+
config.selenium_server_port = 1234
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
config = Webrat.configuration
|
|
52
|
+
config.should_not open_error_files
|
|
53
|
+
config.selenium_server_port.should == 1234
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
[:rails,
|
|
57
|
+
:selenium,
|
|
58
|
+
:rack,
|
|
59
|
+
:sinatra,
|
|
60
|
+
:mechanize].each do |mode|
|
|
61
|
+
it "should require correct lib when in #{mode} mode" do
|
|
62
|
+
config = Webrat::Configuration.new
|
|
63
|
+
config.should_receive(:require).with("webrat/#{mode}")
|
|
64
|
+
config.mode = mode
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should require merb_session when in merb mode" do
|
|
69
|
+
config = Webrat::Configuration.new
|
|
70
|
+
config.should_receive(:require).with("webrat/merb_session")
|
|
71
|
+
config.mode = :merb
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "Selenium" do
|
|
75
|
+
before :each do
|
|
76
|
+
@config = Webrat::Configuration.new
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should use 'test' as the application environment by default" do
|
|
80
|
+
@config.application_environment.should == :test
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should use 3001 as the application port by default" do
|
|
84
|
+
@config.application_port.should == 3001
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'should default application address to localhost' do
|
|
88
|
+
@config.application_address.should == 'localhost'
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'should default selenium server address to nil' do
|
|
92
|
+
@config.selenium_server_address.should be_nil
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'should default selenium server port to 4444' do
|
|
96
|
+
@config.selenium_server_port.should == 4444
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it 'should default selenium browser key to *firefox' do
|
|
100
|
+
@config.selenium_browser_key.should == '*firefox'
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
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.css_search(Webrat::XML.document(html), "input").first
|
|
13
|
+
checkbox = CheckboxField.new(nil, element)
|
|
14
|
+
checkbox.inspect.should =~ /#<Webrat::CheckboxField @element=<input type=['"]checkbox['"] checked(=['"]checked['"])?\/?>>/
|
|
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.css_search(Webrat::XML.document(html), "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.css_search(Webrat::XML.document(html), "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.css_search(Webrat::XML.document(html), "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.css_search(Webrat::XML.document(html), "input").first
|
|
63
|
+
radio_button = RadioField.new(nil, element)
|
|
64
|
+
radio_button.should_not be_checked
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
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,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
|