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.
Files changed (203) hide show
  1. data/.document +4 -0
  2. data/.gitignore +15 -0
  3. data/History.txt +44 -8
  4. data/Rakefile +80 -66
  5. data/VERSION +1 -0
  6. data/lib/webrat.rb +7 -12
  7. data/lib/webrat/core/configuration.rb +7 -3
  8. data/lib/webrat/core/elements/area.rb +7 -7
  9. data/lib/webrat/core/elements/element.rb +11 -11
  10. data/lib/webrat/core/elements/field.rb +63 -55
  11. data/lib/webrat/core/elements/form.rb +17 -17
  12. data/lib/webrat/core/elements/label.rb +6 -6
  13. data/lib/webrat/core/elements/link.rb +13 -12
  14. data/lib/webrat/core/elements/select_option.rb +9 -9
  15. data/lib/webrat/core/locators.rb +2 -2
  16. data/lib/webrat/core/locators/area_locator.rb +10 -10
  17. data/lib/webrat/core/locators/button_locator.rb +13 -13
  18. data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
  19. data/lib/webrat/core/locators/field_labeled_locator.rb +11 -11
  20. data/lib/webrat/core/locators/field_locator.rb +7 -7
  21. data/lib/webrat/core/locators/field_named_locator.rb +10 -10
  22. data/lib/webrat/core/locators/form_locator.rb +6 -6
  23. data/lib/webrat/core/locators/label_locator.rb +9 -9
  24. data/lib/webrat/core/locators/link_locator.rb +21 -13
  25. data/lib/webrat/core/locators/locator.rb +5 -5
  26. data/lib/webrat/core/locators/select_option_locator.rb +11 -11
  27. data/lib/webrat/core/logging.rb +7 -4
  28. data/lib/webrat/core/matchers/have_content.rb +12 -12
  29. data/lib/webrat/core/matchers/have_selector.rb +9 -9
  30. data/lib/webrat/core/matchers/have_tag.rb +4 -4
  31. data/lib/webrat/core/matchers/have_xpath.rb +26 -26
  32. data/lib/webrat/core/methods.rb +13 -11
  33. data/lib/webrat/core/mime.rb +3 -3
  34. data/lib/webrat/core/save_and_open_page.rb +14 -16
  35. data/lib/webrat/core/scope.rb +53 -53
  36. data/lib/webrat/core/session.rb +23 -14
  37. data/lib/webrat/core/xml.rb +16 -16
  38. data/lib/webrat/core/xml/hpricot.rb +3 -3
  39. data/lib/webrat/core/xml/nokogiri.rb +11 -11
  40. data/lib/webrat/core/xml/rexml.rb +3 -3
  41. data/lib/webrat/core_extensions/blank.rb +1 -1
  42. data/lib/webrat/core_extensions/deprecate.rb +1 -1
  43. data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
  44. data/lib/webrat/core_extensions/meta_class.rb +1 -1
  45. data/lib/webrat/core_extensions/tcp_socket.rb +8 -8
  46. data/lib/webrat/mechanize.rb +9 -9
  47. data/lib/webrat/merb.rb +1 -1
  48. data/lib/webrat/merb_multipart_support.rb +27 -0
  49. data/lib/webrat/merb_session.rb +39 -24
  50. data/lib/webrat/rack_test.rb +32 -0
  51. data/lib/webrat/rails.rb +2 -2
  52. data/lib/webrat/rspec-rails.rb +3 -6
  53. data/lib/webrat/selenium.rb +2 -1
  54. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  55. data/lib/webrat/selenium/application_servers.rb +5 -0
  56. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  57. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  58. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  59. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  60. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  61. data/lib/webrat/selenium/location_strategy_javascript/button.js +14 -7
  62. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +4 -1
  63. data/lib/webrat/selenium/matchers.rb +1 -1
  64. data/lib/webrat/selenium/matchers/have_content.rb +4 -4
  65. data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
  66. data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
  67. data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
  68. data/lib/webrat/selenium/selenium_rc_server.rb +25 -19
  69. data/lib/webrat/selenium/selenium_session.rb +24 -17
  70. data/lib/webrat/selenium/silence_stream.rb +18 -0
  71. data/spec/fakes/test_session.rb +34 -0
  72. data/spec/integration/merb/.gitignore +21 -0
  73. data/spec/integration/merb/Rakefile +35 -0
  74. data/spec/integration/merb/app/controllers/application.rb +2 -0
  75. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  76. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  77. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  78. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  79. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  80. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  81. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  82. data/spec/integration/merb/config/environments/development.rb +15 -0
  83. data/spec/integration/merb/config/environments/rake.rb +11 -0
  84. data/spec/integration/merb/config/environments/test.rb +14 -0
  85. data/spec/integration/merb/config/init.rb +25 -0
  86. data/spec/integration/merb/config/rack.rb +11 -0
  87. data/spec/integration/merb/config/router.rb +34 -0
  88. data/spec/integration/merb/spec/spec.opts +1 -0
  89. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  90. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  91. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  92. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  93. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  94. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  95. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  96. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  97. data/spec/integration/rack/Rakefile +5 -0
  98. data/spec/integration/rack/rack_app.rb +16 -0
  99. data/spec/integration/rack/test/test_helper.rb +20 -0
  100. data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
  101. data/spec/integration/rails/.gitignore +3 -0
  102. data/spec/integration/rails/Rakefile +30 -0
  103. data/spec/integration/rails/app/controllers/application.rb +15 -0
  104. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  105. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  106. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  107. data/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
  108. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  109. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  110. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  111. data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  112. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  113. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  114. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  115. data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  116. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  117. data/spec/integration/rails/config/boot.rb +109 -0
  118. data/spec/integration/rails/config/environment.rb +12 -0
  119. data/spec/integration/rails/config/environments/development.rb +17 -0
  120. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  121. data/spec/integration/rails/config/environments/test.rb +22 -0
  122. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  123. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  124. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  125. data/spec/integration/rails/config/locales/en.yml +5 -0
  126. data/spec/integration/rails/config/routes.rb +18 -0
  127. data/spec/integration/rails/public/404.html +30 -0
  128. data/spec/integration/rails/public/422.html +30 -0
  129. data/spec/integration/rails/public/500.html +33 -0
  130. data/spec/integration/rails/script/about +4 -0
  131. data/spec/integration/rails/script/console +3 -0
  132. data/spec/integration/rails/script/dbconsole +3 -0
  133. data/spec/integration/rails/script/destroy +3 -0
  134. data/spec/integration/rails/script/generate +3 -0
  135. data/spec/integration/rails/script/performance/benchmarker +3 -0
  136. data/spec/integration/rails/script/performance/profiler +3 -0
  137. data/spec/integration/rails/script/performance/request +3 -0
  138. data/spec/integration/rails/script/plugin +3 -0
  139. data/spec/integration/rails/script/process/inspector +3 -0
  140. data/spec/integration/rails/script/process/reaper +3 -0
  141. data/spec/integration/rails/script/process/spawner +3 -0
  142. data/spec/integration/rails/script/runner +3 -0
  143. data/spec/integration/rails/script/server +3 -0
  144. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  145. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  146. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  147. data/spec/integration/rails/test/integration/webrat_test.rb +97 -0
  148. data/spec/integration/rails/test/test_helper.rb +25 -0
  149. data/spec/integration/sinatra/Rakefile +5 -0
  150. data/spec/integration/sinatra/classic_app.rb +64 -0
  151. data/spec/integration/sinatra/modular_app.rb +16 -0
  152. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  153. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  154. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  155. data/spec/private/core/configuration_spec.rb +116 -0
  156. data/spec/private/core/field_spec.rb +85 -0
  157. data/spec/private/core/link_spec.rb +24 -0
  158. data/spec/private/core/logging_spec.rb +10 -0
  159. data/spec/private/core/session_spec.rb +195 -0
  160. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  161. data/spec/private/merb/attaches_file_spec.rb +93 -0
  162. data/spec/private/merb/merb_session_spec.rb +61 -0
  163. data/spec/private/nokogiri_spec.rb +77 -0
  164. data/spec/private/rails/attaches_file_spec.rb +81 -0
  165. data/spec/private/rails/rails_session_spec.rb +110 -0
  166. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  167. data/spec/public/basic_auth_spec.rb +24 -0
  168. data/spec/public/check_spec.rb +191 -0
  169. data/spec/public/choose_spec.rb +118 -0
  170. data/spec/public/click_area_spec.rb +106 -0
  171. data/spec/public/click_button_spec.rb +496 -0
  172. data/spec/public/click_link_spec.rb +511 -0
  173. data/spec/public/fill_in_spec.rb +209 -0
  174. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  175. data/spec/public/locators/field_labeled_spec.rb +172 -0
  176. data/spec/public/locators/field_with_id_spec.rb +16 -0
  177. data/spec/public/matchers/contain_spec.rb +114 -0
  178. data/spec/public/matchers/have_selector_spec.rb +142 -0
  179. data/spec/public/matchers/have_tag_spec.rb +39 -0
  180. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  181. data/spec/public/reload_spec.rb +10 -0
  182. data/spec/public/save_and_open_spec.rb +70 -0
  183. data/spec/public/select_date_spec.rb +112 -0
  184. data/spec/public/select_datetime_spec.rb +137 -0
  185. data/spec/public/select_spec.rb +249 -0
  186. data/spec/public/select_time_spec.rb +100 -0
  187. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  188. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  189. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  190. data/spec/public/set_hidden_field_spec.rb +5 -0
  191. data/spec/public/submit_form_spec.rb +5 -0
  192. data/spec/public/visit_spec.rb +58 -0
  193. data/spec/public/within_spec.rb +177 -0
  194. data/spec/rcov.opts +1 -0
  195. data/spec/spec.opts +2 -0
  196. data/spec/spec_helper.rb +50 -0
  197. data/vendor/selenium-server.jar +0 -0
  198. data/webrat.gemspec +340 -0
  199. metadata +248 -33
  200. data/lib/webrat/selenium/application_server.rb +0 -71
  201. data/lib/webrat/selenium/merb_application_server.rb +0 -48
  202. data/lib/webrat/selenium/rails_application_server.rb +0 -42
  203. data/lib/webrat/selenium/sinatra_application_server.rb +0 -35
