revo-webrat 0.7.0

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 (215) hide show
  1. data/.document +4 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +19 -0
  4. data/History.txt +437 -0
  5. data/MIT-LICENSE.txt +19 -0
  6. data/README.rdoc +85 -0
  7. data/Rakefile +145 -0
  8. data/Thorfile +118 -0
  9. data/install.rb +1 -0
  10. data/lib/webrat.rb +18 -0
  11. data/lib/webrat/adapters/mechanize.rb +78 -0
  12. data/lib/webrat/adapters/merb.rb +11 -0
  13. data/lib/webrat/adapters/rack.rb +25 -0
  14. data/lib/webrat/adapters/rails.rb +73 -0
  15. data/lib/webrat/adapters/sinatra.rb +9 -0
  16. data/lib/webrat/core.rb +13 -0
  17. data/lib/webrat/core/configuration.rb +106 -0
  18. data/lib/webrat/core/elements/area.rb +31 -0
  19. data/lib/webrat/core/elements/element.rb +33 -0
  20. data/lib/webrat/core/elements/field.rb +487 -0
  21. data/lib/webrat/core/elements/form.rb +103 -0
  22. data/lib/webrat/core/elements/label.rb +31 -0
  23. data/lib/webrat/core/elements/link.rb +93 -0
  24. data/lib/webrat/core/elements/select_option.rb +48 -0
  25. data/lib/webrat/core/locators.rb +20 -0
  26. data/lib/webrat/core/locators/area_locator.rb +38 -0
  27. data/lib/webrat/core/locators/button_locator.rb +54 -0
  28. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  29. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  30. data/lib/webrat/core/locators/field_locator.rb +25 -0
  31. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  32. data/lib/webrat/core/locators/form_locator.rb +19 -0
  33. data/lib/webrat/core/locators/label_locator.rb +34 -0
  34. data/lib/webrat/core/locators/link_locator.rb +74 -0
  35. data/lib/webrat/core/locators/locator.rb +20 -0
  36. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  37. data/lib/webrat/core/logging.rb +23 -0
  38. data/lib/webrat/core/matchers.rb +4 -0
  39. data/lib/webrat/core/matchers/have_content.rb +68 -0
  40. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  41. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  42. data/lib/webrat/core/matchers/have_xpath.rb +122 -0
  43. data/lib/webrat/core/methods.rb +64 -0
  44. data/lib/webrat/core/mime.rb +18 -0
  45. data/lib/webrat/core/save_and_open_page.rb +28 -0
  46. data/lib/webrat/core/scope.rb +365 -0
  47. data/lib/webrat/core/session.rb +302 -0
  48. data/lib/webrat/core/xml.rb +76 -0
  49. data/lib/webrat/core_extensions/blank.rb +58 -0
  50. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  51. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  52. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  53. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  54. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  55. data/lib/webrat/integrations/merb.rb +10 -0
  56. data/lib/webrat/integrations/rails.rb +25 -0
  57. data/lib/webrat/integrations/rspec-rails.rb +11 -0
  58. data/lib/webrat/integrations/selenium.rb +11 -0
  59. data/lib/webrat/merb.rb +9 -0
  60. data/lib/webrat/rspec-rails.rb +2 -0
  61. data/lib/webrat/selenium.rb +70 -0
  62. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  63. data/lib/webrat/selenium/application_servers.rb +5 -0
  64. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  65. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  66. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  67. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  68. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  69. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  70. data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -0
  71. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -0
  72. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -0
  73. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  74. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  75. data/lib/webrat/selenium/matchers.rb +4 -0
  76. data/lib/webrat/selenium/matchers/have_content.rb +78 -0
  77. data/lib/webrat/selenium/matchers/have_selector.rb +57 -0
  78. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  79. data/lib/webrat/selenium/matchers/have_xpath.rb +53 -0
  80. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  81. data/lib/webrat/selenium/selenium_rc_server.rb +86 -0
  82. data/lib/webrat/selenium/selenium_session.rb +267 -0
  83. data/lib/webrat/selenium/silence_stream.rb +18 -0
  84. data/revo-webrat.gemspec +351 -0
  85. data/spec/fakes/test_adapter.rb +33 -0
  86. data/spec/integration/mechanize/Rakefile +7 -0
  87. data/spec/integration/mechanize/config.ru +2 -0
  88. data/spec/integration/mechanize/sample_app.rb +20 -0
  89. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
  90. data/spec/integration/mechanize/spec/spec_helper.rb +29 -0
  91. data/spec/integration/merb/.gitignore +21 -0
  92. data/spec/integration/merb/Rakefile +35 -0
  93. data/spec/integration/merb/app/controllers/application.rb +2 -0
  94. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  95. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  96. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  97. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  98. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  99. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  100. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  101. data/spec/integration/merb/config/environments/development.rb +15 -0
  102. data/spec/integration/merb/config/environments/rake.rb +11 -0
  103. data/spec/integration/merb/config/environments/test.rb +14 -0
  104. data/spec/integration/merb/config/init.rb +25 -0
  105. data/spec/integration/merb/config/rack.rb +11 -0
  106. data/spec/integration/merb/config/router.rb +34 -0
  107. data/spec/integration/merb/spec/spec.opts +1 -0
  108. data/spec/integration/merb/spec/spec_helper.rb +26 -0
  109. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  110. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  111. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  112. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  113. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  114. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  115. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  116. data/spec/integration/rack/Rakefile +5 -0
  117. data/spec/integration/rack/app.rb +89 -0
  118. data/spec/integration/rack/test/helper.rb +21 -0
  119. data/spec/integration/rack/test/webrat_rack_test.rb +73 -0
  120. data/spec/integration/rails/.gitignore +3 -0
  121. data/spec/integration/rails/Rakefile +30 -0
  122. data/spec/integration/rails/app/controllers/application_controller.rb +15 -0
  123. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  124. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  125. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  126. data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -0
  127. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  128. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  129. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  130. data/spec/integration/rails/app/views/buttons/show.html.erb +9 -0
  131. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  132. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  133. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  134. data/spec/integration/rails/app/views/webrat/buttons.html.erb +9 -0
  135. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  136. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  137. data/spec/integration/rails/config/boot.rb +109 -0
  138. data/spec/integration/rails/config/environment.rb +12 -0
  139. data/spec/integration/rails/config/environments/development.rb +17 -0
  140. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  141. data/spec/integration/rails/config/environments/test.rb +22 -0
  142. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  143. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  144. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  145. data/spec/integration/rails/config/locales/en.yml +5 -0
  146. data/spec/integration/rails/config/routes.rb +19 -0
  147. data/spec/integration/rails/public/404.html +30 -0
  148. data/spec/integration/rails/public/422.html +30 -0
  149. data/spec/integration/rails/public/500.html +33 -0
  150. data/spec/integration/rails/script/about +4 -0
  151. data/spec/integration/rails/script/console +3 -0
  152. data/spec/integration/rails/script/dbconsole +3 -0
  153. data/spec/integration/rails/script/destroy +3 -0
  154. data/spec/integration/rails/script/generate +3 -0
  155. data/spec/integration/rails/script/performance/benchmarker +3 -0
  156. data/spec/integration/rails/script/performance/profiler +3 -0
  157. data/spec/integration/rails/script/performance/request +3 -0
  158. data/spec/integration/rails/script/plugin +3 -0
  159. data/spec/integration/rails/script/process/inspector +3 -0
  160. data/spec/integration/rails/script/process/reaper +3 -0
  161. data/spec/integration/rails/script/process/spawner +3 -0
  162. data/spec/integration/rails/script/runner +3 -0
  163. data/spec/integration/rails/script/server +3 -0
  164. data/spec/integration/rails/test/integration/button_click_test.rb +66 -0
  165. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  166. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  167. data/spec/integration/rails/test/integration/webrat_test.rb +123 -0
  168. data/spec/integration/rails/test/test_helper.rb +27 -0
  169. data/spec/integration/sinatra/Rakefile +5 -0
  170. data/spec/integration/sinatra/classic_app.rb +64 -0
  171. data/spec/integration/sinatra/modular_app.rb +16 -0
  172. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  173. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  174. data/spec/integration/sinatra/test/test_helper.rb +17 -0
  175. data/spec/private/core/configuration_spec.rb +87 -0
  176. data/spec/private/core/field_spec.rb +83 -0
  177. data/spec/private/core/link_spec.rb +24 -0
  178. data/spec/private/core/session_spec.rb +195 -0
  179. data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -0
  180. data/spec/private/nokogiri_spec.rb +77 -0
  181. data/spec/private/rails/attaches_file_spec.rb +81 -0
  182. data/spec/private/rails/rails_adapter_spec.rb +79 -0
  183. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  184. data/spec/public/basic_auth_spec.rb +35 -0
  185. data/spec/public/check_spec.rb +191 -0
  186. data/spec/public/choose_spec.rb +118 -0
  187. data/spec/public/click_area_spec.rb +106 -0
  188. data/spec/public/click_button_spec.rb +494 -0
  189. data/spec/public/click_link_spec.rb +532 -0
  190. data/spec/public/fill_in_spec.rb +224 -0
  191. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  192. data/spec/public/locators/field_labeled_spec.rb +172 -0
  193. data/spec/public/locators/field_with_id_spec.rb +16 -0
  194. data/spec/public/matchers/contain_spec.rb +107 -0
  195. data/spec/public/matchers/have_selector_spec.rb +146 -0
  196. data/spec/public/matchers/have_tag_spec.rb +39 -0
  197. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  198. data/spec/public/reload_spec.rb +10 -0
  199. data/spec/public/save_and_open_spec.rb +49 -0
  200. data/spec/public/select_date_spec.rb +112 -0
  201. data/spec/public/select_datetime_spec.rb +137 -0
  202. data/spec/public/select_spec.rb +455 -0
  203. data/spec/public/select_time_spec.rb +100 -0
  204. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  205. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  206. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  207. data/spec/public/set_hidden_field_spec.rb +5 -0
  208. data/spec/public/submit_form_spec.rb +5 -0
  209. data/spec/public/visit_spec.rb +58 -0
  210. data/spec/public/within_spec.rb +177 -0
  211. data/spec/rcov.opts +1 -0
  212. data/spec/spec.opts +2 -0
  213. data/spec/spec_helper.rb +54 -0
  214. data/vendor/selenium-server.jar +0 -0
  215. metadata +392 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/console'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/dbconsole'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/destroy'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/generate'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/benchmarker'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/profiler'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/request'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/plugin'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/inspector'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/reaper'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/spawner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/runner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/server'
