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.
Files changed (213) hide show
  1. data/.document +4 -0
  2. data/.gitignore +15 -0
  3. data/History.txt +413 -0
  4. data/MIT-LICENSE.txt +19 -0
  5. data/README.rdoc +85 -0
  6. data/Rakefile +188 -0
  7. data/VERSION +1 -0
  8. data/install.rb +1 -0
  9. data/lib/webrat/adapters/mechanize.rb +78 -0
  10. data/lib/webrat/adapters/merb.rb +11 -0
  11. data/lib/webrat/adapters/rack.rb +25 -0
  12. data/lib/webrat/adapters/rails.rb +81 -0
  13. data/lib/webrat/adapters/sinatra.rb +9 -0
  14. data/lib/webrat/core/configuration.rb +92 -0
  15. data/lib/webrat/core/elements/area.rb +31 -0
  16. data/lib/webrat/core/elements/element.rb +33 -0
  17. data/lib/webrat/core/elements/field.rb +487 -0
  18. data/lib/webrat/core/elements/form.rb +103 -0
  19. data/lib/webrat/core/elements/label.rb +31 -0
  20. data/lib/webrat/core/elements/link.rb +93 -0
  21. data/lib/webrat/core/elements/select_option.rb +48 -0
  22. data/lib/webrat/core/locators/area_locator.rb +38 -0
  23. data/lib/webrat/core/locators/button_locator.rb +54 -0
  24. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  25. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  26. data/lib/webrat/core/locators/field_locator.rb +25 -0
  27. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  28. data/lib/webrat/core/locators/form_locator.rb +19 -0
  29. data/lib/webrat/core/locators/label_locator.rb +34 -0
  30. data/lib/webrat/core/locators/link_locator.rb +74 -0
  31. data/lib/webrat/core/locators/locator.rb +20 -0
  32. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  33. data/lib/webrat/core/locators.rb +20 -0
  34. data/lib/webrat/core/logging.rb +23 -0
  35. data/lib/webrat/core/matchers/have_content.rb +68 -0
  36. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  37. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  38. data/lib/webrat/core/matchers/have_xpath.rb +122 -0
  39. data/lib/webrat/core/matchers.rb +4 -0
  40. data/lib/webrat/core/methods.rb +64 -0
  41. data/lib/webrat/core/mime.rb +18 -0
  42. data/lib/webrat/core/save_and_open_page.rb +48 -0
  43. data/lib/webrat/core/scope.rb +365 -0
  44. data/lib/webrat/core/session.rb +306 -0
  45. data/lib/webrat/core/xml.rb +72 -0
  46. data/lib/webrat/core.rb +13 -0
  47. data/lib/webrat/core_extensions/blank.rb +58 -0
  48. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  49. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  50. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  51. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  52. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  53. data/lib/webrat/integrations/merb.rb +10 -0
  54. data/lib/webrat/integrations/rails.rb +25 -0
  55. data/lib/webrat/integrations/rspec-rails.rb +10 -0
  56. data/lib/webrat/integrations/selenium.rb +11 -0
  57. data/lib/webrat/merb.rb +9 -0
  58. data/lib/webrat/rspec-rails.rb +2 -0
  59. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  60. data/lib/webrat/selenium/application_servers/base.rb +54 -0
  61. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  62. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  63. data/lib/webrat/selenium/application_servers/rails.rb +67 -0
  64. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  65. data/lib/webrat/selenium/application_servers.rb +5 -0
  66. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  67. data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -0
  68. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -0
  69. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -0
  70. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  71. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  72. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  73. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  74. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  75. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  76. data/lib/webrat/selenium/matchers.rb +4 -0
  77. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  78. data/lib/webrat/selenium/selenium_rc_server.rb +86 -0
  79. data/lib/webrat/selenium/selenium_session.rb +272 -0
  80. data/lib/webrat/selenium/silence_stream.rb +18 -0
  81. data/lib/webrat/selenium.rb +70 -0
  82. data/lib/webrat.rb +18 -0
  83. data/spec/fakes/test_adapter.rb +37 -0
  84. data/spec/integration/mechanize/Rakefile +7 -0
  85. data/spec/integration/mechanize/config.ru +2 -0
  86. data/spec/integration/mechanize/sample_app.rb +20 -0
  87. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
  88. data/spec/integration/mechanize/spec/spec_helper.rb +27 -0
  89. data/spec/integration/merb/.gitignore +21 -0
  90. data/spec/integration/merb/Rakefile +35 -0
  91. data/spec/integration/merb/app/controllers/application.rb +2 -0
  92. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  93. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  94. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  95. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  96. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  97. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  98. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  99. data/spec/integration/merb/config/environments/development.rb +15 -0
  100. data/spec/integration/merb/config/environments/rake.rb +11 -0
  101. data/spec/integration/merb/config/environments/test.rb +14 -0
  102. data/spec/integration/merb/config/init.rb +25 -0
  103. data/spec/integration/merb/config/rack.rb +11 -0
  104. data/spec/integration/merb/config/router.rb +34 -0
  105. data/spec/integration/merb/spec/spec.opts +1 -0
  106. data/spec/integration/merb/spec/spec_helper.rb +26 -0
  107. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  108. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  109. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  110. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  111. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  112. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  113. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  114. data/spec/integration/rack/Rakefile +5 -0
  115. data/spec/integration/rack/app.rb +89 -0
  116. data/spec/integration/rack/test/helper.rb +21 -0
  117. data/spec/integration/rack/test/webrat_rack_test.rb +73 -0
  118. data/spec/integration/rails/.gitignore +3 -0
  119. data/spec/integration/rails/Rakefile +30 -0
  120. data/spec/integration/rails/app/controllers/application.rb +15 -0
  121. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  122. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  123. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  124. data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -0
  125. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  126. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  127. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  128. data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  129. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  130. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  131. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  132. data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  133. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  134. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  135. data/spec/integration/rails/config/boot.rb +109 -0
  136. data/spec/integration/rails/config/environment.rb +12 -0
  137. data/spec/integration/rails/config/environments/development.rb +17 -0
  138. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  139. data/spec/integration/rails/config/environments/test.rb +22 -0
  140. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  141. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  142. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  143. data/spec/integration/rails/config/locales/en.yml +5 -0
  144. data/spec/integration/rails/config/routes.rb +19 -0
  145. data/spec/integration/rails/public/404.html +30 -0
  146. data/spec/integration/rails/public/422.html +30 -0
  147. data/spec/integration/rails/public/500.html +33 -0
  148. data/spec/integration/rails/script/about +4 -0
  149. data/spec/integration/rails/script/console +3 -0
  150. data/spec/integration/rails/script/dbconsole +3 -0
  151. data/spec/integration/rails/script/destroy +3 -0
  152. data/spec/integration/rails/script/generate +3 -0
  153. data/spec/integration/rails/script/performance/benchmarker +3 -0
  154. data/spec/integration/rails/script/performance/profiler +3 -0
  155. data/spec/integration/rails/script/performance/request +3 -0
  156. data/spec/integration/rails/script/plugin +3 -0
  157. data/spec/integration/rails/script/process/inspector +3 -0
  158. data/spec/integration/rails/script/process/reaper +3 -0
  159. data/spec/integration/rails/script/process/spawner +3 -0
  160. data/spec/integration/rails/script/runner +3 -0
  161. data/spec/integration/rails/script/server +3 -0
  162. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  163. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  164. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  165. data/spec/integration/rails/test/integration/webrat_test.rb +122 -0
  166. data/spec/integration/rails/test/test_helper.rb +26 -0
  167. data/spec/integration/sinatra/Rakefile +5 -0
  168. data/spec/integration/sinatra/classic_app.rb +64 -0
  169. data/spec/integration/sinatra/modular_app.rb +16 -0
  170. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  171. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  172. data/spec/integration/sinatra/test/test_helper.rb +17 -0
  173. data/spec/private/core/configuration_spec.rb +87 -0
  174. data/spec/private/core/field_spec.rb +85 -0
  175. data/spec/private/core/link_spec.rb +24 -0
  176. data/spec/private/core/session_spec.rb +200 -0
  177. data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -0
  178. data/spec/private/nokogiri_spec.rb +77 -0
  179. data/spec/private/rails/attaches_file_spec.rb +81 -0
  180. data/spec/private/rails/rails_adapter_spec.rb +86 -0
  181. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  182. data/spec/public/basic_auth_spec.rb +24 -0
  183. data/spec/public/check_spec.rb +191 -0
  184. data/spec/public/choose_spec.rb +118 -0
  185. data/spec/public/click_area_spec.rb +106 -0
  186. data/spec/public/click_button_spec.rb +494 -0
  187. data/spec/public/click_link_spec.rb +511 -0
  188. data/spec/public/fill_in_spec.rb +224 -0
  189. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  190. data/spec/public/locators/field_labeled_spec.rb +172 -0
  191. data/spec/public/locators/field_with_id_spec.rb +16 -0
  192. data/spec/public/matchers/contain_spec.rb +114 -0
  193. data/spec/public/matchers/have_selector_spec.rb +146 -0
  194. data/spec/public/matchers/have_tag_spec.rb +39 -0
  195. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  196. data/spec/public/reload_spec.rb +10 -0
  197. data/spec/public/save_and_open_spec.rb +70 -0
  198. data/spec/public/select_date_spec.rb +112 -0
  199. data/spec/public/select_datetime_spec.rb +137 -0
  200. data/spec/public/select_spec.rb +455 -0
  201. data/spec/public/select_time_spec.rb +100 -0
  202. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  203. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  204. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  205. data/spec/public/set_hidden_field_spec.rb +5 -0
  206. data/spec/public/submit_form_spec.rb +5 -0
  207. data/spec/public/visit_spec.rb +58 -0
  208. data/spec/public/within_spec.rb +177 -0
  209. data/spec/rcov.opts +1 -0
  210. data/spec/spec.opts +2 -0
  211. data/spec/spec_helper.rb +54 -0
  212. data/vendor/selenium-server.jar +0 -0
  213. metadata +409 -0
