davidtrogers-webrat 0.4.4.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. data/.gitignore +3 -1
  2. data/Gemfile +19 -0
  3. data/History.txt +99 -9
  4. data/Rakefile +141 -207
  5. data/Thorfile +118 -0
  6. data/lib/webrat.rb +10 -23
  7. data/lib/webrat/{mechanize.rb → adapters/mechanize.rb} +6 -2
  8. data/lib/webrat/adapters/merb.rb +11 -0
  9. data/lib/webrat/adapters/rack.rb +25 -0
  10. data/lib/webrat/{rails.rb → adapters/rails.rb} +5 -37
  11. data/lib/webrat/adapters/sinatra.rb +9 -0
  12. data/lib/webrat/core.rb +0 -1
  13. data/lib/webrat/core/configuration.rb +22 -18
  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 +113 -31
  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 +8 -7
  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 +16 -8
  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 +3 -8
  33. data/lib/webrat/core/matchers/have_xpath.rb +3 -28
  34. data/lib/webrat/core/methods.rb +5 -4
  35. data/lib/webrat/core/mime.rb +11 -22
  36. data/lib/webrat/core/save_and_open_page.rb +7 -29
  37. data/lib/webrat/core/scope.rb +17 -2
  38. data/lib/webrat/core/session.rb +31 -19
  39. data/lib/webrat/core/xml.rb +41 -84
  40. data/lib/webrat/integrations/merb.rb +10 -0
  41. data/lib/webrat/integrations/rails.rb +25 -0
  42. data/lib/webrat/integrations/rspec-rails.rb +11 -0
  43. data/lib/webrat/integrations/selenium.rb +11 -0
  44. data/lib/webrat/rspec-rails.rb +2 -13
  45. data/lib/webrat/selenium.rb +0 -11
  46. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  47. data/lib/webrat/selenium/application_servers.rb +5 -0
  48. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  49. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  50. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  51. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  52. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  53. data/lib/webrat/selenium/location_strategy_javascript/label.js +30 -3
  54. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +1 -0
  55. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +24 -4
  56. data/lib/webrat/selenium/matchers/have_content.rb +22 -10
  57. data/lib/webrat/selenium/matchers/have_selector.rb +8 -0
  58. data/lib/webrat/selenium/matchers/have_xpath.rb +8 -0
  59. data/lib/webrat/selenium/selenium_rc_server.rb +8 -6
  60. data/lib/webrat/selenium/selenium_session.rb +43 -14
  61. data/lib/webrat/selenium/silence_stream.rb +2 -2
  62. data/spec/fakes/{test_session.rb → test_adapter.rb} +4 -5
  63. data/spec/integration/mechanize/Rakefile +7 -0
  64. data/spec/integration/mechanize/config.ru +2 -0
  65. data/spec/integration/mechanize/sample_app.rb +20 -0
  66. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
  67. data/spec/integration/mechanize/spec/spec_helper.rb +29 -0
  68. data/spec/integration/merb/app/controllers/testing.rb +9 -0
  69. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  70. data/spec/integration/merb/config/router.rb +1 -0
  71. data/spec/integration/merb/spec/spec_helper.rb +2 -0
  72. data/spec/integration/merb/spec/webrat_spec.rb +7 -0
  73. data/spec/integration/rack/app.rb +89 -0
  74. data/spec/integration/rack/test/helper.rb +21 -0
  75. data/spec/integration/rack/test/webrat_rack_test.rb +57 -51
  76. data/spec/integration/rails/app/controllers/{application.rb → application_controller.rb} +0 -0
  77. data/spec/integration/rails/app/controllers/webrat_controller.rb +16 -9
  78. data/spec/integration/rails/app/views/buttons/show.html.erb +0 -2
  79. data/spec/integration/rails/app/views/links/show.html.erb +2 -1
  80. data/spec/integration/rails/app/views/webrat/buttons.html.erb +0 -2
  81. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  82. data/spec/integration/rails/config/environment.rb +1 -1
  83. data/spec/integration/rails/config/routes.rb +2 -0
  84. data/spec/integration/rails/test/integration/button_click_test.rb +12 -26
  85. data/spec/integration/rails/test/integration/fill_in_test.rb +1 -1
  86. data/spec/integration/rails/test/integration/link_click_test.rb +8 -2
  87. data/spec/integration/rails/test/integration/webrat_test.rb +53 -5
  88. data/spec/integration/rails/test/test_helper.rb +7 -5
  89. data/spec/integration/sinatra/test/test_helper.rb +3 -2
  90. data/spec/private/core/configuration_spec.rb +8 -27
  91. data/spec/private/core/field_spec.rb +14 -16
  92. data/spec/private/core/link_spec.rb +1 -1
  93. data/spec/private/core/session_spec.rb +23 -26
  94. data/spec/private/mechanize/{mechanize_session_spec.rb → mechanize_adapter_spec.rb} +4 -12
  95. data/spec/private/nokogiri_spec.rb +2 -2
  96. data/spec/private/rails/{rails_session_spec.rb → rails_adapter_spec.rb} +11 -42
  97. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  98. data/spec/public/basic_auth_spec.rb +13 -2
  99. data/spec/public/click_button_spec.rb +10 -12
  100. data/spec/public/click_link_spec.rb +21 -0
  101. data/spec/public/fill_in_spec.rb +15 -0
  102. data/spec/public/matchers/contain_spec.rb +12 -19
  103. data/spec/public/matchers/have_selector_spec.rb +6 -2
  104. data/spec/public/matchers/have_xpath_spec.rb +3 -3
  105. data/spec/public/save_and_open_spec.rb +15 -17
  106. data/spec/public/select_spec.rb +232 -26
  107. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  108. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  109. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  110. data/spec/spec_helper.rb +5 -1
  111. data/vendor/selenium-server.jar +0 -0
  112. metadata +119 -69
  113. data/.dotest/0001 +0 -34
  114. data/.dotest/0002 +0 -34
  115. data/.dotest/binary +0 -1
  116. data/.dotest/final-commit +0 -1
  117. data/.dotest/head-name +0 -1
  118. data/.dotest/info +0 -5
  119. data/.dotest/keep +0 -1
  120. data/.dotest/last +0 -1
  121. data/.dotest/msg +0 -0
  122. data/.dotest/msg-clean +0 -0
  123. data/.dotest/next +0 -1
  124. data/.dotest/onto +0 -1
  125. data/.dotest/orig-head +0 -1
  126. data/.dotest/patch +0 -29
  127. data/.dotest/sign +0 -1
  128. data/.dotest/utf8 +0 -1
  129. data/.dotest/whitespace +0 -1
  130. data/VERSION +0 -1
  131. data/lib/webrat/core/xml/hpricot.rb +0 -19
  132. data/lib/webrat/core/xml/nokogiri.rb +0 -76
  133. data/lib/webrat/core/xml/rexml.rb +0 -24
  134. data/lib/webrat/merb_session.rb +0 -65
  135. data/lib/webrat/rack.rb +0 -24
  136. data/lib/webrat/rack_test.rb +0 -32
  137. data/lib/webrat/selenium/application_server.rb +0 -73
  138. data/lib/webrat/selenium/merb_application_server.rb +0 -48
  139. data/lib/webrat/selenium/rails_application_server.rb +0 -42
  140. data/lib/webrat/selenium/sinatra_application_server.rb +0 -35
  141. data/lib/webrat/sinatra.rb +0 -44
  142. data/spec/integration/rack/rack_app.rb +0 -16
  143. data/spec/integration/rack/test/test_helper.rb +0 -20
  144. data/spec/private/core/logging_spec.rb +0 -10
  145. data/spec/private/merb/merb_session_spec.rb +0 -42
