webrat 0.5.3 → 0.6.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 (87) hide show
  1. data/.gitignore +4 -1
  2. data/Gemfile +19 -0
  3. data/History.txt +29 -0
  4. data/Rakefile +27 -63
  5. data/Thorfile +117 -0
  6. data/lib/webrat.rb +11 -3
  7. data/lib/webrat/{mechanize.rb → adapters/mechanize.rb} +0 -0
  8. data/lib/webrat/adapters/merb.rb +11 -0
  9. data/lib/webrat/{rack.rb → adapters/rack.rb} +0 -0
  10. data/lib/webrat/{rails.rb → adapters/rails.rb} +2 -23
  11. data/lib/webrat/{sinatra.rb → adapters/sinatra.rb} +0 -2
  12. data/lib/webrat/core.rb +0 -1
  13. data/lib/webrat/core/configuration.rb +6 -16
  14. data/lib/webrat/core/elements/area.rb +2 -2
  15. data/lib/webrat/core/elements/element.rb +3 -3
  16. data/lib/webrat/core/elements/field.rb +106 -30
  17. data/lib/webrat/core/elements/form.rb +4 -4
  18. data/lib/webrat/core/elements/label.rb +4 -4
  19. data/lib/webrat/core/elements/link.rb +6 -6
  20. data/lib/webrat/core/elements/select_option.rb +15 -2
  21. data/lib/webrat/core/locators.rb +1 -1
  22. data/lib/webrat/core/locators/area_locator.rb +3 -3
  23. data/lib/webrat/core/locators/button_locator.rb +6 -6
  24. data/lib/webrat/core/locators/field_by_id_locator.rb +3 -3
  25. data/lib/webrat/core/locators/field_labeled_locator.rb +2 -2
  26. data/lib/webrat/core/locators/field_named_locator.rb +3 -3
  27. data/lib/webrat/core/locators/form_locator.rb +1 -1
  28. data/lib/webrat/core/locators/label_locator.rb +2 -2
  29. data/lib/webrat/core/locators/link_locator.rb +7 -7
  30. data/lib/webrat/core/locators/select_option_locator.rb +5 -5
  31. data/lib/webrat/core/logging.rb +4 -5
  32. data/lib/webrat/core/matchers/have_content.rb +2 -7
  33. data/lib/webrat/core/matchers/have_xpath.rb +3 -28
  34. data/lib/webrat/core/methods.rb +1 -0
  35. data/lib/webrat/core/scope.rb +17 -2
  36. data/lib/webrat/core/session.rb +2 -1
  37. data/lib/webrat/core/xml.rb +41 -84
  38. data/lib/webrat/integrations/merb.rb +10 -0
  39. data/lib/webrat/integrations/rails.rb +25 -0
  40. data/lib/webrat/integrations/rspec-rails.rb +11 -0
  41. data/lib/webrat/integrations/selenium.rb +11 -0
  42. data/lib/webrat/rspec-rails.rb +2 -10
  43. data/lib/webrat/selenium.rb +0 -10
  44. data/lib/webrat/selenium/application_servers.rb +1 -1
  45. data/lib/webrat/selenium/application_servers/external.rb +1 -1
  46. data/lib/webrat/selenium/location_strategy_javascript/label.js +29 -3
  47. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +1 -0
  48. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +24 -4
  49. data/lib/webrat/selenium/selenium_rc_server.rb +2 -2
  50. data/lib/webrat/selenium/selenium_session.rb +21 -2
  51. data/lib/webrat/selenium/silence_stream.rb +1 -1
  52. data/spec/integration/mechanize/spec/spec_helper.rb +3 -1
  53. data/spec/integration/rails/app/controllers/{application.rb → application_controller.rb} +0 -0
  54. data/spec/integration/rails/app/controllers/webrat_controller.rb +3 -0
  55. data/spec/integration/rails/app/views/buttons/show.html.erb +0 -2
  56. data/spec/integration/rails/app/views/webrat/buttons.html.erb +0 -2
  57. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  58. data/spec/integration/rails/config/environment.rb +1 -1
  59. data/spec/integration/rails/config/routes.rb +1 -0
  60. data/spec/integration/rails/test/integration/button_click_test.rb +12 -26
  61. data/spec/integration/rails/test/integration/fill_in_test.rb +1 -1
  62. data/spec/integration/rails/test/integration/link_click_test.rb +1 -1
  63. data/spec/integration/rails/test/integration/webrat_test.rb +35 -9
  64. data/spec/integration/rails/test/test_helper.rb +1 -0
  65. data/spec/private/core/configuration_spec.rb +2 -31
  66. data/spec/private/core/field_spec.rb +14 -16
  67. data/spec/private/mechanize/mechanize_adapter_spec.rb +0 -2
  68. data/spec/private/nokogiri_spec.rb +2 -2
  69. data/spec/private/rails/rails_adapter_spec.rb +0 -27
  70. data/spec/public/basic_auth_spec.rb +13 -2
  71. data/spec/public/click_button_spec.rb +10 -12
  72. data/spec/public/click_link_spec.rb +21 -0
  73. data/spec/public/fill_in_spec.rb +15 -0
  74. data/spec/public/matchers/have_selector_spec.rb +4 -0
  75. data/spec/public/select_spec.rb +232 -26
  76. data/spec/spec_helper.rb +2 -0
  77. data/webrat.gemspec +305 -313
  78. metadata +21 -25
  79. data/VERSION +0 -1
  80. data/lib/webrat/core/xml/hpricot.rb +0 -19
  81. data/lib/webrat/core/xml/nokogiri.rb +0 -76
  82. data/lib/webrat/core/xml/rexml.rb +0 -24
  83. data/lib/webrat/merb_adapter.rb +0 -82
  84. data/lib/webrat/merb_multipart_support.rb +0 -27
  85. data/spec/private/core/logging_spec.rb +0 -10
  86. data/spec/private/merb/attaches_file_spec.rb +0 -93
  87. data/spec/private/merb/merb_adapter_spec.rb +0 -61
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webrat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Helmkamp
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-27 00:00:00 -04:00
12
+ date: 2009-11-28 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -45,19 +45,25 @@ executables: []
45
45
  extensions: []
