mkuklis-webrat 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +4 -0
- data/.gitignore +15 -0
- data/History.txt +413 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +85 -0
- data/Rakefile +188 -0
- data/VERSION +1 -0
- data/install.rb +1 -0
- data/lib/webrat/adapters/mechanize.rb +78 -0
- data/lib/webrat/adapters/merb.rb +11 -0
- data/lib/webrat/adapters/rack.rb +25 -0
- data/lib/webrat/adapters/rails.rb +81 -0
- data/lib/webrat/adapters/sinatra.rb +9 -0
- data/lib/webrat/core/configuration.rb +92 -0
- data/lib/webrat/core/elements/area.rb +31 -0
- data/lib/webrat/core/elements/element.rb +33 -0
- data/lib/webrat/core/elements/field.rb +487 -0
- data/lib/webrat/core/elements/form.rb +103 -0
- data/lib/webrat/core/elements/label.rb +31 -0
- data/lib/webrat/core/elements/link.rb +93 -0
- data/lib/webrat/core/elements/select_option.rb +48 -0
- data/lib/webrat/core/locators/area_locator.rb +38 -0
- data/lib/webrat/core/locators/button_locator.rb +54 -0
- data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
- data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
- data/lib/webrat/core/locators/field_locator.rb +25 -0
- data/lib/webrat/core/locators/field_named_locator.rb +41 -0
- data/lib/webrat/core/locators/form_locator.rb +19 -0
- data/lib/webrat/core/locators/label_locator.rb +34 -0
- data/lib/webrat/core/locators/link_locator.rb +74 -0
- data/lib/webrat/core/locators/locator.rb +20 -0
- data/lib/webrat/core/locators/select_option_locator.rb +59 -0
- data/lib/webrat/core/locators.rb +20 -0
- data/lib/webrat/core/logging.rb +23 -0
- data/lib/webrat/core/matchers/have_content.rb +68 -0
- data/lib/webrat/core/matchers/have_selector.rb +74 -0
- data/lib/webrat/core/matchers/have_tag.rb +21 -0
- data/lib/webrat/core/matchers/have_xpath.rb +122 -0
- data/lib/webrat/core/matchers.rb +4 -0
- data/lib/webrat/core/methods.rb +64 -0
- data/lib/webrat/core/mime.rb +18 -0
- data/lib/webrat/core/save_and_open_page.rb +48 -0
- data/lib/webrat/core/scope.rb +365 -0
- data/lib/webrat/core/session.rb +306 -0
- data/lib/webrat/core/xml.rb +72 -0
- data/lib/webrat/core.rb +13 -0
- data/lib/webrat/core_extensions/blank.rb +58 -0
- data/lib/webrat/core_extensions/deprecate.rb +8 -0
- data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
- data/lib/webrat/core_extensions/meta_class.rb +6 -0
- data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/lib/webrat/integrations/merb.rb +10 -0
- data/lib/webrat/integrations/rails.rb +25 -0
- data/lib/webrat/integrations/rspec-rails.rb +10 -0
- data/lib/webrat/integrations/selenium.rb +11 -0
- data/lib/webrat/merb.rb +9 -0
- data/lib/webrat/rspec-rails.rb +2 -0
- data/lib/webrat/selenium/application_server_factory.rb +40 -0
- data/lib/webrat/selenium/application_servers/base.rb +54 -0
- data/lib/webrat/selenium/application_servers/external.rb +26 -0
- data/lib/webrat/selenium/application_servers/merb.rb +50 -0
- data/lib/webrat/selenium/application_servers/rails.rb +67 -0
- data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
- data/lib/webrat/selenium/application_servers.rb +5 -0
- data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
- data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -0
- data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
- data/lib/webrat/selenium/matchers/have_content.rb +66 -0
- data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
- data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
- data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
- data/lib/webrat/selenium/matchers.rb +4 -0
- data/lib/webrat/selenium/selenium_extensions.js +6 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +86 -0
- data/lib/webrat/selenium/selenium_session.rb +272 -0
- data/lib/webrat/selenium/silence_stream.rb +18 -0
- data/lib/webrat/selenium.rb +70 -0
- data/lib/webrat.rb +18 -0
- data/spec/fakes/test_adapter.rb +37 -0
- data/spec/integration/mechanize/Rakefile +7 -0
- data/spec/integration/mechanize/config.ru +2 -0
- data/spec/integration/mechanize/sample_app.rb +20 -0
- data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
- data/spec/integration/mechanize/spec/spec_helper.rb +27 -0
- data/spec/integration/merb/.gitignore +21 -0
- data/spec/integration/merb/Rakefile +35 -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 +27 -0
- data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
- data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
- data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
- data/spec/integration/merb/app/views/testing/upload.html.erb +9 -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 +34 -0
- data/spec/integration/merb/spec/spec.opts +1 -0
- data/spec/integration/merb/spec/spec_helper.rb +26 -0
- data/spec/integration/merb/spec/webrat_spec.rb +39 -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/main.thor +150 -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/rack/Rakefile +5 -0
- data/spec/integration/rack/app.rb +89 -0
- data/spec/integration/rack/test/helper.rb +21 -0
- data/spec/integration/rack/test/webrat_rack_test.rb +73 -0
- data/spec/integration/rails/.gitignore +3 -0
- data/spec/integration/rails/Rakefile +30 -0
- data/spec/integration/rails/app/controllers/application.rb +15 -0
- data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
- data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -0
- data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
- data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
- data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
- data/spec/integration/rails/app/views/links/show.html.erb +5 -0
- data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
- data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
- data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
- data/spec/integration/rails/app/views/webrat/within.html.erb +3 -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/locales/en.yml +5 -0
- data/spec/integration/rails/config/routes.rb +19 -0
- data/spec/integration/rails/public/404.html +30 -0
- data/spec/integration/rails/public/422.html +30 -0
- data/spec/integration/rails/public/500.html +33 -0
- data/spec/integration/rails/script/about +4 -0
- data/spec/integration/rails/script/console +3 -0
- data/spec/integration/rails/script/dbconsole +3 -0
- data/spec/integration/rails/script/destroy +3 -0
- data/spec/integration/rails/script/generate +3 -0
- data/spec/integration/rails/script/performance/benchmarker +3 -0
- data/spec/integration/rails/script/performance/profiler +3 -0
- data/spec/integration/rails/script/performance/request +3 -0
- data/spec/integration/rails/script/plugin +3 -0
- data/spec/integration/rails/script/process/inspector +3 -0
- data/spec/integration/rails/script/process/reaper +3 -0
- data/spec/integration/rails/script/process/spawner +3 -0
- data/spec/integration/rails/script/runner +3 -0
- data/spec/integration/rails/script/server +3 -0
- data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
- data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
- data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
- data/spec/integration/rails/test/integration/webrat_test.rb +122 -0
- data/spec/integration/rails/test/test_helper.rb +26 -0
- data/spec/integration/sinatra/Rakefile +5 -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 +17 -0
- data/spec/private/core/configuration_spec.rb +87 -0
- data/spec/private/core/field_spec.rb +85 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/session_spec.rb +200 -0
- data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_adapter_spec.rb +86 -0
- data/spec/private/selenium/application_servers/rails_spec.rb +26 -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 +494 -0
- data/spec/public/click_link_spec.rb +511 -0
- data/spec/public/fill_in_spec.rb +224 -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 +146 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +136 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +70 -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 +455 -0
- data/spec/public/select_time_spec.rb +100 -0
- data/spec/public/selenium/application_server_factory_spec.rb +49 -0
- data/spec/public/selenium/application_servers/external_spec.rb +12 -0
- data/spec/public/selenium/selenium_session_spec.rb +37 -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/rcov.opts +1 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +54 -0
- data/vendor/selenium-server.jar +0 -0
- metadata +409 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
2
|
+
|
3
|
+
describe "have_tag" do
|
4
|
+
include Webrat::Matchers
|
5
|
+
include Webrat::HaveTagMatcher
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@body = <<-HTML
|
9
|
+
<div id='main'>
|
10
|
+
<div class='inner'>hello, world!</div>
|
11
|
+
</div>
|
12
|
+
HTML
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be an alias for have_selector" do
|
16
|
+
@body.should have_tag("div")
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "asserts for tags" do
|
20
|
+
include Test::Unit::Assertions
|
21
|
+
|
22
|
+
before(:each) do
|
23
|
+
should_receive(:response_body).and_return @body
|
24
|
+
require 'test/unit'
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "assert_have_tag" do
|
28
|
+
it "should be an alias for assert_have_selector" do
|
29
|
+
assert_have_tag("div")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "assert_have_no_tag" do
|
34
|
+
it "should be an alias for assert_have_no_selector" do
|
35
|
+
assert_have_no_tag("p")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
2
|
+
|
3
|
+
describe "have_xpath" do
|
4
|
+
include Webrat::Matchers
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@body = <<-HTML
|
8
|
+
<div id='main'>
|
9
|
+
<div class='inner'>hello, world!</div>
|
10
|
+
<h2>Welcome "Bryan"</h2>
|
11
|
+
<h3>Welcome 'Bryan'</h3>
|
12
|
+
<h4>Welcome 'Bryan"</h4>
|
13
|
+
<ul>
|
14
|
+
<li>First</li>
|
15
|
+
<li>Second</li>
|
16
|
+
<li><a href="http://example.org">Third</a></li>
|
17
|
+
</ul>
|
18
|
+
</div>
|
19
|
+
HTML
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be able to match an XPATH" do
|
23
|
+
@body.should have_xpath("//div")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should be able to match an XPATH with attributes" do
|
27
|
+
@body.should have_xpath("//div", :class => "inner")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be able to match an XPATH with content" do
|
31
|
+
@body.should have_xpath("//div", :content => "hello, world!")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should not match an XPATH without content" do
|
35
|
+
@body.should_not have_xpath("//div", :content => "not present")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should be able to match an XPATH with content and class" do
|
39
|
+
@body.should have_xpath("//div", :class => "inner", :content => "hello, world!")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not match an XPATH with content and wrong class" do
|
43
|
+
@body.should_not have_xpath("//div", :class => "outer", :content => "hello, world!")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should not match an XPATH with wrong content and class" do
|
47
|
+
@body.should_not have_xpath("//div", :class => "inner", :content => "wrong")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should not match an XPATH with wrong content and wrong class" do
|
51
|
+
@body.should_not have_xpath("//div", :class => "outer", :content => "wrong")
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should not match a XPATH that does not exist" do
|
55
|
+
@body.should_not have_xpath("//p")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should be able to loop over all the matched elements" do
|
59
|
+
@body.should have_xpath("//div") do |node|
|
60
|
+
node.first.name.should == "div"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should not match if any of the matchers in the block fail" do
|
65
|
+
lambda {
|
66
|
+
@body.should have_xpath("//div") do |node|
|
67
|
+
node.first.name.should == "p"
|
68
|
+
end
|
69
|
+
}.should raise_error(Spec::Expectations::ExpectationNotMetError)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should be able to use #have_xpath in the block" do
|
73
|
+
@body.should have_xpath("//div[@id='main']") do |node|
|
74
|
+
node.should have_xpath("./div[@class='inner']")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should convert absolute paths to relative in the block" do
|
79
|
+
@body.should have_xpath("//div[@id='main']") do |node|
|
80
|
+
node.should have_xpath("//div[@class='inner']")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should not match any parent tags in the block" do
|
85
|
+
lambda {
|
86
|
+
@body.should have_xpath("//div[@class='inner']") do |node|
|
87
|
+
node.should have_xpath("//div[@id='main']")
|
88
|
+
end
|
89
|
+
}.should raise_error(Spec::Expectations::ExpectationNotMetError)
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should match descendants of the matched elements in the block" do
|
93
|
+
@body.should have_xpath("//ul") do |node|
|
94
|
+
node.should have_xpath("//a[@href='http://example.org']")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should allow descendant selectors in the block" do
|
99
|
+
@body.should have_xpath("//div[@id='main']") do |node|
|
100
|
+
node.should have_xpath("//ul//a")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe 'asserts for xpath' do
|
105
|
+
include Test::Unit::Assertions
|
106
|
+
|
107
|
+
before(:each) do
|
108
|
+
should_receive(:response_body).and_return @body
|
109
|
+
require 'test/unit'
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "assert_have_xpath" do
|
113
|
+
it "should pass when body contains the selection" do
|
114
|
+
assert_have_xpath("//div")
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should throw an exception when the body doesnt have matching xpath" do
|
118
|
+
lambda {
|
119
|
+
assert_have_xpath("//p")
|
120
|
+
}.should raise_error(AssertionFailedError)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "assert_have_no_xpath" do
|
125
|
+
it "should pass when the body doesn't contan the xpath" do
|
126
|
+
assert_have_no_xpath("//p")
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should throw an exception when the body does contain the xpath" do
|
130
|
+
lambda {
|
131
|
+
assert_have_no_xpath("//div")
|
132
|
+
}.should raise_error(AssertionFailedError)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe "reloads" do
|
4
|
+
it "should reload the page with http referer" do
|
5
|
+
webrat_session.should_receive(:get).with("/", {})
|
6
|
+
webrat_session.should_receive(:get).with("/", {}, {"HTTP_REFERER"=>"/"})
|
7
|
+
visit("/")
|
8
|
+
reload
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe "save_and_open_page" do
|
4
|
+
before do
|
5
|
+
with_html <<-HTML
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<link href="/stylesheets/foo.css" media="screen" rel="stylesheet" type="text/css" />
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<h1>Hello world</h1>
|
12
|
+
<img src="/images/bar.png" />
|
13
|
+
<img src='/images/foo.png' />
|
14
|
+
</body>
|
15
|
+
</html>
|
16
|
+
HTML
|
17
|
+
|
18
|
+
File.stub!(:exist? => true)
|
19
|
+
Time.stub!(:now => 1234)
|
20
|
+
|
21
|
+
require "launchy"
|
22
|
+
Launchy::Browser.stub!(:run)
|
23
|
+
|
24
|
+
@file_handle = mock("file handle")
|
25
|
+
File.stub!(:open).with(filename, 'w').and_yield(@file_handle)
|
26
|
+
@file_handle.stub!(:write)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should rewrite css rules" do
|
30
|
+
@file_handle.should_receive(:write) do |html|
|
31
|
+
html.should =~ %r|"#{webrat_session.doc_root}/stylesheets/foo.css"|s
|
32
|
+
end
|
33
|
+
|
34
|
+
save_and_open_page
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should rewrite image paths with double quotes" do
|
38
|
+
@file_handle.should_receive(:write) do |html|
|
39
|
+
html.should =~ %r|"#{webrat_session.doc_root}/images/bar.png"|s
|
40
|
+
end
|
41
|
+
|
42
|
+
save_and_open_page
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should rewrite image paths with single quotes" do
|
46
|
+
@file_handle.should_receive(:write) do |html|
|
47
|
+
html.should =~ %r|'#{webrat_session.doc_root}/images/foo.png'|s
|
48
|
+
end
|
49
|
+
|
50
|
+
save_and_open_page
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should open the temp file in a browser with Launchy" do
|
54
|
+
Launchy::Browser.should_receive(:run)
|
55
|
+
save_and_open_page
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should fail gracefully if Launchy is not available" do
|
59
|
+
Launchy::Browser.should_receive(:run).and_raise(LoadError)
|
60
|
+
|
61
|
+
lambda do
|
62
|
+
save_and_open_page
|
63
|
+
end.should_not raise_error
|
64
|
+
end
|
65
|
+
|
66
|
+
def filename
|
67
|
+
File.expand_path("./webrat-#{Time.now}.html")
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe "select_date" do
|
4
|
+
it "should send the values for each individual date component" do
|
5
|
+
with_html <<-HTML
|
6
|
+
<html>
|
7
|
+
<form action="/appointments" method="post">
|
8
|
+
<label for="appointment_date">Date</label><br />
|
9
|
+
<select id="appointment_date_1i" name="appointment[date(1i)]">
|
10
|
+
<option value="2003">2003</option>
|
11
|
+
</select>
|
12
|
+
<select id="appointment_date_2i" name="appointment[date(2i)]">
|
13
|
+
<option value="12">December</option>
|
14
|
+
</select>
|
15
|
+
<select id="appointment_date_3i" name="appointment[date(3i)]">
|
16
|
+
<option value="25">25</option>
|
17
|
+
</select>
|
18
|
+
<input type="submit" />
|
19
|
+
</form>
|
20
|
+
</html>
|
21
|
+
HTML
|
22
|
+
webrat_session.should_receive(:post).with("/appointments",
|
23
|
+
"appointment" => {"date(1i)" => '2003', "date(2i)" => "12", "date(3i)" => "25"})
|
24
|
+
select_date "December 25, 2003", :from => "Date"
|
25
|
+
click_button
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should accept a date object" do
|
29
|
+
with_html <<-HTML
|
30
|
+
<html>
|
31
|
+
<form action="/appointments" method="post">
|
32
|
+
<label for="appointment_date">date</label><br />
|
33
|
+
<select id="appointment_date_1i" name="appointment[date(1i)]">
|
34
|
+
<option value="2003">2003</option>
|
35
|
+
</select>
|
36
|
+
<select id="appointment_date_2i" name="appointment[date(2i)]">
|
37
|
+
<option value="12">December</option>
|
38
|
+
</select>
|
39
|
+
<select id="appointment_date_3i" name="appointment[date(3i)]">
|
40
|
+
<option value="25">25</option>
|
41
|
+
</select>
|
42
|
+
<input type="submit" />
|
43
|
+
</form>
|
44
|
+
</html>
|
45
|
+
HTML
|
46
|
+
webrat_session.should_receive(:post).with("/appointments",
|
47
|
+
"appointment" => {"date(1i)" => '2003', "date(2i)" => "12", "date(3i)" => "25"})
|
48
|
+
select_date Date.parse("December 25, 2003"), :from => "date"
|
49
|
+
click_button
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should work when no label is specified" do
|
53
|
+
with_html <<-HTML
|
54
|
+
<html>
|
55
|
+
<form action="/appointments" method="post">
|
56
|
+
<select id="appointment_date_1i" name="appointment[date(1i)]">
|
57
|
+
<option value="2003">2003</option>
|
58
|
+
</select>
|
59
|
+
<select id="appointment_date_2i" name="appointment[date(2i)]">
|
60
|
+
<option value="12">December</option>
|
61
|
+
</select>
|
62
|
+
<select id="appointment_date_3i" name="appointment[date(3i)]">
|
63
|
+
<option value="25">25</option>
|
64
|
+
</select>
|
65
|
+
<input type="submit" />
|
66
|
+
</form>
|
67
|
+
</html>
|
68
|
+
HTML
|
69
|
+
webrat_session.should_receive(:post).with("/appointments",
|
70
|
+
"appointment" => {"date(1i)" => '2003', "date(2i)" => "12", "date(3i)" => "25"})
|
71
|
+
select_date "December 25, 2003"
|
72
|
+
click_button
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should work when the label ends in a non word character" do
|
76
|
+
with_html <<-HTML
|
77
|
+
<html>
|
78
|
+
<form action="/appointments" method="post">
|
79
|
+
<label for="appointment_date">date ?</label><br />
|
80
|
+
<select id="appointment_date_1i" name="appointment[date(1i)]">
|
81
|
+
<option value="2003">2003</option>
|
82
|
+
</select>
|
83
|
+
<select id="appointment_date_2i" name="appointment[date(2i)]">
|
84
|
+
<option value="12">December</option>
|
85
|
+
</select>
|
86
|
+
<select id="appointment_date_3i" name="appointment[date(3i)]">
|
87
|
+
<option value="25">25</option>
|
88
|
+
</select>
|
89
|
+
<input type="submit" />
|
90
|
+
</form>
|
91
|
+
</html>
|
92
|
+
HTML
|
93
|
+
webrat_session.should_receive(:post).with("/appointments",
|
94
|
+
"appointment" => {"date(1i)" => '2003', "date(2i)" => "12", "date(3i)" => "25"})
|
95
|
+
select_date Date.parse("December 25, 2003"), :from => "date ?"
|
96
|
+
click_button
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should fail if the specified label is not found" do
|
100
|
+
with_html <<-HTML
|
101
|
+
<html>
|
102
|
+
<form method="post" action="/appointments">
|
103
|
+
<select name="month"><option>January</option></select>
|
104
|
+
<input type="submit" />
|
105
|
+
</form>
|
106
|
+
</html>
|
107
|
+
HTML
|
108
|
+
|
109
|
+
lambda { select_date "December 25, 2003", :from => "date" }.should raise_error(Webrat::NotFoundError)
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe "select_datetime" do
|
4
|
+
it "should send the values for each individual date and time components" do
|
5
|
+
with_html <<-HTML
|
6
|
+
<html>
|
7
|
+
<form action="/appointments" method="post">
|
8
|
+
<label for="appointment_time">Time</label><br />
|
9
|
+
<select id="appointment_time_1i" name="appointment[time(1i)]">
|
10
|
+
<option value="2003">2003</option>
|
11
|
+
</select>
|
12
|
+
<select id="appointment_time_2i" name="appointment[time(2i)]">
|
13
|
+
<option value="12">December</option>
|
14
|
+
</select>
|
15
|
+
<select id="appointment_time_3i" name="appointment[time(3i)]">
|
16
|
+
<option value="25">25</option>
|
17
|
+
</select>
|
18
|
+
<select id="appointment_time_4i" name="appointment[time(4i)]">
|
19
|
+
<option value="09">09</option>
|
20
|
+
</select>
|
21
|
+
: <select id="appointment_time_5i" name="appointment[time(5i)]">
|
22
|
+
<option value="30">30</option>
|
23
|
+
</select>
|
24
|
+
<input type="submit" />
|
25
|
+
</form>
|
26
|
+
</html>
|
27
|
+
HTML
|
28
|
+
webrat_session.should_receive(:post).with("/appointments",
|
29
|
+
"appointment" => {"time(1i)" => '2003', "time(2i)" => "12", "time(3i)" => "25", "time(4i)" => "09", "time(5i)" => "30"})
|
30
|
+
select_datetime "December 25, 2003 9:30", :from => "Time"
|
31
|
+
click_button
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should accept a time object" do
|
35
|
+
with_html <<-HTML
|
36
|
+
<html>
|
37
|
+
<form action="/appointments" method="post">
|
38
|
+
<label for="appointment_time">Time</label><br />
|
39
|
+
<select id="appointment_time_1i" name="appointment[time(1i)]">
|
40
|
+
<option value="2003">2003</option>
|
41
|
+
</select>
|
42
|
+
<select id="appointment_time_2i" name="appointment[time(2i)]">
|
43
|
+
<option value="12">December</option>
|
44
|
+
</select>
|
45
|
+
<select id="appointment_time_3i" name="appointment[time(3i)]">
|
46
|
+
<option value="25">25</option>
|
47
|
+
</select>
|
48
|
+
<select id="appointment_time_4i" name="appointment[time(4i)]">
|
49
|
+
<option value="09">09</option>
|
50
|
+
</select>
|
51
|
+
: <select id="appointment_time_5i" name="appointment[time(5i)]">
|
52
|
+
<option value="30">30</option>
|
53
|
+
</select>
|
54
|
+
<input type="submit" />
|
55
|
+
</form>
|
56
|
+
</html>
|
57
|
+
HTML
|
58
|
+
webrat_session.should_receive(:post).with("/appointments",
|
59
|
+
"appointment" => {"time(1i)" => '2003', "time(2i)" => "12", "time(3i)" => "25", "time(4i)" => "09", "time(5i)" => "30"})
|
60
|
+
select_datetime Time.parse("December 25, 2003 9:30"), :from => "Time"
|
61
|
+
click_button
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should work when the label ends in a non word character" do
|
65
|
+
with_html <<-HTML
|
66
|
+
<html>
|
67
|
+
<form action="/appointments" method="post">
|
68
|
+
<label for="appointment_time">Time ?</label><br />
|
69
|
+
<select id="appointment_time_1i" name="appointment[time(1i)]">
|
70
|
+
<option value="2003">2003</option>
|
71
|
+
</select>
|
72
|
+
<select id="appointment_time_2i" name="appointment[time(2i)]">
|
73
|
+
<option value="12">December</option>
|
74
|
+
</select>
|
75
|
+
<select id="appointment_time_3i" name="appointment[time(3i)]">
|
76
|
+
<option value="25">25</option>
|
77
|
+
</select>
|
78
|
+
<select id="appointment_time_4i" name="appointment[time(4i)]">
|
79
|
+
<option value="09">09</option>
|
80
|
+
</select>
|
81
|
+
: <select id="appointment_time_5i" name="appointment[time(5i)]">
|
82
|
+
<option value="30">30</option>
|
83
|
+
</select>
|
84
|
+
<input type="submit" />
|
85
|
+
</form>
|
86
|
+
</html>
|
87
|
+
HTML
|
88
|
+
webrat_session.should_receive(:post).with("/appointments",
|
89
|
+
"appointment" => {"time(1i)" => '2003', "time(2i)" => "12", "time(3i)" => "25", "time(4i)" => "09", "time(5i)" => "30"})
|
90
|
+
select_datetime "December 25, 2003 9:30", :from => "Time ?"
|
91
|
+
click_button
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
it "should work when no label is specified" do
|
96
|
+
with_html <<-HTML
|
97
|
+
<html>
|
98
|
+
<form action="/appointments" method="post">
|
99
|
+
<select id="appointment_time_1i" name="appointment[time(1i)]">
|
100
|
+
<option value="2003">2003</option>
|
101
|
+
</select>
|
102
|
+
<select id="appointment_time_2i" name="appointment[time(2i)]">
|
103
|
+
<option value="12">December</option>
|
104
|
+
</select>
|
105
|
+
<select id="appointment_time_3i" name="appointment[time(3i)]">
|
106
|
+
<option value="25">25</option>
|
107
|
+
</select>
|
108
|
+
<select id="appointment_time_4i" name="appointment[time(4i)]">
|
109
|
+
<option value="09">09</option>
|
110
|
+
</select>
|
111
|
+
: <select id="appointment_time_5i" name="appointment[time(5i)]">
|
112
|
+
<option value="30">30</option>
|
113
|
+
</select>
|
114
|
+
<input type="submit" />
|
115
|
+
</form>
|
116
|
+
</html>
|
117
|
+
HTML
|
118
|
+
webrat_session.should_receive(:post).with("/appointments",
|
119
|
+
"appointment" => {"time(1i)" => '2003', "time(2i)" => "12", "time(3i)" => "25", "time(4i)" => "09", "time(5i)" => "30"})
|
120
|
+
select_datetime "December 25, 2003 9:30"
|
121
|
+
click_button
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should fail if the specified label is not found" do
|
125
|
+
with_html <<-HTML
|
126
|
+
<html>
|
127
|
+
<form method="post" action="/appointments">
|
128
|
+
<select name="month"><option>January</option></select>
|
129
|
+
<input type="submit" />
|
130
|
+
</form>
|
131
|
+
</html>
|
132
|
+
HTML
|
133
|
+
|
134
|
+
lambda { select_datetime "December 25, 2003 9:30", :from => "Time" }.should raise_error(Webrat::NotFoundError)
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|