futuresinc-webrat 0.4.4.99

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 (76) hide show
  1. data/History.txt +333 -0
  2. data/MIT-LICENSE.txt +19 -0
  3. data/README.rdoc +85 -0
  4. data/Rakefile +156 -0
  5. data/install.rb +1 -0
  6. data/lib/webrat/core/configuration.rb +98 -0
  7. data/lib/webrat/core/elements/area.rb +31 -0
  8. data/lib/webrat/core/elements/element.rb +33 -0
  9. data/lib/webrat/core/elements/field.rb +403 -0
  10. data/lib/webrat/core/elements/form.rb +103 -0
  11. data/lib/webrat/core/elements/label.rb +31 -0
  12. data/lib/webrat/core/elements/link.rb +92 -0
  13. data/lib/webrat/core/elements/select_option.rb +35 -0
  14. data/lib/webrat/core/locators/area_locator.rb +38 -0
  15. data/lib/webrat/core/locators/button_locator.rb +54 -0
  16. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  17. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  18. data/lib/webrat/core/locators/field_locator.rb +25 -0
  19. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  20. data/lib/webrat/core/locators/form_locator.rb +19 -0
  21. data/lib/webrat/core/locators/label_locator.rb +34 -0
  22. data/lib/webrat/core/locators/link_locator.rb +66 -0
  23. data/lib/webrat/core/locators/locator.rb +20 -0
  24. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  25. data/lib/webrat/core/locators.rb +20 -0
  26. data/lib/webrat/core/logging.rb +21 -0
  27. data/lib/webrat/core/matchers/have_content.rb +73 -0
  28. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  29. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  30. data/lib/webrat/core/matchers/have_xpath.rb +147 -0
  31. data/lib/webrat/core/matchers.rb +4 -0
  32. data/lib/webrat/core/methods.rb +61 -0
  33. data/lib/webrat/core/mime.rb +29 -0
  34. data/lib/webrat/core/save_and_open_page.rb +50 -0
  35. data/lib/webrat/core/scope.rb +350 -0
  36. data/lib/webrat/core/session.rb +281 -0
  37. data/lib/webrat/core/xml/hpricot.rb +19 -0
  38. data/lib/webrat/core/xml/nokogiri.rb +76 -0
  39. data/lib/webrat/core/xml/rexml.rb +24 -0
  40. data/lib/webrat/core/xml.rb +115 -0
  41. data/lib/webrat/core.rb +14 -0
  42. data/lib/webrat/core_extensions/blank.rb +58 -0
  43. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  44. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  45. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  46. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  47. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  48. data/lib/webrat/mechanize.rb +74 -0
  49. data/lib/webrat/merb.rb +9 -0
  50. data/lib/webrat/merb_session.rb +65 -0
  51. data/lib/webrat/rack.rb +24 -0
  52. data/lib/webrat/rails.rb +105 -0
  53. data/lib/webrat/rspec-rails.rb +13 -0
  54. data/lib/webrat/selenium/application_server.rb +71 -0
  55. data/lib/webrat/selenium/location_strategy_javascript/button.js +12 -0
  56. data/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
  57. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  58. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +9 -0
  59. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  60. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  61. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  62. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  63. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  64. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  65. data/lib/webrat/selenium/matchers.rb +4 -0
  66. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  67. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  68. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  69. data/lib/webrat/selenium/selenium_rc_server.rb +80 -0
  70. data/lib/webrat/selenium/selenium_session.rb +241 -0
  71. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  72. data/lib/webrat/selenium.rb +80 -0
  73. data/lib/webrat/sinatra.rb +44 -0
  74. data/lib/webrat.rb +34 -0
  75. data/vendor/selenium-server.jar +0 -0
  76. metadata +147 -0