data/.dotest/binary DELETED
@@ -1 +0,0 @@
1
- t
data/.dotest/final-commit DELETED
@@ -1 +0,0 @@
1
- trying yet again to build this gem :-)
data/.dotest/head-name DELETED
@@ -1 +0,0 @@
1
- refs/heads/master
data/.dotest/info DELETED
@@ -1,5 +0,0 @@
1
- Author: davidtrogers
2
- Email: david.t.rogers@gmail.com
3
- Subject: trying yet again to build this gem :-)
4
- Date: Tue, 26 May 2009 22:17:55 -0400
5
-
data/.dotest/keep DELETED
@@ -1 +0,0 @@
1
- t
data/.dotest/last DELETED
@@ -1 +0,0 @@
1
- 2
data/.dotest/msg DELETED
File without changes
data/.dotest/msg-clean DELETED
File without changes
data/.dotest/next DELETED
@@ -1 +0,0 @@
1
- 1
data/.dotest/onto DELETED
@@ -1 +0,0 @@
1
- 4c5649e84445bdb08fb834705ec6793c831a85cc
data/.dotest/orig-head DELETED
@@ -1 +0,0 @@
1
- 2581869c832668aacf48e2e6dd7212721a6edceb
data/.dotest/patch DELETED
@@ -1,29 +0,0 @@
1
- ---
2
- VERSION | 2 +-
3
- webrat.gemspec | 2 +-
4
- 2 files changed, 2 insertions(+), 2 deletions(-)
5
-
6
- diff --git a/VERSION b/VERSION
7
- index 3b77b494a2e70cf4aa2800eab1e9b1cb6572afc4..77d6f4ca23711533e724789a0a0045eab28c5ea6 100644
8
- --- a/VERSION
9
- +++ b/VERSION
10
- @@ -1 +1 @@
11
- -0.4.4.2
12
- +0.0.0
13
- diff --git a/webrat.gemspec b/webrat.gemspec
14
- index 752a14ff8fca2cae03a148e2ad2badfe80989cb6..d9061e244f0107ac06e3479a58c4e326d497bdfe 100644
15
- --- a/webrat.gemspec
16
- +++ b/webrat.gemspec
17
- @@ -2,7 +2,7 @@
18
-
19
- Gem::Specification.new do |s|
20
- s.name = %q{webrat}
21
- - s.version = "0.4.4.2"
22
- + s.version = "0.0.0"
23
-
24
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
25
- s.authors = ["Dave Rogers"]
26
- --
27
- 1.5.4.3
28
-
29
-
data/.dotest/sign DELETED
@@ -1 +0,0 @@
1
-
data/.dotest/utf8 DELETED
@@ -1 +0,0 @@
1
- t
data/.dotest/whitespace DELETED
@@ -1 +0,0 @@
1
-
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.0.0
@@ -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,65 +0,0 @@
1
- require "webrat"
2
-
3
- require "cgi"
4
- gem "extlib"
5
- require "extlib"
6
- require "merb-core"
7
-
8
- # HashWithIndifferentAccess = Mash
9
-
10
- module Webrat
11
- class MerbSession < Session #:nodoc:
12
- include Merb::Test::MakeRequest
13
-
14
- attr_accessor :response
15
-
16
- def get(url, data, headers = nil)
17
- do_request(url, data, headers, "GET")
18
- end
19
-
20
- def post(url, data, headers = nil)
21
- do_request(url, data, headers, "POST")
22
- end
23
-
24
- def put(url, data, headers = nil)
25
- do_request(url, data, headers, "PUT")
26
- end
27
-
28
- def delete(url, data, headers = nil)
29
- do_request(url, data, headers, "DELETE")
30
- end
31
-
32
- def response_body
33
- @response.body.to_s
34
- end
35
-
36
- def response_code
37
- @response.status
38
- end
39
-
40
- def do_request(url, data, headers, method)
41
- @response = request(url,
42
- :params => (data && data.any?) ? data : nil,
43
- :headers => headers,
44
- :method => method)
45
- end
46
-
47
- end
48
- end
49
-
50
- module Merb #:nodoc:
51
- module Test #:nodoc:
52
- module RequestHelper #:nodoc:
53
- def request(uri, env = {})
54
- @_webrat_session ||= Webrat::MerbSession.new
55
- @_webrat_session.response = @_webrat_session.request(uri, env)
56
- end
57
- end
58
- end
59
- end
60
-
61
- class Merb::Test::RspecStory #:nodoc:
62
- def browser
63
- @browser ||= Webrat::MerbSession.new
64
- end
65
- end
data/lib/webrat/rack.rb DELETED
@@ -1,24 +0,0 @@
1
- require 'webrat'
2
-
3
- class CGIMethods #:nodoc:
4
- def self.parse_query_parameters(params)
5
- hash = {}
6
- params.split('&').each do |p|
7
- pair = p.split('=')
8
- hash[pair[0]] = pair[1]
9
- end
10
- hash
11
- end
12
- end
13
-
14
- module Webrat
15
- class RackSession < Session #:nodoc:
16
- def response_body
17
- @response.body
18
- end
19
-
20
- def response_code
21
- @response.status
22
- end
23
- end
24
- end
@@ -1,32 +0,0 @@
1
- module Webrat
2
- class RackTestSession < Session
3
-
4
- def initialize(rack_test_session) #:nodoc:
5
- super()
6
- @rack_test_session = rack_test_session
7
- end
8
-
9
- def response_body
10
- response.body
11
- end
12
-
13
- def response_code
14
- response.status
15
- end
16
-
17
- def response
18
- @rack_test_session.last_response
19
- end
20
-
21
- protected
22
-
23
- def process_request(http_method, url, data = {}, headers = {})
24
- headers ||= {}
25
- data ||= {}
26
-
27
- env = headers.merge(:params => data, :method => http_method.to_s.upcase)
28
- @rack_test_session.request(url, env)
29
- end
30
-
31
- end
32
- end
@@ -1,73 +0,0 @@
1
- module Webrat
2
- module Selenium
3
-
4
- class ApplicationServer
5
-
6
- include Webrat::Selenium::SilenceStream
7
-
8
- def self.boot
9
- case Webrat.configuration.application_framework
10
- when :sinatra
11
- require "webrat/selenium/sinatra_application_server"
12
- SinatraApplicationServer.new.boot
13
- when :merb
14
- require "webrat/selenium/merb_application_server"
15
- MerbApplicationServer.new.boot
16
- when :rails
17
- require "webrat/selenium/rails_application_server"
18
- RailsApplicationServer.new.boot
19
- else
20
- raise WebratError.new(<<-STR)
21
- Unknown Webrat application_framework: #{Webrat.configuration.application_framework.inspect}
22
-
23
- Please ensure you have a Webrat configuration block that specifies an application_framework
24
- in your test_helper.rb, spec_helper.rb, or env.rb (for Cucumber).
25
-
26
- For example:
27
-
28
- Webrat.configure do |config|
29
- # ...
30
- config.application_framework = :rails
31
- end
32
- STR
33
- end
34
- end
35
-
36
- def boot
37
- start
38
- wait
39
- stop_at_exit
40
- end
41
-
42
- def stop_at_exit
43
- at_exit do
44
- stop
45
- end
46
- end
47
-
48
- def wait
49
- $stderr.print "==> Waiting for #{Webrat.configuration.application_framework} application server on port #{Webrat.configuration.application_port}... "
50
- wait_for_socket
51
- $stderr.print "Ready!\n"
52
- end
53
-
54
- def wait_for_socket
55
- silence_stream(STDOUT) do
56
- TCPSocket.wait_for_service_with_timeout \
57
- :host => Webrat.configuration.application_address,
58
- :port => Webrat.configuration.application_port.to_i,
59
- :timeout => 30 # seconds
60
- end
61
- rescue SocketError
62
- fail
63
- end
64
-
65
- def prepare_pid_file(file_path, pid_file_name)
66
- FileUtils.mkdir_p File.expand_path(file_path)
67
- File.expand_path("#{file_path}/#{pid_file_name}")
68
- end
69
-
70
- end
71
-
72
- end
73
- end
@@ -1,48 +0,0 @@
1
- module Webrat
2
- module Selenium
3
-
4
- class MerbApplicationServer < ApplicationServer
5
-
6
- def start
7
- system start_command
8
- end
9
-
10
- def stop
11
- silence_stream(STDOUT) do
12
- pid = File.read(pid_file)
13
- system("kill -9 #{pid}")
14
- FileUtils.rm_f pid_file
15
- end
16
- end
17
-
18
- def fail
19
- $stderr.puts
20
- $stderr.puts
21
- $stderr.puts "==> Failed to boot the Merb application server... exiting!"
22
- $stderr.puts
23
- $stderr.puts "Verify you can start a Merb server on port #{Webrat.configuration.application_port} with the following command:"
24
- $stderr.puts
25
- $stderr.puts " #{start_command}"
26
- exit
27
- end
28
-
29
- def pid_file
30
- "log/merb.#{Webrat.configuration.application_port}.pid"
31
- end
32
-
33
- def start_command
34
- "#{merb_command} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}"
35
- end
36
-
37
- def merb_command
38
- if File.exist?('bin/merb')
39
- merb_cmd = 'bin/merb'
40
- else
41
- merb_cmd = 'merb'
42
- end
43
- end
44
-
45
- end
46
-
47
- end
48
- end