@@ -0,0 +1,81 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe "attach_file" do
4
+ before do
5
+ Webrat.configuration.mode = :rails
6
+ @filename = __FILE__
7
+ @uploaded_file = mock("uploaded file")
8
+ ActionController::TestUploadedFile.stub!(:new => @uploaded_file)
9
+ end
10
+
11
+ it "should fail if no file field found" do
12
+ with_html <<-HTML
13
+ <html>
14
+ <form method="post" action="/widgets">
15
+ </form>
16
+ </html>
17
+ HTML
18
+ lambda { attach_file("Doc", "/some/path") }.should raise_error(Webrat::NotFoundError)
19
+ end
20
+
21
+ it "should submit empty strings for blank file fields" do
22
+ with_html <<-HTML
23
+ <html>
24
+ <form method="post" action="/widgets">
25
+ <input type="file" id="widget_file" name="widget[file]" />
26
+ <input type="submit" />
27
+ </form>
28
+ </html>
29
+ HTML
30
+ webrat_session.should_receive(:post).with("/widgets", { "widget" => { "file" => "" } })
31
+ click_button
32
+ end
33
+
34
+ it "should submit the attached file" do
35
+ with_html <<-HTML
36
+ <html>
37
+ <form method="post" action="/widgets">
38
+ <label for="widget_file">Document</label>
39
+ <input type="file" id="widget_file" name="widget[file]" />
40
+ <input type="submit" />
41
+ </form>
42
+ </html>
43
+ HTML
44
+ webrat_session.should_receive(:post).with("/widgets", { "widget" => { "file" => @uploaded_file } })
45
+ attach_file "Document", @filename
46
+ click_button
47
+ end
48
+
49
+ it "should support collections" do
50
+ with_html <<-HTML
51
+ <html>
52
+ <form method="post" action="/widgets">
53
+ <label for="widget_file1">Document</label>
54
+ <input type="file" id="widget_file1" name="widget[files][]" />
55
+ <label for="widget_file2">Spreadsheet</label>
56
+ <input type="file" id="widget_file2" name="widget[files][]" />
57
+ <input type="submit" />
58
+ </form>
59
+ </html>
60
+ HTML
61
+ webrat_session.should_receive(:post).with("/widgets", { "widget" => { "files" => [@uploaded_file, @uploaded_file] } })
62
+ attach_file "Document", @filename
63
+ attach_file "Spreadsheet", @filename
64
+ click_button
65
+ end
66
+
67
+ it "should allow the content type to be specified" do
68
+ with_html <<-HTML
69
+ <html>
70
+ <form method="post" action="/widgets">
71
+ <label for="person_picture">Picture</label>
72
+ <input type="file" id="person_picture" name="person[picture]" />
73
+ <input type="submit" />
74
+ </form>
75
+ </html>
76
+ HTML
77
+ ActionController::TestUploadedFile.should_receive(:new).with(@filename, "image/png").any_number_of_times
78
+ attach_file "Picture", @filename, "image/png"
79
+ click_button
80
+ end
81
+ end
@@ -0,0 +1,86 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Webrat::RailsAdapter do
4
+ before :each do
5
+ Webrat.configuration.mode = :rails
6
+ @integration_session = mock("integration_session")
7
+ end
8
+
9
+ it "should delegate response_body to the session response body" do
10
+ @integration_session.stub!(:response => mock("response", :body => "<html>"))
11
+ Webrat::RailsAdapter.new(@integration_session).response_body.should == "<html>"
12
+ end
13
+
14
+ it "should delegate response_code to the session response code" do
15
+ @integration_session.stub!(:response => mock("response", :code => "42"))
16
+ Webrat::RailsAdapter.new(@integration_session).response_code.should == 42
17
+ end
18
+
19
+ it "should delegate get to the integration session" do
20
+ @integration_session.should_receive(:get).with("url", "data", "headers")
21
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
22
+ rails_session.get("url", "data", "headers")
23
+ end
24
+
25
+ it "should delegate post to the integration session" do
26
+ @integration_session.should_receive(:post).with("url", "data", "headers")
27
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
28
+ rails_session.post("url", "data", "headers")
29
+ end
30
+
31
+ it "should delegate put to the integration session" do
32
+ @integration_session.should_receive(:put).with("url", "data", "headers")
33
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
34
+ rails_session.put("url", "data", "headers")
35
+ end
36
+
37
+ it "should delegate delete to the integration session" do
38
+ @integration_session.should_receive(:delete).with("url", "data", "headers")
39
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
40
+ rails_session.delete("url", "data", "headers")
41
+ end
42
+
43
+ context "the URL is a full path" do
44
+ it "should pass the full url" do
45
+ @integration_session.stub!(:https!)
46
+ @integration_session.should_receive(:get).with("http://www.example.com/url", "data", "headers")
47
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
48
+ rails_session.get("http://www.example.com/url", "data", "headers")
49
+ end
50
+ end
51
+
52
+ context "the URL is https://" do
53
+ it "should call #https! with true before the request before passing along the full url" do
54
+ @integration_session.should_receive(:https!).with(true)
55
+ @integration_session.should_receive(:get).with("https://www.example.com/url", "data", "headers")
56
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
57
+ rails_session.get("https://www.example.com/url", "data", "headers")
58
+ end
59
+ end
60
+
61
+ context "the URL is http://" do
62
+ it "should call #https! with true before the request" do
63
+ @integration_session.stub!(:get)
64
+ @integration_session.should_receive(:https!).with(false)
65
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
66
+ rails_session.get("http://www.example.com/url", "data", "headers")
67
+ end
68
+ end
69
+
70
+ context "the URL include an anchor" do
71
+ it "should strip out the anchor" do
72
+ @integration_session.should_receive(:https!).with(false)
73
+ @integration_session.should_receive(:get).with("http://www.example.com/url", "data", "headers")
74
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
75
+ rails_session.get("http://www.example.com/url#foo", "data", "headers")
76
+ end
77
+ end
78
+
79
+ it "should provide a saved_page_dir" do
80
+ Webrat::RailsAdapter.new(mock("integration session")).should respond_to(:saved_page_dir)
81
+ end
82
+
83
+ it "should provide a doc_root" do
84
+ Webrat::RailsAdapter.new(mock("integration session")).should respond_to(:doc_root)
85
+ end
86
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper")
2
+ require "webrat/selenium/application_servers/rails"
3
+
4
+ RAILS_ROOT = "." unless defined?(RAILS_ROOT)
5
+
6
+ describe Webrat::Selenium::ApplicationServers::Rails do
7
+ include Webrat::Selenium::SilenceStream
8
+
9
+ before do
10
+ @server = Webrat::Selenium::ApplicationServers::Rails.new
11
+ # require "rubygems"; require "ruby-debug"; Debugger.start; debugger
12
+ @server.stub!(:system)
13
+ @server.stub!(:at_exit)
14
+ end
15
+
16
+ describe "boot" do
17
+ it "should wait for the server to start on 0.0.0.0" do
18
+ TCPSocket.should_receive(:wait_for_service_with_timeout).
19
+ with(hash_including(:host => "0.0.0.0"))
20
+
21
+ silence_stream(STDERR) do
22
+ @server.boot
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "Basic Auth HTTP headers" do
4
+ before do
5
+ basic_auth('user', 'secret')
6
+ end
7
+
8
+ it "should be present in visit" do
9
+ webrat_session.should_receive(:get).with("/", {}, {'HTTP_AUTHORIZATION' => "Basic dXNlcjpzZWNyZXQ=\n"})
10
+ visit("/")
11
+ end
12
+
13
+ it "should be present in form submits" do
14
+ with_html <<-HTML
15
+ <html>
16
+ <form method="post" action="/form1">
17
+ <input type="submit" />
18
+ </form>
19
+ </html>
20
+ HTML
21
+ webrat_session.should_receive(:post).with("/form1", {}, {'HTTP_AUTHORIZATION' => "Basic dXNlcjpzZWNyZXQ=\n"})
22
+ click_button
23
+ end
24
+ end
@@ -0,0 +1,191 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "check" do
4
+ it "should fail if no checkbox found" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <form method="post" action="/login">
8
+ </form>
9
+ </html>
10
+ HTML
11
+
12
+ lambda { check "remember_me" }.should raise_error(Webrat::NotFoundError)
13
+ end
14
+
15
+ it "should fail if input is not a checkbox" do
16
+ with_html <<-HTML
17
+ <html>
18
+ <form method="post" action="/login">
19
+ <input type="text" name="remember_me" />
20
+ </form>
21
+ </html>
22
+ HTML
23
+
24
+ lambda { check "remember_me" }.should raise_error(Webrat::NotFoundError)
25
+ end
26
+
27
+ it "should check rails style checkboxes" do
28
+ with_html <<-HTML
29
+ <html>
30
+ <form method="get" action="/login">
31
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" />
32
+ <input name="user[tos]" type="hidden" value="0" />
33
+ <label for="user_tos">TOS</label>
34
+ <input type="submit" />
35
+ </form>
36
+ </html>
37
+ HTML
38
+
39
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "1"})
40
+ check "TOS"
41
+ click_button
42
+ end
43
+
44
+ it "should result in the value on being posted if not specified" do
45
+ with_html <<-HTML
46
+ <html>
47
+ <form method="post" action="/login">
48
+ <input type="checkbox" name="remember_me" />
49
+ <input type="submit" />
50
+ </form>
51
+ </html>
52
+ HTML
53
+
54
+ webrat_session.should_receive(:post).with("/login", "remember_me" => "on")
55
+ check "remember_me"
56
+ click_button
57
+ end
58
+
59
+ it "should fail if the checkbox is disabled" do
60
+ with_html <<-HTML
61
+ <html>
62
+ <form method="post" action="/login">
63
+ <input type="checkbox" name="remember_me" disabled="disabled" />
64
+ <input type="submit" />
65
+ </form>
66
+ </html>
67
+ HTML
68
+
69
+ lambda { check "remember_me" }.should raise_error(Webrat::DisabledFieldError)
70
+ end
71
+
72
+ it "should result in a custom value being posted" do
73
+ with_html <<-HTML
74
+ <html>
75
+ <form method="post" action="/login">
76
+ <input type="checkbox" name="remember_me" value="yes" />
77
+ <input type="submit" />
78
+ </form>
79
+ </html>
80
+ HTML
81
+
82
+ webrat_session.should_receive(:post).with("/login", "remember_me" => "yes")
83
+ check "remember_me"
84
+ click_button
85
+ end
86
+ end
87
+
88
+ describe "uncheck" do
89
+ it "should fail if no checkbox found" do
90
+ with_html <<-HTML
91
+ <html>
92
+ <form method="post" action="/login">
93
+ </form>
94
+ </html>
95
+ HTML
96
+
97
+ lambda { uncheck "remember_me" }.should raise_error(Webrat::NotFoundError)
98
+ end
99
+
100
+ it "should fail if input is not a checkbox" do
101
+ with_html <<-HTML
102
+ <html>
103
+ <form method="post" action="/login">
104
+ <input type="text" name="remember_me" />
105
+ </form>
106
+ </html>
107
+ HTML
108
+
109
+ lambda { uncheck "remember_me" }.should raise_error(Webrat::NotFoundError)
110
+ end
111
+
112
+ it "should fail if the checkbox is disabled" do
113
+ with_html <<-HTML
114
+ <html>
115
+ <form method="post" action="/login">
116
+ <input type="checkbox" name="remember_me" checked="checked" disabled="disabled" />
117
+ <input type="submit" />
118
+ </form>
119
+ </html>
120
+ HTML
121
+ lambda { uncheck "remember_me" }.should raise_error(Webrat::DisabledFieldError)
122
+ end
123
+
124
+ it "should uncheck rails style checkboxes" do
125
+ with_html <<-HTML
126
+ <html>
127
+ <form method="get" action="/login">
128
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
129
+ <input name="user[tos]" type="hidden" value="0" />
130
+ <label for="user_tos">TOS</label>
131
+ <input type="submit" />
132
+ </form>
133
+ </html>
134
+ HTML
135
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"})
136
+ check "TOS"
137
+ uncheck "TOS"
138
+ click_button
139
+ end
140
+
141
+ it "should result in value not being posted" do
142
+ with_html <<-HTML
143
+ <html>
144
+ <form method="post" action="/login">
145
+ <input type="checkbox" name="remember_me" value="yes" checked="checked" />
146
+ <input type="submit" />
147
+ </form>
148
+ </html>
149
+ HTML
150
+ webrat_session.should_receive(:post).with("/login", {})
151
+ uncheck "remember_me"
152
+ click_button
153
+ end
154
+
155
+ it "should work with checkboxes with the same name" do
156
+ with_html <<-HTML
157
+ <html>
158
+ <form method="post" action="/login">
159
+ <input id="option_1" name="options[]" type="checkbox" value="1" />
160
+ <label for="option_1">Option 1</label>
161
+ <input id="option_2" name="options[]" type="checkbox" value="2" />
162
+ <label for="option_2">Option 2</label>
163
+ <input type="submit" />
164
+ </form>
165
+ </html>
166
+ HTML
167
+ webrat_session.should_receive(:post).with("/login", {"options" => ["1", "2"]})
168
+ check 'Option 1'
169
+ check 'Option 2'
170
+ click_button
171
+ end
172
+
173
+ it "should uncheck rails style checkboxes nested inside a label" do
174
+ with_html <<-HTML
175
+ <html>
176
+ <form method="get" action="/login">
177
+ <label>
178
+ TOS
179
+ <input name="user[tos]" type="hidden" value="0" />
180
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
181
+ </label>
182
+ <input type="submit" />
183
+ </form>
184
+ </html>
185
+ HTML
186
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"})
187
+ uncheck "TOS"
188
+ click_button
189
+ end
190
+
191
+ end
@@ -0,0 +1,118 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "choose" do
4
+ it "should fail if no radio buttons found" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <form method="post" action="/login">
8
+ </form>
9
+ </html>
10
+ HTML
11
+
12
+ lambda { choose "first option" }.should raise_error(Webrat::NotFoundError)
13
+ end
14
+
15
+ it "should fail if input is not a radio button" do
16
+ with_html <<-HTML
17
+ <html>
18
+ <form method="post" action="/login">
19
+ <input type="text" name="first_option" />
20
+ </form>
21
+ </html>
22
+ HTML
23
+
24
+ lambda { choose "first_option" }.should raise_error(Webrat::NotFoundError)
25
+ end
26
+
27
+ it "should check rails style radio buttons" do
28
+ with_html <<-HTML
29
+ <html>
30
+ <form method="get" action="/login">
31
+ <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
32
+ <label for="user_gender_male">Male</label>
33
+ <input id="user_gender_female" name="user[gender]" type="radio" value="F" />
34
+ <label for="user_gender_female">Female</label>
35
+ <input type="submit" />
36
+ </form>
37
+ </html>
38
+ HTML
39
+ webrat_session.should_receive(:get).with("/login", "user" => {"gender" => "M"})
40
+ choose "Male"
41
+ click_button
42
+ end
43
+
44
+ it "should only submit last chosen value" do
45
+ with_html <<-HTML
46
+ <html>
47
+ <form method="get" action="/login">
48
+ <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
49
+ <label for="user_gender_male">Male</label>
50
+ <input id="user_gender_female" name="user[gender]" type="radio" value="F" />
51
+ <label for="user_gender_female">Female</label>
52
+ <input type="submit" />
53
+ </form>
54
+ </html>
55
+ HTML
56
+ webrat_session.should_receive(:get).with("/login", "user" => {"gender" => "M"})
57
+ choose "Female"
58
+ choose "Male"
59
+ click_button
60
+ end
61
+
62
+ it "should fail if the radio button is disabled" do
63
+ with_html <<-HTML
64
+ <html>
65
+ <form method="post" action="/login">
66
+ <input type="radio" name="first_option" disabled="disabled" />
67
+ <input type="submit" />
68
+ </form>
69
+ </html>
70
+ HTML
71
+
72
+ lambda { choose "first_option" }.should raise_error(Webrat::DisabledFieldError)
73
+ end
74
+
75
+ it "should result in the value on being posted if not specified" do
76
+ with_html <<-HTML
77
+ <html>
78
+ <form method="post" action="/login">
79
+ <input type="radio" name="first_option" />
80
+ <input type="submit" />
81
+ </form>
82
+ </html>
83
+ HTML
84
+ webrat_session.should_receive(:post).with("/login", "first_option" => "on")
85
+ choose "first_option"
86
+ click_button
87
+ end
88
+
89
+ it "should result in the value on being posted if not specified and checked by default" do
90
+ with_html <<-HTML
91
+ <html>
92
+ <form method="post" action="/login">
93
+ <input type="radio" name="first_option" checked="checked"/>
94
+ <input type="submit" />
95
+ </form>
96
+ </html>
97
+ HTML
98
+ webrat_session.should_receive(:post).with("/login", "first_option" => "on")
99
+ click_button
100
+ end
101
+
102
+ it "should result in the value of the selected radio button being posted when a subsequent one is checked by default" do
103
+ with_html <<-HTML
104
+ <html>
105
+ <form method="post" action="/login">
106
+ <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
107
+ <label for="user_gender_male">Male</label>
108
+ <input id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
109
+ <label for="user_gender_female">Female</label>
110
+ <input type="submit" />
111
+ </form>
112
+ </html>
113
+ HTML
114
+ webrat_session.should_receive(:post).with("/login", "user" => {"gender" => "M"})
115
+ choose "Male"
116
+ click_button
117
+ end
118
+ end
@@ -0,0 +1,106 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "click_area" do
4
+ it "should use get by default" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <map name="map_de" id="map_de">
8
+ <area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
9
+ </map>
10
+ </html>
11
+ HTML
12
+ webrat_session.should_receive(:get).with("/page", {})
13
+ click_area "Berlin"
14
+ end
15
+
16
+ it "should assert valid response" do
17
+ with_html <<-HTML
18
+ <html>
19
+ <map name="map_de" id="map_de">
20
+ <area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
21
+ </map>
22
+ </html>
23
+ HTML
24
+ webrat_session.response_code = 501
25
+ lambda { click_area "Berlin" }.should raise_error(Webrat::PageLoadError)
26
+ end
27
+
28
+ [200, 300, 400, 499].each do |status|
29
+ it "should consider the #{status} status code as success" do
30
+ with_html <<-HTML
31
+ <html>
32
+ <map name="map_de" id="map_de">
33
+ <area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
34
+ </map>
35
+ </html>
36
+ HTML
37
+ webrat_session.stub!(:redirect? => false)
38
+ webrat_session.response_code = status
39
+ lambda { click_area "Berlin" }.should_not raise_error
40
+ end
41
+ end
42
+
43
+ it "should fail if the area doesn't exist" do
44
+ with_html <<-HTML
45
+ <html>
46
+ <map name="map_de" id="map_de">
47
+ <area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
48
+ </map>
49
+ </html>
50
+ HTML
51
+
52
+ lambda {
53
+ click_area "Missing area"
54
+ }.should raise_error(Webrat::NotFoundError)
55
+ end
56
+
57
+ it "should not be case sensitive" do
58
+ with_html <<-HTML
59
+ <html>
60
+ <map name="map_de" id="map_de">
61
+ <area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
62
+ </map>
63
+ </html>
64
+ HTML
65
+ webrat_session.should_receive(:get).with("/page", {})
66
+ click_area "berlin"
67
+ end
68
+
69
+
70
+ it "should follow relative links" do
71
+ webrat_session.stub!(:current_url => "/page")
72
+ with_html <<-HTML
73
+ <html>
74
+ <map name="map_de" id="map_de">
75
+ <area href="sub" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
76
+ </map>
77
+ </html>
78
+ HTML
79
+ webrat_session.should_receive(:get).with("/page/sub", {})
80
+ click_area "Berlin"
81
+ end
82
+
83
+ it "should follow fully qualified local links" do
84
+ with_html <<-HTML
85
+ <html>
86
+ <map name="map_de" id="map_de">
87
+ <area href="http://www.example.com/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
88
+ </map>
89
+ </html>
90
+ HTML
91
+ webrat_session.should_receive(:get).with("http://www.example.com/page", {})
92
+ click_area "Berlin"
93
+ end
94
+
95
+ it "should follow query parameters" do
96
+ with_html <<-HTML
97
+ <html>
98
+ <map name="map_de" id="map_de">
99
+ <area href="/page?foo=bar" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
100
+ </map>
101
+ </html>
102
+ HTML
103
+ webrat_session.should_receive(:get).with("/page?foo=bar", {})
104
+ click_area "Berlin"
105
+ end
106
+ end