data/History.txt ADDED
@@ -0,0 +1,333 @@
1
+ == 0.4.5 / ?
2
+
3
+ * Minor enhancements
4
+
5
+ * Added support for field_labeled_locators ending in non word characters
6
+ lh 148 (Zach Dennis)
7
+ * Filled in tests on click link lh 195 (diabolo)
8
+
9
+ == 0.4.4 / 2009-04-06
10
+
11
+ * Major enhancements
12
+
13
+ * Make selenium process management code more robust and informative
14
+
15
+ * Minor enhancements
16
+
17
+ * Add support for Rails javascript post links (Mark Menard)
18
+ * Upgrade selenium-client dependency to 1.2.14, and update for new waiting
19
+ API (Balint Erdi)
20
+ * Change default app environment from "selenium" to "test"
21
+
22
+ * Bug fixes
23
+
24
+ * Don't create a new instance of WWW::Mechanize for each request
25
+ (Mark Menard)
26
+ * Select fields with duplicate selected options sent an incorrect value (Noah Davis)
27
+
28
+ == 0.4.3 / 2009-03-17
29
+
30
+ * Minor enhancements
31
+
32
+ * Support Rails 2.3. Use Rack::Utils to parse params (Matthew Ford)
33
+ * Support for "modular" Sinatra app style (Simon Rozet)
34
+ * Initial Merb and Sinatra compatibility for Selenium mode (Corey Donohoe)
35
+ * When faced with a label with no for attribute, that contains a hidden field
36
+ and another field, as can be the case in Rails 2.3's checkbox view,
37
+ webrat now locates the non-hidden field. (Luke Melia)
38
+ * Add application_framework config for Selenium mode to determine how to
39
+ start and stop the app server (Corey Donohoe)
40
+
41
+ * Bug fixes
42
+
43
+ * Fix following of absolute redirect URL in Sinatra (Simon Rozet)
44
+
45
+ == 0.4.2 / 2009-02-24
46
+
47
+ * Major enhancements
48
+
49
+ * Significant improvements to have_selector. It now supports specifying
50
+ attributes in a hash and :count and :content options. See
51
+ have_selector_spec.rb for more.
52
+ * Add the same functionality mentioned above to have_xpath
53
+
54
+ * Minor enhancements
55
+
56
+ * Squeeze extra whitespace out of failures messages from contain
57
+ matcher
58
+ * Detect infinite redirects and raise a Webrat::InfiniteRedirectError
59
+ (Daniel Lucraft)
60
+
61
+ * Bug fixes
62
+
63
+ * Properly quote single and double quotes strings in XPath
64
+ * Fix warning caused by Nokogiri deprecating CSS::Parser.parse
65
+ (Aaron Patterson)
66
+ * Accept do/end blocks in matchers. [#157] (Peter Jaros)
67
+ * Quote --chdir option to mongrel_rails to support RAILS_ROOTs with spaces
68
+ (T.J. VanSlyke)
69
+
70
+ == 0.4.1 / 2009-01-31
71
+
72
+ * Minor enhancements
73
+
74
+ * Support Sinatra 0.9 (Harry Vangberg)
75
+ * Update query param parsing to work with latest Edge Rails
76
+ * Added #redirected_to method to easily check where an external redirect was
77
+ redirected to (Adam Greene)
78
+ * Recognize input tags with type button (Lena Herrmann)
79
+ * Add uncheck method to Selenium mode (Lee Bankewitz)
80
+
81
+ * Bug fixes
82
+
83
+ * Make requests to a Rails app using a full URL instead of a relative path. This change
84
+ is helpful for Rails apps that use subdomains. (John Hwang and Zach Dennis)
85
+ * Follow redirects that are on the same domain but a different subdomain
86
+ (Adam Greene)
87
+ * rescue from Webrat::TimeoutError in selenium matchers which allows NegativeMatchers
88
+ to behave correctly (Noah Davis)
89
+ * Switch to using selenium.click instead of .check when checking a checkbox
90
+ (Noah Davis)
91
+ * Create tmp/pids directory if directory does not exist. (Amos King and Mike Gaffney)
92
+ * Setup deprecated writers for the selenium_environment= and selenium_port= config
93
+ * Ensure the previous pages params aren't passed through redirect (Daniel Lucraft and
94
+ Bryan Helmkamp)
95
+ * Labels should only search for fields within the current scope (Kyle Hargraves)
96
+
97
+ == 0.4.0 / 2009-01-18
98
+
99
+ * _IMPORTANT_ Breaking change:
100
+
101
+ * Removed init.rb auto-require of webrat/rails
102
+ * Removed auto-require of webrat/rails when requiring webrat when RAILS_ENV is
103
+ defined
104
+
105
+ In your env.rb or test_helper.rb file, ensure you have something like:
106
+
107
+ require "webrat"
108
+
109
+ Webrat.configure do |config|
110
+ config.mode = :rails
111
+ end
112
+
113
+ * Major enhancements
114
+
115
+ * Major improvements to Webrat::Selenium (Many contributors listed here)
116
+ * Add assert_* methods for using Webrat's matchers w/o RSpec (Mike Gaffney, Amos King)
117
+ * Added Webrat.configure method for Webrat configuration [#33] (Mike Gaffney)
118
+ * Added select_time, select_date, and select_datetime to API. [#36] (Ben Mabey)
119
+ * Use Hpricot and REXML when not parsing with Nokogiri (on JRuby, for example)
120
+
121
+ * Minor enhancements
122
+
123
+ * Added Selenium grid configuration and support. (Amos King && Cornel Borcean)
124
+ * Support passing an ActiveRecord model to #within when in Rails mode [#68] (Luke Melia)
125
+ * Make assert_* matchers in rails mode increment the assertions count [#123] (Amos King)
126
+ * Added assert_* matchers to selenium matchers [#110] (Amos King)
127
+ * Added assert_contain, assert_not_contain [#86] (Mike Gaffney, Amos King)
128
+ * Add configuration options for the Selenium environment and port (Kieran Pilkington)
129
+ * Maximize the browser window after initializing Selenium (Luke Melia)
130
+ * Better inspect output for Webrat elements
131
+ * Sets the Webrat mode with Configuration#mode= in the config block [#85] (Mike Gaffney)
132
+ * Detect if the document is XML or HTML using the Content-Type when in Rails mode
133
+ * Expose #selenium method for direct access to Selenium client
134
+ * Check nokogiri gem version before requiring nokogiri
135
+ * Include the Selenium server jar file in the gem (Bryan Helmkamp, Ben Schwarz)
136
+ * Added key_down, key_up and fire_event to Selenium session (Fernando Garcia)
137
+ * Fix outputing README during Rails plugin install (Fernando Garcia)
138
+ * Strip newlines when matching label text (Miha Filej)
139
+ * Add simple support for accessing Webrat's matchers from RSpec by requiring
140
+ "webrat/rspec-rails" (David Chelimsky)
141
+ * Support save_and_open_page in Windows and Cygwin (Mike Gaffney)
142
+ * Added RadioField#checked? to indicated whether or not a radio button is checked
143
+ (Luke Melia)
144
+ * Add spec:jruby rake task for running Webrat's spec suite with JRuby
145
+ * Added field_by_xpath to locate a Webrat::Field using arbitrary XPath expressions
146
+ * Helpful error message for missing option values [#40] (Ben Mabey)
147
+ * Add set_hidden_field method (Noah Davis, Bryan Helmkamp)
148
+ * Add submit_form method for submitting a form by ID (Noah Davis, Bryan Helmkamp)
149
+ * Switch to using Nokogiri.parse for simple XML/XHTML autodetection [#66]
150
+ * Removed Webrat.root method, which seemed to be unused
151
+ * Added automatic starting and stopping of the Selenium server and a Mongrel Rails
152
+ app server when using webrat/selenium
153
+ * Switch to using selenium-client gem and vendor selenium-server.jar (Luke Melia)
154
+ * Added gemspec so the gem builds on GitHub now
155
+ * Deprecate old style methods (fills_in is deprecated in favor of fill_in, etc.)
156
+ * Improvements to the README and RDoc (Bryan Helmkamp, Mike Gaffney)
157
+ * Allow clicking links by id and id regexp (Mike Gaffney)
158
+ * Raise Webrat::DisabledFieldError when attempting to manipulate a disabled field
159
+ * Raise Webrat::NotFoundErrors when an element is not found
160
+ * Raise Webrat::PageLoadError when a failure occurs so that application exceptions
161
+ can be more accurately tested (Ryan Briones)
162
+ * Helpful error message for missing option in select box. [#40] (Ben Mabey)
163
+ * Extracted save_and_open page to make it usable in Selenium mode (Luke Melia)
164
+ * Added save_and_open_screengrab for Selenium mode (Luke Melia)
165
+
166
+ * Bug fixes
167
+
168
+ * field_labeled should disregard labels without matching fields (Kyle Hargraves)
169
+ * Fixed bug where Scope was creating a new DOM rather than re-using the existing DOM.
170
+ [#105] (Zach Dennis)
171
+ * Support Rails > v2.2 by using ActionController::RequestParser for param parsing [#107]
172
+ (Marcello Nuccio)
173
+ * Raise a Webrat::NotFoundError if the scope passed to #within doesn't exist [#90]
174
+ * Match against link _text_ which decodes character references.
175
+ Useful for multibyte languages like Japanese (moronatural@gmail.com)
176
+ * Fix params hash generation for Mechanize when Merb is not defined [#62]
177
+ * Expose some Webrat methods that were missing from the Webrat::Methods module
178
+ (Low Chin Chau)
179
+ * Allow mechanize session to pass through basic auth (Ryan Briones)
180
+ * Improvements to the Mechanize support (Jeremy Burks)
181
+ * Fix following fully qualified local links (Lawrence Pit)
182
+ * Fixed bug where Webrat would lose complex parameters (like foo[bar[baz]][])
183
+ in Merb due to not correctly merging Mashes. (Drew Colthorp)
184
+ * Extend Rails' ActionController::IntegrationTest instead of
185
+ ActionController::Integration::Session (Fixes using Webrat's #select method and
186
+ avoids usage of method_missing)
187
+ * Ensure that Webrat::MechanizeSession.request_page always uses an absolute
188
+ URL. (Graham Ashton)
189
+ * Strip anchor tags from URIs before passing to Rails integration session
190
+ (Noah Davis)
191
+ * Treat text and regexp when matching Selenium buttons (Ross Kaffenberger)
192
+ * Allow SeleniumSession's click_button to be called without an argument without
193
+ blowing up (Luke Melia)
194
+
195
+ == 0.3.4 / 2008-12-29
196
+
197
+ * 1 Minor enhancement
198
+
199
+ * Fix compatibility with Nokogiri 1.1.0 on JRuby
200
+
201
+ * 1 Bug fix
202
+
203
+ * Correct version for Nokogiri dependency in gem
204
+
205
+ == 0.3.3 / 2008-12-28
206
+
207
+ * 1 Minor enhancement
208
+
209
+ * Fix compatibility with Nokogiri 1.1.0 on MRI
210
+
211
+ == 0.3.2 / 2008-11-08
212
+
213
+ * 1 Minor enhancement
214
+
215
+ * Fixes behavior or have_tag when a block is passed. It passes the matched node(s)
216
+ to the block for further specs again. (Carl Lerche)
217
+
218
+ == 0.3.1 / 2008-11-07
219
+
220
+ * 1 Minor enhancement
221
+
222
+ * Use @_webrat_session instance variable instead of @session for Merb integration
223
+ to avoid collisions
224
+
225
+ == 0.3.0 / 2008-11-07
226
+
227
+ * 4 Major enhancements
228
+
229
+ * Added Merb support (Gwyn Morfey, Jeremy Burks, Rob Kaufman, Yehuda Katz)
230
+ * Added experimental Selenium support (Luke Melia)
231
+ * Add have_selector, have_xpath, have_tag and contain matchers from Merb
232
+ * Switch from Hpricot to Nokogiri for XML parsing (thanks, Aaron Patterson)
233
+
234
+ * 37 Minor enhancements
235
+
236
+ * Added #within for manipulating the current page within a selector scope
237
+ * Add support for file fields via #attaches_file method (Rails only at the moment)
238
+ (Kyle Hargraves)
239
+ * Add support for simulating SSL requests (Luke Melia)
240
+ * Added #basic_auth(user, pass) to support HTTP Basic Auth (Aslak Hellesøy)
241
+ * Added support for Sinatra and Rack (Aslak Hellesøy)
242
+ * Rename visits to visit, fills_in to fill_in, etc.
243
+ * Add #field_labeled for looking up form fields by label (David Chelimsky)
244
+ * Add #field_named and #field_with_id locators
245
+ * Don't depend on hoe anymore
246
+ * Return responses after sending requests
247
+ * Allow clicking links and buttons by a regular expression in Selenium (Luke Melia)
248
+ * Allow clicking links by a regular expression
249
+ * Add #http_accept for including MIME type HTTP "Accept" headers (Ryan Briones)
250
+ * Add #header to support inclusion of custom HTTP headers (Ryan Briones)
251
+ * Consider response codes 200-499 as successful enough to not raise a Webrat error
252
+ (David Leal)
253
+ * Add support for clicking areas of an image map (Alex Lang)
254
+ * Support relative links, including href="?foo=bar" (Kyle Hargraves)
255
+ * Separated Rails-specific code from the Webrat core to make it easier to use
256
+ Webrat with other environments
257
+ * Alias visits as visit, clicks_link as click_link, etc. for better readability
258
+ * Raise error when trying to interact with a disabled form element (Luke Melia)
259
+ * Don't send disabled form elements to the server (Nicholas A. Evans)
260
+ * Display response body when the page load is not successful (David Leal)
261
+ * CGI escape form field values (Miha Filej)
262
+ * Add support for redirect_to :back by sending HTTP_REFERER headers
263
+ (Hendrik Volkmer)
264
+ * Expose current DOM (as an Hpricot object) as #current_dom
265
+ * Add support for disabling JavaScript when clicking a link to enable testing of
266
+ both JS and non-JS implementations (Luke Melia and Bryan Helmkamp)
267
+ * Support &nbsp's as spaces in matching link text (Luke Melia)
268
+ * Support button elements (Nick Sieger)
269
+ * Support matching select options by regexp (Kyle Hargraves)
270
+ * save_and_open_page rewrites css and image references to provide a friendlier
271
+ debugging experience (Luke Melia)
272
+ * Added support for matching alt attributes in fields (primarly for clicks_button)
273
+ (Aaron Quint)
274
+ * Support '&' in submitted values (Kyle Hargraves)
275
+ * Support clicking links by title (Dan Barry)
276
+ * Added missing spec for clicking image buttons (Tim Harper)
277
+ * Switched tests to specs, and from Mocha to RSpec's mocking library
278
+ * Add support to click_button for IDs (Gwyn Morfey)
279
+ * Miscellaneous core refactorings (Jan Suchal)
280
+
281
+ * 8 Bug fixes
282
+
283
+ * Fix initialization of WWW::Mechanize (Derek Kastner)
284
+ * Don't open blank pages in the browser (Kyle Hargraves)
285
+ * Support radio buttons with multiple labels (Dan Barry)
286
+ * Fix load order bug on some platforms (Ismael Celis)
287
+ * Fix bug with empty select list option (Kyle Hargraves)
288
+ * Fix regression of not sending default values in password fields
289
+ * Don't explode if encountering inputs with no type attribute (assume text)
290
+ * Fix bug where choosing a radio button in a series with a default submitted the
291
+ incorrect field value (Luke Melia)
292
+
293
+ == 0.2.0 / 2008-04-04
294
+
295
+ * 4 Major enhancements
296
+
297
+ * Add save_and_open_page to aid in debugging
298
+ * Add radio button support via #chooses method
299
+ * Add basic support for Rails-generated JavaScript link tags
300
+ * Add support for checkboxes (Patches from Kyle Hargraves and Jarkko Laine)
301
+ * Add support for textarea fields (Sacha Schlegel)
302
+
303
+ * 8 Minor enhancements
304
+
305
+ * Added reloads method to reload the page (Kamal Fariz Mahyuddi)
306
+ * Prevent making a request if clicking on local anchor link (Kamal Fariz Mahyuddi)
307
+ * Added clicks_link_within(selector, link_text), allowing restricting link search
308
+ to within a given css selector (Luke Melia)
309
+ * Allow specifying the input name/label when doing a select (David Chelimsky)
310
+ * Raise a specific exception if the developer tries to manipulate form elements
311
+ before loading a page (James Deville)
312
+ * Add support for alternate POST, PUT and DELETE link clicking (Kyle Hargraves)
313
+ * Change clicks_link to find the shortest matching link (Luke Melia)
314
+ * Improve matching for labels in potentially ambiguous cases
315
+
316
+ * 7 Bug fixes
317
+
318
+ * Fix incorrect serializing of collection inputs, i.e. name contains []
319
+ (Kamal Fariz Mahyuddi)
320
+ * Serialize empty text field values just like browsers (Kamal Fariz Mahyuddi)
321
+ * Quick fix to avoid @dom not initialized warnings (Kamal Fariz Mahyuddi)
322
+ * Docfix: bad reference to #select method in README (Luke Melia)
323
+ * Ensure Rails-style checkboxes work properly (checkboxes followed by a hidden
324
+ input with the same name)
325
+ * Fix Edge Rails (a.k.a. 2.0 RC) compatibility (David Chelimsky)
326
+ * Support param hashes nested more than one level (David Chelimsky)
327
+
328
+ == 0.1.0 / 2007-11-28
329
+
330
+ * 1 major enhancement
331
+
332
+ * Birthday!
333
+
data/MIT-LICENSE.txt ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2007 Bryan Helmkamp, Seth Fitzsimmons
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,85 @@
1
+ = Webrat - Ruby Acceptance Testing for Web applications
2
+
3
+ - http://gitrdoc.com/brynary/webrat
4
+ - http://groups.google.com/group/webrat
5
+ - http://webrat.lighthouseapp.com/
6
+ - http://github.com/brynary/webrat
7
+ - #webrat on Freenode
8
+
9
+ == Description
10
+
11
+ Webrat lets you quickly write expressive and robust acceptance tests for a Ruby
12
+ web application.
13
+
14
+ == Features
15
+
16
+ * Browser Simulator for expressive, high level acceptance testing without the
17
+ performance hit and browser dependency of Selenium or Watir (See Webrat::Session)
18
+ * Use the same API for Browser Simulator and real Selenium tests using
19
+ Webrat::Selenium when necessary (eg. for testing AJAX interactions)
20
+ * Supports multiple Ruby web frameworks: Rails, Merb and Sinatra
21
+ * Supports popular test frameworks: RSpec, Cucumber, Test::Unit and Shoulda
22
+ * Webrat::Matchers API for verifying rendered HTML using CSS, XPath, etc.
23
+
24
+ == Example
25
+
26
+ class SignupTest < ActionController::IntegrationTest
27
+
28
+ def test_trial_account_sign_up
29
+ visit home_path
30
+ click_link "Sign up"
31
+ fill_in "Email", :with => "good@example.com"
32
+ select "Free account"
33
+ click_button "Register"
34
+ end
35
+
36
+ end
37
+
38
+ Behind the scenes, Webrat will ensure:
39
+
40
+ * If a link, form field or button is missing, the test will fail.
41
+ * If a URL is invalid, the test will fail.
42
+ * If a page load or form submission is unsuccessful, the test will fail.
43
+
44
+ == Installing Nokogiri
45
+
46
+ Users of Debian Linux (e.g. Ubuntu) need to run:
47
+
48
+ sudo apt-get install libxslt1-dev libxml2-dev.
49
+
50
+ Otherwise the Nokogiri gem, which Webrat depends on, won't install properly.
51
+
52
+ == Install for Rails
53
+
54
+ To install the latest release as a gem:
55
+
56
+ sudo gem install webrat
57
+
58
+ To install the latest code as a plugin: (_Note:_ This may be less stable than using a released version)
59
+
60
+ script/plugin install git://github.com/brynary/webrat.git
61
+
62
+ In your test_helper.rb or env.rb (for Cucumber) add:
63
+
64
+ require "webrat"
65
+
66
+ Webrat.configure do |config|
67
+ config.mode = :rails
68
+ end
69
+
70
+ == Install with Merb
71
+
72
+ Merb 1.0 has built-in, seamless Webrat support. Just start using
73
+ methods from Webrat::Session in your specs.
74
+
75
+ == Authors
76
+
77
+ - Maintained by {Bryan Helmkamp}[mailto:bryan@brynary.com]
78
+ - Original code written by {Seth Fitzsimmons}[mailto:seth@mojodna.net]
79
+ - Initial development was sponsored by EastMedia[http://www.eastmedia.com]
80
+ - Many other contributors. See attributions in History.txt
81
+
82
+ == License
83
+
84
+ Copyright (c) 2007-2008 Bryan Helmkamp, Seth Fitzsimmons.
85
+ See MIT-LICENSE.txt in this directory.
data/Rakefile ADDED
@@ -0,0 +1,156 @@
1
+ # require 'rubygems'
2
+ require "rake/gempackagetask"
3
+ require 'rake/rdoctask'
4
+ require "rake/clean"
5
+ require 'spec'
6
+ require 'spec/rake/spectask'
7
+ require 'spec/rake/verify_rcov'
8
+ require File.expand_path('./lib/webrat.rb')
9
+
10
+ ##############################################################################
11
+ # Package && release
12
+ ##############################################################################
13
+ spec = Gem::Specification.new do |s|
14
+ s.name = "webrat"
15
+ s.version = Webrat::VERSION
16
+ s.platform = Gem::Platform::RUBY
17
+ s.author = "Bryan Helmkamp"
18
+ s.email = "bryan" + "@" + "brynary.com"
19
+ s.homepage = "http://github.com/brynary/webrat"
20
+ s.summary = "Webrat. Ruby Acceptance Testing for Web applications"
21
+ s.bindir = "bin"
22
+ s.description = s.summary
23
+ s.require_path = "lib"
24
+ s.files = %w(History.txt install.rb MIT-LICENSE.txt README.rdoc Rakefile) + Dir["lib/**/*"] + Dir["vendor/**/*"]
25
+
26
+ # rdoc
27
+ s.has_rdoc = true
28
+ s.extra_rdoc_files = %w(README.rdoc MIT-LICENSE.txt)
29
+
30
+ # Dependencies
31
+ s.add_dependency "nokogiri", ">= 1.2.0"
32
+
33
+ s.rubyforge_project = "webrat"
34
+ end
35
+
36
+ Rake::GemPackageTask.new(spec) do |package|
37
+ package.gem_spec = spec
38
+ end
39
+
40
+ desc 'Show information about the gem.'
41
+ task :debug_gem do
42
+ puts spec.to_ruby
43
+ end
44
+
45
+ CLEAN.include ["pkg", "*.gem", "doc", "ri", "coverage"]
46
+
47
+ desc "Upload rdoc to brynary.com"
48
+ task :publish_rdoc => :docs do
49
+ sh "scp -r doc/ brynary.com:/apps/uploads/webrat"
50
+ end
51
+
52
+ desc "Run API and Core specs"
53
+ Spec::Rake::SpecTask.new do |t|
54
+ t.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
55
+ t.spec_files = FileList['spec/public/**/*_spec.rb'] + FileList['spec/private/**/*_spec.rb']
56
+ end
57
+
58
+ desc "Run all specs in spec directory with RCov"
59
+ Spec::Rake::SpecTask.new(:rcov) do |t|
60
+ t.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
61
+ t.spec_files = FileList['spec/public/**/*_spec.rb'] + FileList['spec/private/**/*_spec.rb']
62
+ t.rcov = true
63
+ t.rcov_opts = lambda do
64
+ IO.readlines(File.dirname(__FILE__) + "/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
65
+ end
66
+ end
67
+
68
+ RCov::VerifyTask.new(:verify_rcov => :rcov) do |t|
69
+ t.threshold = 96.2 # Make sure you have rcov 0.7 or higher!
70
+ end
71
+
72
+ desc 'Install the package as a gem.'
73
+ task :install_gem => [:clean, :package] do
74
+ gem_filename = Dir['pkg/*.gem'].first
75
+ sh "sudo gem install --no-rdoc --no-ri --local #{gem_filename}"
76
+ end
77
+
78
+ desc "Delete generated RDoc"
79
+ task :clobber_docs do
80
+ FileUtils.rm_rf("doc")
81
+ end
82
+
83
+ desc "Generate RDoc"
84
+ task :docs => :clobber_docs do
85
+ system "hanna --title 'Webrat #{Webrat::VERSION} API Documentation'"
86
+ end
87
+
88
+ desc "Run specs using jruby"
89
+ task "spec:jruby" do
90
+ result = system "jruby -S rake spec"
91
+ raise "JRuby tests failed" unless result
92
+ end
93
+
94
+ desc "Run each spec in isolation to test for dependency issues"
95
+ task :spec_deps do
96
+ Dir["spec/**/*_spec.rb"].each do |test|
97
+ if !system("spec #{test} &> /dev/null")
98
+ puts "Dependency Issues: #{test}"
99
+ end
100
+ end
101
+ end
102
+
103
+ task :prepare do
104
+ system "ln -s ../../../../.. ./spec/integration/rails/vendor/plugins/webrat"
105
+ end
106
+
107
+ namespace :spec do
108
+ desc "Run the integration specs"
109
+ task :integration => ["integration:rails", "integration:merb", "integration:sinatra"]
110
+
111
+ namespace :integration do
112
+ desc "Run the Rails integration specs"
113
+ task :rails => ['rails:webrat'] #,'rails:selenium'] currently not running selenium as it doesn't pass.
114
+
115
+ namespace :rails do
116
+ task :selenium do
117
+ Dir.chdir "spec/integration/rails" do
118
+ result = system "rake test_unit:selenium"
119
+ raise "Rails integration tests failed" unless result
120
+ end
121
+ end
122
+
123
+ task :webrat do
124
+ Dir.chdir "spec/integration/rails" do
125
+ result = system "rake test_unit:rails"
126
+ raise "Rails integration tests failed" unless result
127
+ end
128
+ end
129
+ end
130
+
131
+ desc "Run the Merb integration specs"
132
+ task :merb do
133
+ Dir.chdir "spec/integration/merb" do
134
+ result = system "rake spec"
135
+ raise "Merb integration tests failed" unless result
136
+ end
137
+ end
138
+
139
+ desc "Run the Sinatra integration specs"
140
+ task :sinatra do
141
+ Dir.chdir "spec/integration/sinatra" do
142
+ result = system "rake test"
143
+ raise "Sinatra tntegration tests failed" unless result
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ task :default => :spec
150
+
151
+ task :precommit => ["spec", "spec:jruby", "spec:integration"]
152
+
153
+ desc 'Removes trailing whitespace'
154
+ task :whitespace do
155
+ sh %{find . -name '*.rb' -exec sed -i '' 's/ *$//g' {} \\;}
156
+ end
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ puts IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
@@ -0,0 +1,98 @@
1
+ require "webrat/core_extensions/deprecate"
2
+
3
+ module Webrat
4
+
5
+ # Configures Webrat. If this is not done, Webrat will be created
6
+ # with all of the default settings.
7
+ def self.configure(configuration = Webrat.configuration)
8
+ yield configuration if block_given?
9
+ @@configuration = configuration
10
+ end
11
+
12
+ def self.configuration # :nodoc:
13
+ @@configuration ||= Webrat::Configuration.new
14
+ end
15
+
16
+ # Webrat can be configured using the Webrat.configure method. For example:
17
+ #
18
+ # Webrat.configure do |config|
19
+ # config.parse_with_nokogiri = false
20
+ # end
21
+ class Configuration
22
+
23
+ # Should XHTML be parsed with Nokogiri? Defaults to true, except on JRuby. When false, Hpricot and REXML are used
24
+ attr_writer :parse_with_nokogiri
25
+
26
+ # Webrat's mode, set automatically when requiring webrat/rails, webrat/merb, etc.
27
+ attr_reader :mode # :nodoc:
28
+
29
+ # Save and open pages with error status codes (500-599) in a browser? Defualts to true.
30
+ attr_writer :open_error_files
31
+
32
+ # Which rails environment should the selenium tests be run in? Defaults to selenium.
33
+ attr_accessor :application_environment
34
+ webrat_deprecate :selenium_environment, :application_environment
35
+ webrat_deprecate :selenium_environment=, :application_environment=
36
+
37
+ # Which port is the application running on for selenium testing? Defaults to 3001.
38
+ attr_accessor :application_port
39
+ webrat_deprecate :selenium_port, :application_port
40
+ webrat_deprecate :selenium_port=, :application_port=
41
+
42
+ # Which underlying app framework we're testing with selenium
43
+ attr_accessor :application_framework
44
+
45
+ # Which server the application is running on for selenium testing? Defaults to localhost
46
+ attr_accessor :application_address
47
+
48
+ # Which server Selenium server is running on. Defaults to nil(server starts in webrat process and runs locally)
49
+ attr_accessor :selenium_server_address
50
+
51
+ # Which server Selenium port is running on. Defaults to 4444
52
+ attr_accessor :selenium_server_port
53
+
54
+ # Set the key that Selenium uses to determine the browser running. Default *firefox
55
+ attr_accessor :selenium_browser_key
56
+
57
+ # How many redirects to the same URL should be halted as an infinite redirect
58
+ # loop? Defaults to 10
59
+ attr_accessor :infinite_redirect_limit
60
+
61
+ def initialize # :nodoc:
62
+ self.open_error_files = true
63
+ self.parse_with_nokogiri = !Webrat.on_java?
64
+ self.application_environment = :test
65
+ self.application_port = 3001
66
+ self.application_address = 'localhost'
67
+ self.application_framework = :rails
68
+ self.selenium_server_port = 4444
69
+ self.infinite_redirect_limit = 10
70
+ self.selenium_browser_key = '*firefox'
71
+ end
72
+
73
+ def parse_with_nokogiri? #:nodoc:
74
+ @parse_with_nokogiri ? true : false
75
+ end
76
+
77
+ def open_error_files? #:nodoc:
78
+ @open_error_files ? true : false
79
+ end
80
+
81
+ # Allows setting of webrat's mode, valid modes are:
82
+ # :rails, :selenium, :rack, :sinatra, :mechanize, :merb
83
+ def mode=(mode)
84
+ @mode = mode.to_sym
85
+
86
+ # This is a temporary hack to support backwards compatibility
87
+ # with Merb 1.0.8 until it's updated to use the new Webrat.configure
88
+ # syntax
89
+ if @mode == :merb
90
+ require("webrat/merb_session")
91
+ else
92
+ require("webrat/#{mode}")
93
+ end
94
+ end
95
+
96
+ end
97
+
98
+ end