@@ -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
- if h.empty?
104
- send "#{http_method}", url, data || {}
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
@@ -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,5 +1,5 @@
1
1
  module Webrat
2
-
2
+
3
3
  def self.hpricot_document(stringlike)
4
4
  return stringlike.dom if stringlike.respond_to?(:dom)
5
5
 
@@ -15,5 +15,5 @@ module Webrat
15
15
  Hpricot(stringlike.to_s)
16
16
  end
17
17
  end
18
-
19
- end
18
+
19
+ 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,5 +1,5 @@
1
1
  module Webrat
2
-
2
+
3
3
  def self.rexml_document(stringlike)
4
4
  stringlike = stringlike.body.to_s if stringlike.respond_to?(:body)
5
5
 
@@ -20,5 +20,5 @@ module Webrat
20
20
  end
21
21
  end
22
22
  end
23
-
24
- end
23
+
24
+ end
@@ -12,7 +12,7 @@ class Object #:nodoc:
12
12
  def blank?
13
13
  respond_to?(:empty?) ? empty? : !self
14
14
  end
15
-
15
+
16
16
  # An object is present if it's not blank.
17
17
  def present?
18
18
  !blank?
@@ -5,4 +5,4 @@ class Module #:nodoc:
5
5
  __send__(new_method_name, *args)
6
6
  end
7
7
  end
8
- end
8
+ end
@@ -1,12 +1,12 @@
1
1
  class Array #:nodoc:
2
-
2
+
3
3
  def detect_mapped
4
4
  each do |element|
5
5
  result = yield element
6
6
  return result if result
7
7
  end
8
-
8
+
9
9
  return nil
10
10
  end
11
-
12
- end
11
+
12
+ end
@@ -3,4 +3,4 @@ class ::Object #:nodoc:
3
3
  class << self; self end
4
4
  end
5
5
  end
6
-
6
+
@@ -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
@@ -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