46
46
 
47
47
  extra_rdoc_files:
48
- - History.txt
49
- - MIT-LICENSE.txt
50
48
  - README.rdoc
49
+ - MIT-LICENSE.txt
50
+ - History.txt
51
51
  files:
52
52
  - .document
53
53
  - .gitignore
54
+ - Gemfile
54
55
  - History.txt
55
56
  - MIT-LICENSE.txt
56
57
  - README.rdoc
57
58
  - Rakefile
58
- - VERSION
59
+ - Thorfile
59
60
  - install.rb
60
61
  - lib/webrat.rb
62
+ - lib/webrat/adapters/mechanize.rb
63
+ - lib/webrat/adapters/merb.rb
64
+ - lib/webrat/adapters/rack.rb
65
+ - lib/webrat/adapters/rails.rb
66
+ - lib/webrat/adapters/sinatra.rb
61
67
  - lib/webrat/core.rb
62
68
  - lib/webrat/core/configuration.rb
63
69
  - lib/webrat/core/elements/area.rb
@@ -91,21 +97,17 @@ files:
91
97
  - lib/webrat/core/scope.rb
92
98
  - lib/webrat/core/session.rb
93
99
  - lib/webrat/core/xml.rb
94
- - lib/webrat/core/xml/hpricot.rb
95
- - lib/webrat/core/xml/nokogiri.rb
96
- - lib/webrat/core/xml/rexml.rb
97
100
  - lib/webrat/core_extensions/blank.rb
98
101
  - lib/webrat/core_extensions/deprecate.rb
99
102
  - lib/webrat/core_extensions/detect_mapped.rb
100
103
  - lib/webrat/core_extensions/meta_class.rb
101
104
  - lib/webrat/core_extensions/nil_to_param.rb