@@ -0,0 +1,66 @@
1
+ require 'test_helper'
2
+
3
+ class ButtonClickTest < ActionController::IntegrationTest
4
+ # <button type="submit" ...>
5
+ test "should click button with type submit by id" do
6
+ visit buttons_path
7
+ click_button "button_submit_id"
8
+ assert_contain "success"
9
+ end
10
+ test "should click button with type submit by value" do
11
+ visit buttons_path
12
+ click_button "button_submit_value"
13
+ assert_contain "success"
14
+ end
15
+ test "should click button with type submit by html" do
16
+ visit buttons_path
17
+ click_button "button_submit_text"
18
+ assert_contain "success"
19
+ end
20
+
21
+ # <button type="image" ...>
22
+ test "should click button with type image by id" do
23
+ visit buttons_path
24
+ click_button "button_image_id"
25
+ assert_contain "success"
26
+ end
27
+ test "should click button with type image by value" do
28
+ visit buttons_path
29
+ click_button "button_image_value"
30
+ assert_contain "success"
31
+ end
32
+ test "should click button with type image by html" do
33
+ visit buttons_path
34
+ click_button "button_image_text"
35
+ assert_contain "success"
36
+ end
37
+
38
+ # <input type="submit" ...>
39
+ test "should click input with type submit by id" do
40
+ visit buttons_path
41
+ click_button "input_submit_id"
42
+ assert_contain "success"
43
+ end
44
+ test "should click input with type submit by value" do
45
+ visit buttons_path
46
+ click_button "input_submit_value"
47
+ assert_contain "success"
48
+ end
49
+
50
+ # <input type="image" ...>
51
+ test "should click input with type image by id" do
52
+ visit buttons_path
53
+ click_button "input_image_id"
54
+ assert_contain "success"
55
+ end
56
+ test "should click input with type image by value" do
57
+ visit buttons_path
58
+ click_button "input_image_value"
59
+ assert_contain "success"
60
+ end
61
+ test "should click input with type image by alt" do
62
+ visit buttons_path
63
+ click_button "input_image_alt"
64
+ assert_contain "success"
65
+ end
66
+ end
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ class FillInTest < ActionController::IntegrationTest
4
+ test "should fill in text field by name" do
5
+ visit fields_path
6
+ fill_in "field_by_name", :with => "value"
7
+ end
8
+ test "should fill in text field by name, rails naming lh257" do
9
+ visit fields_path
10
+ fill_in "rails[naming]", :with => "value"
11
+ end
12
+ test "should fill in text field by id" do
13
+ visit fields_path
14
+ fill_in "field_by_id", :with => "value"
15
+ end
16
+ test "should fill in text field by label via id" do
17
+ visit fields_path
18
+ fill_in "FieldByLabelId", :with => "value"
19
+ end
20
+ test "should fill in text field by label with special characters" do
21
+ visit fields_path
22
+ fill_in "[Field]:", :with => "value"
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class LinkClickTest < ActionController::IntegrationTest
4
+ test "should click link by text" do
5
+ visit links_path
6
+ click_link "LinkByText"
7
+ assert_contain("Link:LinkByText")
8
+ end
9
+
10
+ test "should click link by id" do
11
+ visit links_path
12
+ click_link "link_by_id"
13
+ assert_contain("Link:link_by_id")
14
+ end
15
+
16
+ test "should click link by title" do
17
+ visit links_path
18
+ click_link "LinkByTitle"
19
+ assert_contain("Link:LinkByTitle")
20
+ end
21
+
22
+ test "should be able to click links with non letter characters" do
23
+ visit links_path
24
+ click_link "Link With (parens)"
25
+ assert_contain("Link:link_with_parens")
26
+ end
27
+ end
@@ -0,0 +1,123 @@
1
+ require 'test_helper'
2
+
3
+ class WebratTest < ActionController::IntegrationTest
4
+
5
+ #Firefox raises a security concern under Selenium
6
+ unless ENV['WEBRAT_INTEGRATION_MODE'] == 'selenium'
7
+ test "should visit fully qualified urls" do
8
+ visit root_url(:host => "chunkybacon.example.com")
9
+ assert_equal "chunkybacon", request.subdomains.first
10
+ end
11
+ end
12
+
13
+ test "should visit pages" do
14
+ visit root_path
15
+ assert_contain("Webrat Form")
16
+ assert URI.parse(current_url).path, root_path
17
+ end
18
+
19
+ test "should submit forms" do
20
+ visit root_path
21
+ fill_in "Text field", :with => "Hello"
22
+ check "TOS"
23
+ select "January"
24
+ click_button "Test"
25
+ assert_contain "OK"
26
+ end
27
+
28
+ test "should check the value of a field" do
29
+ webrat.simulate do
30
+ visit "/"
31
+ assert field_labeled("Prefilled").value, "text"
32
+ end
33
+ end
34
+
35
+ test "should not carry params through redirects" do
36
+ visit before_redirect_form_path
37
+ fill_in "Text field", :with => "value"
38
+ click_button
39
+
40
+ automate do
41
+ selenium.wait_for_page_to_load
42
+ end
43
+ assert response.body !~ /value/
44
+ assert response.body =~ /custom_param/
45
+ end
46
+
47
+ test "should follow internal redirects" do
48
+ visit internal_redirect_path
49
+ webrat.simulate do
50
+ assert !response.redirect?
51
+ end
52
+ assert response.body.include?("OK")
53
+ end
54
+
55
+ test "should not follow external redirects" do
56
+ webrat.simulate do
57
+ visit external_redirect_path
58
+ assert response.redirect?
59
+ end
60
+ end
61
+
62
+ test "should recognize the host header to follow redirects properly" do
63
+ webrat.simulate do
64
+ header "Host", "foo.bar"
65
+ visit host_redirect_path
66
+ assert !response.redirect?
67
+ assert response.body.include?("OK")
68
+ end
69
+ end
70
+
71
+ test "should click link by text" do
72
+ visit internal_redirect_path
73
+ click_link "Test Link Text"
74
+ assert_contain("Webrat Form")
75
+ end
76
+
77
+ test "should click link by id" do
78
+ visit internal_redirect_path
79
+ click_link "link_id"
80
+ assert_contain("Webrat Form")
81
+ end
82
+
83
+ test "should be able to assert xpath" do
84
+ visit root_path
85
+ assert_have_xpath "//h1"
86
+ end
87
+
88
+ test "should be able to assert selector" do
89
+ visit root_path
90
+ assert_have_selector "h1"
91
+ end
92
+
93
+ test "should accept an Object argument to #within and translate using dom_id" do
94
+ webrat.simulate do
95
+ visit within_path
96
+
97
+ object = Object.new
98
+ def object.id
99
+ nil
100
+ end
101
+
102
+ within(object) do
103
+ click_link "Edit Object"
104
+ end
105
+
106
+ assert_contain "Webrat Form"
107
+ end
108
+ end
109
+
110
+ # Firefox detects and prevents infinite redirects under Selenium
111
+ unless ENV['WEBRAT_INTEGRATION_MODE'] == 'selenium'
112
+ test "should detect infinite redirects" do
113
+ assert_raises Webrat::InfiniteRedirectError do
114
+ visit infinite_redirect_path
115
+ end
116
+ end
117
+ end
118
+
119
+ # test "should be able to assert have tag" do
120
+ # visit root_path
121
+ # assert_have_tag "h1"
122
+ # end
123
+ end
@@ -0,0 +1,27 @@
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
+ $LOAD_PATH.unshift File.dirname(__FILE__) + "/../../../../lib"
11
+ require "webrat"
12
+
13
+ Webrat.configure do |config|
14
+ config.mode = ENV['WEBRAT_INTEGRATION_MODE'].to_sym
15
+ config.selenium_browser_key = '*safari'
16
+ end
17
+
18
+ ActionController::Base.class_eval do
19
+ def perform_action
20
+ perform_action_without_rescue
21
+ end
22
+ end
23
+ Dispatcher.class_eval do
24
+ def self.failsafe_response(output, status, exception = nil)
25
+ raise exception
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ require "rake/testtask"
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.test_files = FileList["test/*_test.rb"]
5
+ 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