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,58 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "visit" do
4
+ before do
5
+ with_html <<-HTML
6
+ <html>
7
+ Hello world
8
+ </html>
9
+ HTML
10
+ end
11
+
12
+ it "should use get" do
13
+ webrat_session.should_receive(:get).with("/", {})
14
+ visit("/")
15
+ end
16
+
17
+ it "should assert valid response" do
18
+ webrat_session.response_code = 501
19
+ lambda { visit("/") }.should raise_error(Webrat::PageLoadError)
20
+ end
21
+
22
+ [200, 300, 400, 499].each do |status|
23
+ it "should consider the #{status} status code as success" do
24
+ webrat_session.stub!(:redirect? => false)
25
+ webrat_session.response_code = status
26
+ lambda { visit("/") }.should_not raise_error
27
+ end
28
+ end
29
+
30
+ it "should require a visit before manipulating page" do
31
+ lambda { fill_in "foo", :with => "blah" }.should raise_error(Webrat::WebratError)
32
+ end
33
+
34
+ it "should not follow external redirects" do
35
+ webrat_session.should_receive(:internal_redirect?).and_return(false)
36
+
37
+ visit("/oldurl")
38
+
39
+ current_url.should == "/oldurl"
40
+ end
41
+ end
42
+
43
+ describe "visit with referer" do
44
+ before do
45
+ webrat_session.instance_variable_set(:@current_url, "/old_url")
46
+ with_html <<-HTML
47
+ <html>
48
+ Hello world
49
+ </html>
50
+ HTML
51
+ end
52
+
53
+ it "should use get with referer header" do
54
+ webrat_session.should_receive(:get).with("/", {}, {"HTTP_REFERER" => "/old_url"})
55
+ visit("/")
56
+ end
57
+
58
+ end
@@ -0,0 +1,177 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "within" do
4
+ it "should work when nested" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <div>
8
+ <a href="/page1">Link</a>
9
+ </div>
10
+ <div id="container">
11
+ <div><a href="/page2">Link</a></div>
12
+ </div>
13
+ </html>
14
+ HTML
15
+
16
+ webrat_session.should_receive(:get).with("/page2", {})
17
+ within "#container" do
18
+ within "div" do
19
+ click_link "Link"
20
+ end
21
+ end
22
+ end
23
+
24
+ it "should click links within a scope" do
25
+ with_html <<-HTML
26
+ <html>
27
+ <a href="/page1">Link</a>
28
+ <div id="container">
29
+ <a href="/page2">Link</a>
30
+ </div>
31
+ </html>
32
+ HTML
33
+
34
+ webrat_session.should_receive(:get).with("/page2", {})
35
+ within "#container" do
36
+ click_link "Link"
37
+ end
38
+ end
39
+
40
+ it "should submit forms within a scope" do
41
+ with_html <<-HTML
42
+ <html>
43
+ <form id="form1" action="/form1">
44
+ <label>Email: <input type="text" name="email" />
45
+ <input type="submit" value="Add" />
46
+ </form>
47
+ <form id="form2" action="/form2">
48
+ <label>Email: <input type="text" name="email" />
49
+ <input type="submit" value="Add" />
50
+ </form>
51
+ </html>
52
+ HTML
53
+
54
+ webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
55
+ within "#form2" do
56
+ fill_in "Email", :with => "test@example.com"
57
+ click_button
58
+ end
59
+ end
60
+
61
+ it "should work when the scope is inside the form" do
62
+ with_html <<-HTML
63
+ <html>
64
+ <form id="form2" action="/form2">
65
+ <div class="important">
66
+ <label>Email: <input type="text" class="email2" name="email" /></label>
67
+ </div>
68
+ <input type="submit" value="Add" />
69
+ </form>
70
+ </html>
71
+ HTML
72
+
73
+ webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
74
+ within ".important" do
75
+ fill_in "Email", :with => "test@example.com"
76
+ end
77
+
78
+ submit_form "form2"
79
+ end
80
+
81
+ it "should work when the form submission occurs inside a scope" do
82
+ with_html <<-HTML
83
+ <html>
84
+ <body>
85
+ <div>
86
+ <form id="form2" action="/form2">
87
+ <label for="email">Email</label><input id="email" type="text" class="email2" name="email" />
88
+ <input type="submit" value="Add" />
89
+ </form>
90
+ </div>
91
+ </body>
92
+ </html>
93
+ HTML
94
+
95
+ webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
96
+ within "form[@action='/form2']" do
97
+ fill_in "Email", :with => "test@example.com"
98
+ click_button "Add"
99
+ end
100
+ end
101
+
102
+ it "should work when there are multiple forms with the same label text" do
103
+ with_html <<-HTML
104
+ <html>
105
+ <body>
106
+ <div>
107
+ <form id="form1" action="/form1">
108
+ <label for="email1">Email</label><input id="email1" type="text" class="email1" name="email1" />
109
+ <input type="submit" value="Add" />
110
+ </form>
111
+ <form id="form2" action="/form2">
112
+ <label for="email2">Email</label><input id="email2" type="text" class="email2" name="email2" />
113
+ <input type="submit" value="Add" />
114
+ </form>
115
+ </div>
116
+ </body>
117
+ </html>
118
+ HTML
119
+
120
+ webrat_session.should_receive(:get).with("/form2", "email2" => "test@example.com")
121
+ within "form[@action='/form2']" do
122
+ fill_in "Email", :with => "test@example.com"
123
+ click_button "Add"
124
+ end
125
+ end
126
+
127
+ it "should not find fields outside of the scope" do
128
+ with_html <<-HTML
129
+ <html>
130
+ <form id="form1" action="/form1">
131
+ <label for="email">Email</label><input id="email" type="text" name="email" />
132
+ <input type="submit" value="Add" />
133
+ </form>
134
+ <form id="form2" action="/form2">
135
+ <label for="email">Email</label><input id="email" type="text" name="email" />
136
+ <input type="submit" value="Add" />
137
+ </form>
138
+ </html>
139
+ HTML
140
+
141
+ webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
142
+ within "#form2" do
143
+ fill_in "Email", :with => "test@example.com"
144
+ click_button "Add"
145
+ end
146
+ end
147
+
148
+ it "should not find buttons outside of the scope" do
149
+ with_html <<-HTML
150
+ <html>
151
+ <form action="/form1">
152
+ <input type="submit" value="Add" />
153
+ </form>
154
+ <form id="form2" action="/form2">
155
+ </form>
156
+ </html>
157
+ HTML
158
+
159
+ within "#form2" do
160
+ lambda {
161
+ click_button
162
+ }.should raise_error(Webrat::NotFoundError)
163
+ end
164
+ end
165
+
166
+ it "should raise a Webrat::NotFounderror error when the scope doesn't exist" do
167
+ with_html <<-HTML
168
+ <html>
169
+ </html>
170
+ HTML
171
+
172
+ lambda {
173
+ within "#form2" do
174
+ end
175
+ }.should raise_error(Webrat::NotFoundError)
176
+ end
177
+ end
data/spec/rcov.opts ADDED
@@ -0,0 +1 @@
1
+ -x gems,spec
data/spec/spec.opts ADDED
@@ -0,0 +1,2 @@
1
+ --diff
2
+ --color
@@ -0,0 +1,54 @@
1
+ require "rubygems"
2
+ require "test/unit"
3
+ require "spec"
4
+
5
+ # gem install redgreen for colored test output
6
+ begin require "redgreen" unless ENV['TM_CURRENT_LINE']; rescue LoadError; end
7
+
8
+ webrat_path = File.expand_path(File.dirname(__FILE__) + "/../lib/")
9
+ $LOAD_PATH.unshift(webrat_path) unless $LOAD_PATH.include?(webrat_path)
10
+
11
+ AssertionFailedError = Test::Unit::AssertionFailedError rescue MiniTest::Assertion # ruby1.9 compat
12
+
13
+ require "webrat"
14
+ require File.expand_path(File.dirname(__FILE__) + "/fakes/test_adapter")
15
+
16
+ module Webrat
17
+ @@previous_config = nil
18
+
19
+ def self.cache_config_for_test
20
+ @@previous_config = Webrat.configuration.clone
21
+ end
22
+
23
+ def self.reset_for_test
24
+ @@configuration = @@previous_config if @@previous_config
25
+ end
26
+ end
27
+
28
+ Spec::Runner.configure do |config|
29
+ include Webrat::Methods
30
+
31
+ def with_html(html)
32
+ raise "This doesn't look like HTML. Wrap it in a <html> tag" unless html =~ /^\s*<[^Hh>]*html/i
33
+ webrat_session.response_body = html
34
+ end
35
+
36
+ def with_xml(xml)
37
+ raise "This looks like HTML" if xml =~ /^\s*<[^Hh>]*html/i
38
+ webrat_session.response_body = xml
39
+ end
40
+
41
+ config.before :each do
42
+ Webrat.cache_config_for_test
43
+ end
44
+
45
+ config.after :each do
46
+ Webrat.reset_for_test
47
+ end
48
+ end
49
+
50
+ require "merb-core"
51
+
52
+ Webrat.configure do |config|
53
+ config.mode = :merb
54
+ end
Binary file