102
105
  - lib/webrat/core_extensions/tcp_socket.rb
103
- - lib/webrat/mechanize.rb
106
+ - lib/webrat/integrations/merb.rb
107
+ - lib/webrat/integrations/rails.rb
108
+ - lib/webrat/integrations/rspec-rails.rb
109
+ - lib/webrat/integrations/selenium.rb
104
110
  - lib/webrat/merb.rb
105
- - lib/webrat/merb_adapter.rb
106
- - lib/webrat/merb_multipart_support.rb
107
- - lib/webrat/rack.rb
108
- - lib/webrat/rails.rb
109
111
  - lib/webrat/rspec-rails.rb
110
112
  - lib/webrat/selenium.rb
111
113
  - lib/webrat/selenium/application_server_factory.rb
@@ -130,7 +132,6 @@ files:
130
132
  - lib/webrat/selenium/selenium_rc_server.rb
131
133
  - lib/webrat/selenium/selenium_session.rb
132
134
  - lib/webrat/selenium/silence_stream.rb
133
- - lib/webrat/sinatra.rb
134
135
  - spec/fakes/test_adapter.rb
135
136
  - spec/integration/mechanize/Rakefile
136
137
  - spec/integration/mechanize/config.ru
@@ -168,7 +169,7 @@ files:
168
169
  - spec/integration/rack/test/webrat_rack_test.rb
169
170
  - spec/integration/rails/.gitignore
170
171
  - spec/integration/rails/Rakefile
171
- - spec/integration/rails/app/controllers/application.rb
172
+ - spec/integration/rails/app/controllers/application_controller.rb
172
173
  - spec/integration/rails/app/controllers/buttons_controller.rb
173
174
  - spec/integration/rails/app/controllers/fields_controller.rb
174
175
  - spec/integration/rails/app/controllers/links_controller.rb
@@ -182,6 +183,7 @@ files:
182
183
  - spec/integration/rails/app/views/webrat/before_redirect_form.html.erb
183
184
  - spec/integration/rails/app/views/webrat/buttons.html.erb
184
185
  - spec/integration/rails/app/views/webrat/form.html.erb
186
+ - spec/integration/rails/app/views/webrat/within.html.erb
185
187
  - spec/integration/rails/config/boot.rb
186
188
  - spec/integration/rails/config/environment.rb
187
189
  - spec/integration/rails/config/environments/development.rb
@@ -223,11 +225,8 @@ files:
223
225
  - spec/private/core/configuration_spec.rb
224
226
  - spec/private/core/field_spec.rb
225
227
  - spec/private/core/link_spec.rb
226
- - spec/private/core/logging_spec.rb
227
228
  - spec/private/core/session_spec.rb
228
229
  - spec/private/mechanize/mechanize_adapter_spec.rb
229
- - spec/private/merb/attaches_file_spec.rb
230
- - spec/private/merb/merb_adapter_spec.rb
231
230
  - spec/private/nokogiri_spec.rb
232
231
  - spec/private/rails/attaches_file_spec.rb
233
232
  - spec/private/rails/rails_adapter_spec.rb
@@ -269,8 +268,8 @@ homepage: http://github.com/brynary/webrat
269
268
  licenses: []
270
269
 
271
270
  post_install_message:
272
- rdoc_options:
273
- - --charset=UTF-8
271
+ rdoc_options: []
272
+
274
273
  require_paths:
275
274
  - lib
276
275
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -288,7 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
288
287
  requirements: []
289
288
 
290
289
  rubyforge_project: webrat
291
- rubygems_version: 1.3.4
290
+ rubygems_version: 1.3.5
292
291
  signing_key:
293
292
  specification_version: 3
294
293
  summary: Ruby Acceptance Testing for Web applications
@@ -316,7 +315,7 @@ test_files:
316
315
  - spec/integration/rack/app.rb
317
316
  - spec/integration/rack/test/helper.rb
318
317
  - spec/integration/rack/test/webrat_rack_test.rb
