webrat 0.4.4 → 0.4.5
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.
- data/.document +4 -0
- data/.gitignore +15 -0
- data/History.txt +44 -8
- data/Rakefile +80 -66
- data/VERSION +1 -0
- data/lib/webrat.rb +7 -12
- data/lib/webrat/core/configuration.rb +7 -3
- data/lib/webrat/core/elements/area.rb +7 -7
- data/lib/webrat/core/elements/element.rb +11 -11
- data/lib/webrat/core/elements/field.rb +63 -55
- data/lib/webrat/core/elements/form.rb +17 -17
- data/lib/webrat/core/elements/label.rb +6 -6
- data/lib/webrat/core/elements/link.rb +13 -12
- data/lib/webrat/core/elements/select_option.rb +9 -9
- data/lib/webrat/core/locators.rb +2 -2
- data/lib/webrat/core/locators/area_locator.rb +10 -10
- data/lib/webrat/core/locators/button_locator.rb +13 -13
- data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
- data/lib/webrat/core/locators/field_labeled_locator.rb +11 -11
- data/lib/webrat/core/locators/field_locator.rb +7 -7
- data/lib/webrat/core/locators/field_named_locator.rb +10 -10
- data/lib/webrat/core/locators/form_locator.rb +6 -6
- data/lib/webrat/core/locators/label_locator.rb +9 -9
- data/lib/webrat/core/locators/link_locator.rb +21 -13
- data/lib/webrat/core/locators/locator.rb +5 -5
- data/lib/webrat/core/locators/select_option_locator.rb +11 -11
- data/lib/webrat/core/logging.rb +7 -4
- data/lib/webrat/core/matchers/have_content.rb +12 -12
- data/lib/webrat/core/matchers/have_selector.rb +9 -9
- data/lib/webrat/core/matchers/have_tag.rb +4 -4
- data/lib/webrat/core/matchers/have_xpath.rb +26 -26
- data/lib/webrat/core/methods.rb +13 -11
- data/lib/webrat/core/mime.rb +3 -3
- data/lib/webrat/core/save_and_open_page.rb +14 -16
- data/lib/webrat/core/scope.rb +53 -53
- data/lib/webrat/core/session.rb +23 -14
- data/lib/webrat/core/xml.rb +16 -16
- data/lib/webrat/core/xml/hpricot.rb +3 -3
- data/lib/webrat/core/xml/nokogiri.rb +11 -11
- data/lib/webrat/core/xml/rexml.rb +3 -3
- data/lib/webrat/core_extensions/blank.rb +1 -1
- data/lib/webrat/core_extensions/deprecate.rb +1 -1
- data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
- data/lib/webrat/core_extensions/meta_class.rb +1 -1
- data/lib/webrat/core_extensions/tcp_socket.rb +8 -8
- data/lib/webrat/mechanize.rb +9 -9
- data/lib/webrat/merb.rb +1 -1
- data/lib/webrat/merb_multipart_support.rb +27 -0
- data/lib/webrat/merb_session.rb +39 -24
- data/lib/webrat/rack_test.rb +32 -0
- data/lib/webrat/rails.rb +2 -2
- data/lib/webrat/rspec-rails.rb +3 -6
- data/lib/webrat/selenium.rb +2 -1
- data/lib/webrat/selenium/application_server_factory.rb +40 -0
- data/lib/webrat/selenium/application_servers.rb +5 -0
- data/lib/webrat/selenium/application_servers/base.rb +46 -0
- data/lib/webrat/selenium/application_servers/external.rb +26 -0
- data/lib/webrat/selenium/application_servers/merb.rb +50 -0
- data/lib/webrat/selenium/application_servers/rails.rb +44 -0
- data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
- data/lib/webrat/selenium/location_strategy_javascript/button.js +14 -7
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +4 -1
- data/lib/webrat/selenium/matchers.rb +1 -1
- data/lib/webrat/selenium/matchers/have_content.rb +4 -4
- data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
- data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
- data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
- data/lib/webrat/selenium/selenium_rc_server.rb +25 -19
- data/lib/webrat/selenium/selenium_session.rb +24 -17
- data/lib/webrat/selenium/silence_stream.rb +18 -0
- data/spec/fakes/test_session.rb +34 -0
- data/spec/integration/merb/.gitignore +21 -0
- data/spec/integration/merb/Rakefile +35 -0
- data/spec/integration/merb/app/controllers/application.rb +2 -0
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/spec/integration/merb/app/controllers/testing.rb +27 -0
- data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
- data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
- data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
- data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
- data/spec/integration/merb/config/environments/development.rb +15 -0
- data/spec/integration/merb/config/environments/rake.rb +11 -0
- data/spec/integration/merb/config/environments/test.rb +14 -0
- data/spec/integration/merb/config/init.rb +25 -0
- data/spec/integration/merb/config/rack.rb +11 -0
- data/spec/integration/merb/config/router.rb +34 -0
- data/spec/integration/merb/spec/spec.opts +1 -0
- data/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/spec/integration/merb/spec/webrat_spec.rb +39 -0
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/spec/integration/rack/Rakefile +5 -0
- data/spec/integration/rack/rack_app.rb +16 -0
- data/spec/integration/rack/test/test_helper.rb +20 -0
- data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
- data/spec/integration/rails/.gitignore +3 -0
- data/spec/integration/rails/Rakefile +30 -0
- data/spec/integration/rails/app/controllers/application.rb +15 -0
- data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
- data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
- data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
- data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
- data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
- data/spec/integration/rails/app/views/links/show.html.erb +5 -0
- data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
- data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
- data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
- data/spec/integration/rails/config/boot.rb +109 -0
- data/spec/integration/rails/config/environment.rb +12 -0
- data/spec/integration/rails/config/environments/development.rb +17 -0
- data/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/spec/integration/rails/config/environments/test.rb +22 -0
- data/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/spec/integration/rails/config/locales/en.yml +5 -0
- data/spec/integration/rails/config/routes.rb +18 -0
- data/spec/integration/rails/public/404.html +30 -0
- data/spec/integration/rails/public/422.html +30 -0
- data/spec/integration/rails/public/500.html +33 -0
- data/spec/integration/rails/script/about +4 -0
- data/spec/integration/rails/script/console +3 -0
- data/spec/integration/rails/script/dbconsole +3 -0
- data/spec/integration/rails/script/destroy +3 -0
- data/spec/integration/rails/script/generate +3 -0
- data/spec/integration/rails/script/performance/benchmarker +3 -0
- data/spec/integration/rails/script/performance/profiler +3 -0
- data/spec/integration/rails/script/performance/request +3 -0
- data/spec/integration/rails/script/plugin +3 -0
- data/spec/integration/rails/script/process/inspector +3 -0
- data/spec/integration/rails/script/process/reaper +3 -0
- data/spec/integration/rails/script/process/spawner +3 -0
- data/spec/integration/rails/script/runner +3 -0
- data/spec/integration/rails/script/server +3 -0
- data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
- data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
- data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
- data/spec/integration/rails/test/integration/webrat_test.rb +97 -0
- data/spec/integration/rails/test/test_helper.rb +25 -0
- data/spec/integration/sinatra/Rakefile +5 -0
- data/spec/integration/sinatra/classic_app.rb +64 -0
- data/spec/integration/sinatra/modular_app.rb +16 -0
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/spec/private/core/configuration_spec.rb +116 -0
- data/spec/private/core/field_spec.rb +85 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/logging_spec.rb +10 -0
- data/spec/private/core/session_spec.rb +195 -0
- data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/spec/private/merb/attaches_file_spec.rb +93 -0
- data/spec/private/merb/merb_session_spec.rb +61 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_session_spec.rb +110 -0
- data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
- data/spec/public/basic_auth_spec.rb +24 -0
- data/spec/public/check_spec.rb +191 -0
- data/spec/public/choose_spec.rb +118 -0
- data/spec/public/click_area_spec.rb +106 -0
- data/spec/public/click_button_spec.rb +496 -0
- data/spec/public/click_link_spec.rb +511 -0
- data/spec/public/fill_in_spec.rb +209 -0
- data/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/spec/public/locators/field_labeled_spec.rb +172 -0
- data/spec/public/locators/field_with_id_spec.rb +16 -0
- data/spec/public/matchers/contain_spec.rb +114 -0
- data/spec/public/matchers/have_selector_spec.rb +142 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +136 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +70 -0
- data/spec/public/select_date_spec.rb +112 -0
- data/spec/public/select_datetime_spec.rb +137 -0
- data/spec/public/select_spec.rb +249 -0
- data/spec/public/select_time_spec.rb +100 -0
- data/spec/public/selenium/application_server_factory_spec.rb +49 -0
- data/spec/public/selenium/application_servers/external_spec.rb +12 -0
- data/spec/public/selenium/selenium_session_spec.rb +37 -0
- data/spec/public/set_hidden_field_spec.rb +5 -0
- data/spec/public/submit_form_spec.rb +5 -0
- data/spec/public/visit_spec.rb +58 -0
- data/spec/public/within_spec.rb +177 -0
- data/spec/rcov.opts +1 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +50 -0
- data/vendor/selenium-server.jar +0 -0
- data/webrat.gemspec +340 -0
- metadata +248 -33
- data/lib/webrat/selenium/application_server.rb +0 -71
- data/lib/webrat/selenium/merb_application_server.rb +0 -48
- data/lib/webrat/selenium/rails_application_server.rb +0 -42
- data/lib/webrat/selenium/sinatra_application_server.rb +0 -35
data/lib/webrat/core/session.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Webrat
|
|
|
11
11
|
|
|
12
12
|
class InfiniteRedirectError < WebratError
|
|
13
13
|
end
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
def self.session_class
|
|
16
16
|
case Webrat.configuration.mode
|
|
17
17
|
when :rails
|
|
@@ -26,6 +26,8 @@ module Webrat
|
|
|
26
26
|
SinatraSession
|
|
27
27
|
when :mechanize
|
|
28
28
|
MechanizeSession
|
|
29
|
+
when :rack_test
|
|
30
|
+
RackTestSession
|
|
29
31
|
else
|
|
30
32
|
raise WebratError.new(<<-STR)
|
|
31
33
|
Unknown Webrat mode: #{Webrat.configuration.mode.inspect}
|
|
@@ -67,6 +69,7 @@ For example:
|
|
|
67
69
|
|
|
68
70
|
# For backwards compatibility -- removing in 1.0
|
|
69
71
|
def current_page #:nodoc:
|
|
72
|
+
warn "current_page is deprecated and will be going away in the next release. Use current_url instead."
|
|
70
73
|
page = OpenStruct.new
|
|
71
74
|
page.url = @current_url
|
|
72
75
|
page.http_method = @http_method
|
|
@@ -77,7 +80,7 @@ For example:
|
|
|
77
80
|
def doc_root #:nodoc:
|
|
78
81
|
nil
|
|
79
82
|
end
|
|
80
|
-
|
|
83
|
+
|
|
81
84
|
def header(key, value)
|
|
82
85
|
@custom_headers[key] = value
|
|
83
86
|
end
|
|
@@ -100,11 +103,8 @@ For example:
|
|
|
100
103
|
h['HTTP_REFERER'] = @current_url if @current_url
|
|
101
104
|
|
|
102
105
|
debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}"
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
else
|
|
106
|
-
send "#{http_method}", url, data || {}, h
|
|
107
|
-
end
|
|
106
|
+
|
|
107
|
+
process_request(http_method, url, data, h)
|
|
108
108
|
|
|
109
109
|
save_and_open_page if exception_caught? && Webrat.configuration.open_error_files?
|
|
110
110
|
raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code?
|
|
@@ -122,13 +122,13 @@ For example:
|
|
|
122
122
|
|
|
123
123
|
return response
|
|
124
124
|
end
|
|
125
|
-
|
|
125
|
+
|
|
126
126
|
def check_for_infinite_redirects
|
|
127
127
|
if current_url == response_location
|
|
128
128
|
@_identical_redirect_count ||= 0
|
|
129
129
|
@_identical_redirect_count += 1
|
|
130
130
|
end
|
|
131
|
-
|
|
131
|
+
|
|
132
132
|
if infinite_redirect_limit_exceeded?
|
|
133
133
|
raise InfiniteRedirectError.new("#{Webrat.configuration.infinite_redirect_limit} redirects to the same URL (#{current_url.inspect})")
|
|
134
134
|
end
|
|
@@ -138,13 +138,13 @@ For example:
|
|
|
138
138
|
Webrat.configuration.infinite_redirect_limit &&
|
|
139
139
|
(@_identical_redirect_count || 0) > Webrat.configuration.infinite_redirect_limit
|
|
140
140
|
end
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
def success_code? #:nodoc:
|
|
143
143
|
(200..499).include?(response_code)
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
def redirect? #:nodoc:
|
|
147
|
-
response_code / 100 == 3
|
|
147
|
+
(response_code / 100).to_i == 3
|
|
148
148
|
end
|
|
149
149
|
|
|
150
150
|
def internal_redirect?
|
|
@@ -154,7 +154,7 @@ For example:
|
|
|
154
154
|
response_location_host_domain = response_location_host.split('.')[-2..-1].join('.') rescue response_location_host
|
|
155
155
|
current_host_domain == response_location_host_domain
|
|
156
156
|
end
|
|
157
|
-
|
|
157
|
+
|
|
158
158
|
#easy helper to pull out where we were redirected to
|
|
159
159
|
def redirected_to
|
|
160
160
|
redirect? ? response_location : nil
|
|
@@ -256,15 +256,24 @@ For example:
|
|
|
256
256
|
def_delegators :current_scope, :field_by_xpath
|
|
257
257
|
def_delegators :current_scope, :field_with_id
|
|
258
258
|
def_delegators :current_scope, :select_option
|
|
259
|
+
def_delegators :current_scope, :field_named
|
|
259
260
|
|
|
260
261
|
private
|
|
261
262
|
|
|
263
|
+
def process_request(http_method, url, data, headers)
|
|
264
|
+
if headers.empty?
|
|
265
|
+
send "#{http_method}", url, data || {}
|
|
266
|
+
else
|
|
267
|
+
send "#{http_method}", url, data || {}, headers
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
262
271
|
def response_location
|
|
263
272
|
response.headers["Location"]
|
|
264
273
|
end
|
|
265
274
|
|
|
266
275
|
def current_host
|
|
267
|
-
URI.parse(current_url).host || "www.example.com"
|
|
276
|
+
URI.parse(current_url).host || @custom_headers["Host"] || "www.example.com"
|
|
268
277
|
end
|
|
269
278
|
|
|
270
279
|
def response_location_host
|
|
@@ -276,6 +285,6 @@ For example:
|
|
|
276
285
|
@_scopes = nil
|
|
277
286
|
@_page_scope = nil
|
|
278
287
|
end
|
|
279
|
-
|
|
288
|
+
|
|
280
289
|
end
|
|
281
290
|
end
|
data/lib/webrat/core/xml.rb
CHANGED
|
@@ -4,7 +4,7 @@ require "webrat/core/xml/rexml"
|
|
|
4
4
|
|
|
5
5
|
module Webrat #:nodoc:
|
|
6
6
|
module XML #:nodoc:
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
def self.document(stringlike) #:nodoc:
|
|
9
9
|
if Webrat.configuration.parse_with_nokogiri?
|
|
10
10
|
Webrat.nokogiri_document(stringlike)
|
|
@@ -12,7 +12,7 @@ module Webrat #:nodoc:
|
|
|
12
12
|
Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
def self.html_document(stringlike) #:nodoc:
|
|
17
17
|
if Webrat.configuration.parse_with_nokogiri?
|
|
18
18
|
Webrat.html_nokogiri_document(stringlike)
|
|
@@ -20,7 +20,7 @@ module Webrat #:nodoc:
|
|
|
20
20
|
Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
def self.xml_document(stringlike) #:nodoc:
|
|
25
25
|
if Webrat.configuration.parse_with_nokogiri?
|
|
26
26
|
Webrat.xml_nokogiri_document(stringlike)
|
|
@@ -36,7 +36,7 @@ module Webrat #:nodoc:
|
|
|
36
36
|
element.to_s
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
def self.inner_html(element)
|
|
41
41
|
if Webrat.configuration.parse_with_nokogiri?
|
|
42
42
|
element.inner_html
|
|
@@ -44,7 +44,7 @@ module Webrat #:nodoc:
|
|
|
44
44
|
element.text
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
|
-
|
|
47
|
+
|
|
48
48
|
def self.all_inner_text(element)
|
|
49
49
|
if Webrat.configuration.parse_with_nokogiri?
|
|
50
50
|
element.inner_text
|
|
@@ -52,7 +52,7 @@ module Webrat #:nodoc:
|
|
|
52
52
|
Hpricot(element.to_s).children.first.inner_text
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
def self.inner_text(element)
|
|
57
57
|
if Webrat.configuration.parse_with_nokogiri?
|
|
58
58
|
element.inner_text
|
|
@@ -64,7 +64,7 @@ module Webrat #:nodoc:
|
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
|
-
|
|
67
|
+
|
|
68
68
|
def self.xpath_to(element)
|
|
69
69
|
if Webrat.configuration.parse_with_nokogiri?
|
|
70
70
|
element.path
|
|
@@ -72,25 +72,25 @@ module Webrat #:nodoc:
|
|
|
72
72
|
element.xpath
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
|
-
|
|
75
|
+
|
|
76
76
|
def self.attribute(element, attribute_name)
|
|
77
77
|
return element[attribute_name] if element.is_a?(Hash)
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
if Webrat.configuration.parse_with_nokogiri?
|
|
80
80
|
element[attribute_name]
|
|
81
81
|
else
|
|
82
82
|
element.attributes[attribute_name]
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
def self.xpath_at(*args)
|
|
87
87
|
xpath_search(*args).first
|
|
88
88
|
end
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
def self.css_at(*args)
|
|
91
91
|
css_search(*args).first
|
|
92
92
|
end
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
def self.xpath_search(element, *searches)
|
|
95
95
|
searches.flatten.map do |search|
|
|
96
96
|
if Webrat.configuration.parse_with_nokogiri?
|
|
@@ -100,16 +100,16 @@ module Webrat #:nodoc:
|
|
|
100
100
|
end
|
|
101
101
|
end.flatten.compact
|
|
102
102
|
end
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
def self.css_search(element, *searches) #:nodoc:
|
|
105
105
|
xpath_search(element, css_to_xpath(*searches))
|
|
106
106
|
end
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
def self.css_to_xpath(*selectors)
|
|
109
109
|
selectors.map do |rule|
|
|
110
110
|
Nokogiri::CSS.xpath_for(rule, :prefix => ".//")
|
|
111
111
|
end.flatten.uniq
|
|
112
112
|
end
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
end
|
|
115
|
-
end
|
|
115
|
+
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
require "webrat/core_extensions/meta_class"
|
|
2
2
|
|
|
3
3
|
module Webrat
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
def self.nokogiri_document(stringlike) #:nodoc:
|
|
6
6
|
return stringlike.dom if stringlike.respond_to?(:dom)
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
if Nokogiri::HTML::Document === stringlike
|
|
9
9
|
stringlike
|
|
10
10
|
elsif Nokogiri::XML::NodeSet === stringlike
|
|
@@ -17,10 +17,10 @@ module Webrat
|
|
|
17
17
|
Nokogiri::HTML(stringlike.to_s)
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
def self.html_nokogiri_document(stringlike) #:nodoc:
|
|
22
22
|
return stringlike.dom if stringlike.respond_to?(:dom)
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
if Nokogiri::HTML::Document === stringlike
|
|
25
25
|
stringlike
|
|
26
26
|
elsif Nokogiri::XML::NodeSet === stringlike
|
|
@@ -33,10 +33,10 @@ module Webrat
|
|
|
33
33
|
Nokogiri::HTML(stringlike.to_s)
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
def self.xml_nokogiri_document(stringlike) #:nodoc:
|
|
38
38
|
return stringlike.dom if stringlike.respond_to?(:dom)
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
if Nokogiri::HTML::Document === stringlike
|
|
41
41
|
stringlike
|
|
42
42
|
elsif Nokogiri::XML::NodeSet === stringlike
|
|
@@ -49,20 +49,20 @@ module Webrat
|
|
|
49
49
|
Nokogiri::XML(stringlike.to_s)
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
def self.define_dom_method(object, dom) #:nodoc:
|
|
54
54
|
object.meta_class.send(:define_method, :dom) do
|
|
55
55
|
dom
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
module Nokogiri #:nodoc:
|
|
63
63
|
module CSS #:nodoc:
|
|
64
64
|
class XPathVisitor #:nodoc:
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
def visit_pseudo_class_text(node) #:nodoc:
|
|
67
67
|
"@type='text'"
|
|
68
68
|
end
|
|
@@ -70,7 +70,7 @@ module Nokogiri #:nodoc:
|
|
|
70
70
|
def visit_pseudo_class_password(node) #:nodoc:
|
|
71
71
|
"@type='password'"
|
|
72
72
|
end
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
|
-
end
|
|
76
|
+
end
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
class TCPSocket
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
def self.wait_for_service_with_timeout(options)
|
|
4
4
|
start_time = Time.now
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
until listening_service?(options)
|
|
7
7
|
verbose_wait
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
if options[:timeout] && (Time.now > start_time + options[:timeout])
|
|
10
10
|
raise SocketError.new("Socket did not open within #{options[:timeout]} seconds")
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
def self.wait_for_service_termination_with_timeout(options)
|
|
16
16
|
start_time = Time.now
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
while listening_service?(options)
|
|
19
19
|
verbose_wait
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
if options[:timeout] && (Time.now > start_time + options[:timeout])
|
|
22
22
|
raise SocketError.new("Socket did not terminate within #{options[:timeout]} seconds")
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
|
-
|
|
27
|
-
end
|
|
26
|
+
|
|
27
|
+
end
|
data/lib/webrat/mechanize.rb
CHANGED
|
@@ -2,14 +2,14 @@ require "mechanize"
|
|
|
2
2
|
|
|
3
3
|
module Webrat #:nodoc:
|
|
4
4
|
class MechanizeSession < Session #:nodoc:
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
attr_accessor :response
|
|
7
7
|
alias :page :response
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
def request_page(url, http_method, data) #:nodoc:
|
|
10
10
|
super(absolute_url(url), http_method, data)
|
|
11
11
|
end
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
def get(url, data, headers_argument_not_used = nil)
|
|
14
14
|
@response = mechanize.get(url, data)
|
|
15
15
|
end
|
|
@@ -26,7 +26,7 @@ module Webrat #:nodoc:
|
|
|
26
26
|
end
|
|
27
27
|
@response = mechanize.post(url, post_data)
|
|
28
28
|
end
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
def response_body
|
|
31
31
|
@response.content
|
|
32
32
|
end
|
|
@@ -34,13 +34,13 @@ module Webrat #:nodoc:
|
|
|
34
34
|
def response_code
|
|
35
35
|
@response.code.to_i
|
|
36
36
|
end
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
def mechanize
|
|
39
39
|
@mechanize ||= WWW::Mechanize.new
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def_delegators :mechanize, :basic_auth
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
def absolute_url(url) #:nodoc:
|
|
45
45
|
current_host, current_path = split_current_url
|
|
46
46
|
if url =~ Regexp.new('^https?://')
|
|
@@ -53,13 +53,13 @@ module Webrat #:nodoc:
|
|
|
53
53
|
url
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
private
|
|
58
58
|
def split_current_url
|
|
59
59
|
current_url =~ Regexp.new('^(https?://[^/]+)(/.*)?')
|
|
60
60
|
[Regexp.last_match(1), Regexp.last_match(2)]
|
|
61
61
|
end
|
|
62
|
-
|
|
62
|
+
|
|
63
63
|
def absolute_path(current_path, url)
|
|
64
64
|
levels_up = url.split('/').find_all { |x| x == '..' }.size
|
|
65
65
|
ancestor = if current_path.nil?
|
|
@@ -67,7 +67,7 @@ module Webrat #:nodoc:
|
|
|
67
67
|
else
|
|
68
68
|
current_path.split("/")[0..(-1 - levels_up)].join("/")
|
|
69
69
|
end
|
|
70
|
-
descendent = url.split("/")[levels_up..-1]
|
|
70
|
+
descendent = url.split("/")[levels_up..-1].join
|
|
71
71
|
"#{ancestor}/#{descendent}"
|
|
72
72
|
end
|
|
73
73
|
end
|