319
- - spec/integration/rails/app/controllers/application.rb
318
+ - spec/integration/rails/app/controllers/application_controller.rb
320
319
  - spec/integration/rails/app/controllers/buttons_controller.rb
321
320
  - spec/integration/rails/app/controllers/fields_controller.rb
322
321
  - spec/integration/rails/app/controllers/links_controller.rb
@@ -346,11 +345,8 @@ test_files:
346
345
  - spec/private/core/configuration_spec.rb
347
346
  - spec/private/core/field_spec.rb
348
347
  - spec/private/core/link_spec.rb
349
- - spec/private/core/logging_spec.rb
350
348
  - spec/private/core/session_spec.rb
351
349
  - spec/private/mechanize/mechanize_adapter_spec.rb
352
- - spec/private/merb/attaches_file_spec.rb
353
- - spec/private/merb/merb_adapter_spec.rb
354
350
  - spec/private/nokogiri_spec.rb
355
351
  - spec/private/rails/attaches_file_spec.rb
356
352
  - spec/private/rails/rails_adapter_spec.rb
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.5.3
@@ -1,19 +0,0 @@
1
- module Webrat
2
-
3
- def self.hpricot_document(stringlike)
4
- return stringlike.dom if stringlike.respond_to?(:dom)
5
-
6
- if Hpricot::Doc === stringlike
7
- stringlike
8
- elsif Hpricot::Elements === stringlike
9
- stringlike
10
- elsif StringIO === stringlike
11
- Hpricot(stringlike.string)
12
- elsif stringlike.respond_to?(:body)
13
- Hpricot(stringlike.body.to_s)
14
- else
15
- Hpricot(stringlike.to_s)
16
- end
17
- end
18
-
19
- end
@@ -1,76 +0,0 @@
1
- require "webrat/core_extensions/meta_class"
2
-
3
- module Webrat
4
-
5
- def self.nokogiri_document(stringlike) #:nodoc:
6
- return stringlike.dom if stringlike.respond_to?(:dom)
7
-
8
- if Nokogiri::HTML::Document === stringlike
9
- stringlike
10
- elsif Nokogiri::XML::NodeSet === stringlike
11
- stringlike
12
- elsif StringIO === stringlike
13
- Nokogiri::HTML(stringlike.string)
14
- elsif stringlike.respond_to?(:body)
15
- Nokogiri::HTML(stringlike.body.to_s)
16
- else
17
- Nokogiri::HTML(stringlike.to_s)
18
- end
19
- end
20
-
21
- def self.html_nokogiri_document(stringlike) #:nodoc:
22
- return stringlike.dom if stringlike.respond_to?(:dom)
23
-
24
- if Nokogiri::HTML::Document === stringlike
25
- stringlike
26
- elsif Nokogiri::XML::NodeSet === stringlike
27
- stringlike
28
- elsif StringIO === stringlike
29
- Nokogiri::HTML(stringlike.string)
30
- elsif stringlike.respond_to?(:body)
31
- Nokogiri::HTML(stringlike.body.to_s)
32
- else
33
- Nokogiri::HTML(stringlike.to_s)
34
- end
35
- end
36
-
37
- def self.xml_nokogiri_document(stringlike) #:nodoc:
38
- return stringlike.dom if stringlike.respond_to?(:dom)
39
-
40
- if Nokogiri::HTML::Document === stringlike
41
- stringlike
42
- elsif Nokogiri::XML::NodeSet === stringlike
43
- stringlike
44
- elsif StringIO === stringlike
45
- Nokogiri::XML(stringlike.string)
46
- elsif stringlike.respond_to?(:body)
47
- Nokogiri::XML(stringlike.body.to_s)
48
- else
49
- Nokogiri::XML(stringlike.to_s)
50
- end
51
- end
52
-
53
- def self.define_dom_method(object, dom) #:nodoc:
54
- object.meta_class.send(:define_method, :dom) do
55
- dom
56
- end
57
- end
58
-
59
- end
60
-
61
-
62
- module Nokogiri #:nodoc:
63
- module CSS #:nodoc:
64
- class XPathVisitor #:nodoc:
65
-
66
- def visit_pseudo_class_text(node) #:nodoc:
67
- "@type='text'"
68
- end
69
-
70
- def visit_pseudo_class_password(node) #:nodoc:
71
- "@type='password'"
72
- end
73
-
74
- end
75
- end
76
- end
@@ -1,24 +0,0 @@
1
- module Webrat
2
-
3
- def self.rexml_document(stringlike)
4
- stringlike = stringlike.body.to_s if stringlike.respond_to?(:body)
5
-
6
- case stringlike
7
- when REXML::Document
8
- stringlike.root
9
- when REXML::Node, Array
10
- stringlike
11
- else
12
- begin
13
- REXML::Document.new(stringlike.to_s).root
14
- rescue REXML::ParseException => e
15
- if e.message.include?("second root element")
16
- REXML::Document.new("<fake-root-element>#{stringlike}</fake-root-element>").root
17
- else
18
- raise e
19
- end
20
- end
21
- end
22
- end
23
-
24
- end
@@ -1,82 +0,0 @@
1
- require "webrat"
2
- require "merb-core"
3
- require "webrat/merb_multipart_support"
4
-
5
- module Webrat
6
- class MerbAdapter #:nodoc:
7
- include Merb::Test::MakeRequest
8
-
9
- # Include Webrat's own version of multipart_post/put because the officially
10
- # supported methods in Merb don't perform the request correctly.
11
- include MerbMultipartSupport
12
-
13
- attr_accessor :response
14
-
15
- def initialize(context=nil); end
16
-
17
- def get(url, data, headers = nil)
18
- do_request(url, data, headers, "GET")
19
- end
20
-
21
- def post(url, data, headers = nil)
22
- do_request(url, data, headers, "POST")
23
- end
24
-
25
- def put(url, data, headers = nil)
26
- do_request(url, data, headers, "PUT")
27
- end
28
-
29
- def delete(url, data, headers = nil)
30
- do_request(url, data, headers, "DELETE")
31
- end
32
-
33
- def response_body
34
- @response.body.to_s
35
- end
36
-
37
- def response_code
38
- @response.status
39
- end
40
-
41
- def do_request(url, data, headers, method)
42
- if method == "POST" && has_file?(data)
43
- @response = multipart_post(url, data, :headers => headers)
44
-
45
- elsif method == "PUT" && has_file?(data)
46
- @response = multipart_put(url, data, :headers => headers)
47
-
48
- else
49
- @response = request(url,
50
- :params => (data && data.any?) ? data : nil,
51
- :headers => headers,
52
- :method => method)
53
- end
54
- end
55
-
56
- protected
57
-
58
- # Recursively search the data for a file attachment.
59
- def has_file?(data)
60
- data.each do |key, value|
61
- if value.is_a?(Hash)
62
- return has_file?(value)
63
- else
64
- return true if value.is_a?(File)
65
- end
66
- end
67
- return false
68
- end
69
-
70
- end
71
- end
72
-
73
- module Merb #:nodoc:
74
- module Test #:nodoc:
75
- module RequestHelper #:nodoc:
76
- def request(uri, env = {})
77
- @_webrat_session ||= Webrat::MerbAdapter.new
78
- @_webrat_session.response = @_webrat_session.request(uri, env)
79
- end
80
- end
81
- end
82
- end
@@ -1,27 +0,0 @@
1
- module Webrat
2
-
3
- # These methods are copied from merb-core/two-oh.rb which defines new
4
- # multipart_post and multipart_put methods for Merb::Test::MultipartRequestHelper.
5
- # We can't require two-oh.rb because it alters Merb's own behavior, causing
6
- # failing specs in Merb when Webrat is required.
7
- module MerbMultipartSupport
8
- def multipart_request(path, params = {}, env = {})
9
- multipart = Merb::Test::MultipartRequestHelper::Post.new(params)
10
- body, head = multipart.to_multipart
11
- env["CONTENT_TYPE"] = head
12
- env["CONTENT_LENGTH"] = body.size
13
- env[:input] = StringIO.new(body)
14
- request(path, env)
15
- end
16
-
17
- def multipart_post(path, params = {}, env = {})
18
- env[:method] = "POST"
19
- multipart_request(path, params, env)
20
- end
21
-
22
- def multipart_put(path, params = {}, env = {}, &block)
23
- env[:method] = "PUT"
24
- multipart_request(path, params, env)
25
- end
26
- end
27
- end
@@ -1,10 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
-
3
- describe Webrat::Logging do
4
-
5
- it "should not log if there is no logger" do
6
- klass = Class.new
7
- klass.send(:include, Webrat::Logging)
8
- klass.new.debug_log "Testing"
9
- end
10
- end
@@ -1,93 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
-
3
- describe "attach_file with merb" do
4
- before do
5
- Webrat.configuration.mode = :merb
6
- @filename = __FILE__
7
- end
8
-
9
- it "should fail if no file field found" do
10
- with_html <<-HTML
11
- <html>
12
- <form method="post" action="/widgets">
13
- </form>
14
- </html>
15
- HTML
16
- lambda { attach_file("Doc", "/some/path") }.should raise_error(Webrat::NotFoundError)
17
- end
18
-
19
- it "should submit empty strings for blank file fields" do
20
- with_html <<-HTML
21
- <html>
22
- <form method="post" action="/widgets">
23
- <input type="file" id="widget_file" name="widget[file]" />
24
- <input type="submit" />
25
- </form>
26
- </html>
27
- HTML
28
- webrat_session.should_receive(:post).with("/widgets", { "widget" => { "file" => "" } })
29
- click_button
30
- end
31
-
32
- it "should submit the attached file" do
33
- with_html <<-HTML
34
- <html>
35
- <form method="post" action="/widgets">
36
- <label for="widget_file">Document</label>
37
- <input type="file" id="widget_file" name="widget[file]" />
38
- <input type="submit" />
39
- </form>
40
- </html>
41
- HTML
42
- webrat_session.should_receive(:post).with { |path, params|
43
- path.should == "/widgets"
44
- params.should have_key("widget")
45
- params["widget"].should have_key("file")
46
- params["widget"]["file"].should be_an_instance_of(File)
47
- params["widget"]["file"].path.should == @filename
48
- }
49
- attach_file "Document", @filename
50
- click_button
51
- end
52
-
53
- it "should support collections" do
54
- with_html <<-HTML
55
- <html>
56
- <form method="post" action="/widgets">
57
- <label for="widget_file1">Document</label>
58
- <input type="file" id="widget_file1" name="widget[files][]" />
59
- <label for="widget_file2">Spreadsheet</label>
60
- <input type="file" id="widget_file2" name="widget[files][]" />
61
- <input type="submit" />
62
- </form>
63
- </html>
64
- HTML
65
- webrat_session.should_receive(:post).with { |path, params|
66
- path.should == "/widgets"
67
- params.should have_key("widget")
68
- params["widget"].should have_key("files")
69
- params["widget"]["files"][0].should be_an_instance_of(File)
70
- params["widget"]["files"][0].path.should == @filename
71
- params["widget"]["files"][1].should be_an_instance_of(File)
72
- params["widget"]["files"][1].path.should == @filename
73
- }
74
- attach_file "Document", @filename
75
- attach_file "Spreadsheet", @filename
76
- click_button
77
- end
78
-
79
- xit "should allow the content type to be specified" do
80
- with_html <<-HTML
81
- <html>
82
- <form method="post" action="/widgets">
83
- <label for="person_picture">Picture</label>
84
- <input type="file" id="person_picture" name="person[picture]" />
85
- <input type="submit" />
86
- </form>
87
- </html>
88
- HTML
89
- ActionController::TestUploadedFile.should_receive(:new).with(@filename, "image/png").any_number_of_times
90
- attach_file "Picture", @filename, "image/png"
91
- click_button
92
- end
93
- end