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
@@ -10,15 +10,19 @@ module Webrat
10
10
  RUBY
11
11
  end
12
12
  end
13
-
13
+
14
14
  def webrat
15
15
  webrat_session
16
16
  end
17
-
17
+
18
18
  def webrat_session
19
- @_webrat_session ||= ::Webrat.session_class.new(self)
19
+ if Webrat.configuration.mode == :rack_test
20
+ @_webrat_session ||= ::Webrat::RackTestSession.new(rack_test_session)
21
+ else
22
+ @_webrat_session ||= ::Webrat.session_class.new(self)
23
+ end
20
24
  end
21
-
25
+
22
26
  # all of these methods delegate to the @session, which should
23
27
  # be created transparently.
24
28
  #
@@ -31,7 +35,7 @@ module Webrat
31
35
  :header, :http_accept, :basic_auth,
32
36
  :save_and_open_page,
33
37
  :fills_in, :fill_in,
34
- :checks, :check,
38
+ :checks, :check,
35
39
  :unchecks, :uncheck,
36
40
  :chooses, :choose,
37
41
  :selects, :select,
@@ -47,15 +51,13 @@ module Webrat
47
51
  :select_option,
48
52
  :set_hidden_field, :submit_form,
49
53
  :request_page, :current_dom,
50
- :response_body,
54
+ :response_body,
51
55
  :selects_date, :selects_time, :selects_datetime,
52
56
  :select_date, :select_time, :select_datetime,
53
57
  :field_by_xpath,
54
58
  :field_with_id,
55
59
  :selenium,
56
- :simulate, :automate
57
-
58
-
59
-
60
+ :simulate, :automate,
61
+ :field_named
60
62
  end
61
- end
63
+ end
@@ -1,6 +1,6 @@
1
1
  module Webrat #:nodoc:
2
2
  module MIME #:nodoc:
3
-
3
+
4
4
  def self.mime_type(string_or_symbol) #:nodoc:
5
5
  if string_or_symbol.is_a?(String)
6
6
  string_or_symbol
@@ -24,6 +24,6 @@ module Webrat #:nodoc:
24
24
  end
25
25
  end
26
26
  end
27
-
27
+
28
28
  end
29
- end
29
+ end
@@ -2,49 +2,47 @@ module Webrat
2
2
  module SaveAndOpenPage
3
3
  # Saves the page out to RAILS_ROOT/tmp/ and opens it in the default
4
4
  # web browser if on OS X. Useful for debugging.
5
- #
5
+ #
6
6
  # Example:
7
7
  # save_and_open_page
8
8
  def save_and_open_page
9
9
  return unless File.exist?(saved_page_dir)
10
10
 
11
11
  filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.html"
12
-
12
+
13
13
  File.open(filename, "w") do |f|
14
14
  f.write rewrite_css_and_image_references(response_body)
15
15
  end
16
16
 
17
17
  open_in_browser(filename)
18
18
  end
19
-
19
+
20
20
  def open_in_browser(path) # :nodoc
21
- platform = ruby_platform
22
- if platform =~ /cygwin/ || platform =~ /win32/
23
- `rundll32 url.dll,FileProtocolHandler #{path.gsub("/", "\\\\")}`
24
- elsif platform =~ /darwin/
25
- `open #{path}`
26
- end
21
+ require "launchy"
22
+ Launchy::Browser.run(path)
23
+ rescue LoadError
24
+ warn "Sorry, you need to install launchy to open pages: `gem install launchy`"
27
25
  end
28
-
26
+
29
27
  def rewrite_css_and_image_references(response_html) # :nodoc:
30
28
  return response_html unless doc_root
31
- response_html.gsub(/"\/(stylesheets|images)/, doc_root + '/\1')
29
+ response_html.gsub(/("|')\/(stylesheets|images)/, '\1' + doc_root + '/\2')
32
30
  end
33
-
31
+
34
32
  def saved_page_dir #:nodoc:
35
33
  File.expand_path(".")
36
34
  end
37
-
35
+
38
36
  def doc_root #:nodoc:
39
37
  nil
40
38
  end
41
-
39
+
42
40
  private
43
41
 
44
42
  # accessor for testing
45
43
  def ruby_platform
46
44
  RUBY_PLATFORM
47
45
  end
48
-
46
+
49
47
  end
50
- end
48
+ end
@@ -6,36 +6,36 @@ module Webrat
6
6
  # An HTML element (link, button, field, etc.) that Webrat expected was not found on the page
7
7
  class NotFoundError < WebratError
8
8
  end
9
-
9
+
10
10
  class Scope
11
11
  include Logging
12
12
  include Locators
13
-
13
+
14
14
  def self.from_page(session, response, response_body) #:nodoc:
15
15
  new(session) do
16
16
  @response = response
17
17
  @response_body = response_body
18
18
  end
19
19
  end
20
-
20
+
21
21
  def self.from_scope(session, scope, selector) #:nodoc:
22
22
  new(session) do
23
23
  @scope = scope
24
24
  @selector = selector
25
25
  end
26
26
  end
27
-
27
+
28
28
  attr_reader :session
29
-
29
+
30
30
  def initialize(session, &block) #:nodoc:
31
31
  @session = session
32
32
  instance_eval(&block) if block_given?
33
-
33
+
34
34
  if @selector && scoped_dom.nil?
35
35
  raise Webrat::NotFoundError.new("The scope was not found on the page: #{@selector.inspect}")
36
36
  end
37
37
  end
38
-
38
+
39
39
  # Verifies an input field or textarea exists on the current page, and stores a value for
40
40
  # it which will be sent when the form is submitted.
41
41
  #
@@ -53,7 +53,7 @@ module Webrat
53
53
  end
54
54
 
55
55
  webrat_deprecate :fills_in, :fill_in
56
-
56
+
57
57
  # Verifies that a hidden field exists on the current page and sets
58
58
  # the value to that given by the <tt>:to</tt> option.
59
59
  #
@@ -63,7 +63,7 @@ module Webrat
63
63
  field = locate_field(field_locator, HiddenField)
64
64
  field.set(options[:to])
65
65
  end
66
-
66
+
67
67
  # Verifies that an input checkbox exists on the current page and marks it
68
68
  # as checked, so that the value will be submitted with the form.
69
69
  #
@@ -74,7 +74,7 @@ module Webrat
74
74
  end
75
75
 
76
76
  webrat_deprecate :checks, :check
77
-
77
+
78
78
  # Verifies that an input checkbox exists on the current page and marks it
79
79
  # as unchecked, so that the value will not be submitted with the form.
80
80
  #
@@ -85,7 +85,7 @@ module Webrat
85
85
  end
86
86
 
87
87
  webrat_deprecate :unchecks, :uncheck
88
-
88
+
89
89
  # Verifies that an input radio button exists on the current page and marks it
90
90
  # as checked, so that the value will be submitted with the form.
91
91
  #
@@ -96,7 +96,7 @@ module Webrat
96
96
  end
97
97
 
98
98
  webrat_deprecate :chooses, :choose
99
-
99
+
100
100
  # Verifies that a an option element exists on the current page with the specified
101
101
  # text. You can optionally restrict the search to a specific select list by
102
102
  # assigning <tt>options[:from]</tt> the value of the select list's name or
@@ -111,7 +111,7 @@ module Webrat
111
111
  end
112
112
 
113
113
  webrat_deprecate :selects, :select
114
-
114
+
115
115
  DATE_TIME_SUFFIXES = {
116
116
  :year => '1i',
117
117
  :month => '2i',
@@ -120,9 +120,9 @@ module Webrat
120
120
  :minute => '5i'
121
121
  }
122
122
 
123
- # Verifies that date elements (year, month, day) exist on the current page
123
+ # Verifies that date elements (year, month, day) exist on the current page
124
124
  # with the specified values. You can optionally restrict the search to a specific
125
- # date's elements by assigning <tt>options[:from]</tt> the value of the date's
125
+ # date's elements by assigning <tt>options[:from]</tt> the value of the date's
126
126
  # label. Selects all the date elements with date provided. The date provided may
127
127
  # be a string or a Date/Time object.
128
128
  #
@@ -136,15 +136,15 @@ module Webrat
136
136
  # select_date Date.parse("December 25, 2000"), :from => "Event"
137
137
  # select_date "April 26, 1982", :id_prefix => 'birthday'
138
138
  def select_date(date_to_select, options ={})
139
- date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
140
- date_to_select : Date.parse(date_to_select)
141
-
139
+ date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
140
+ date_to_select : Date.parse(date_to_select)
141
+
142
142
  id_prefix = locate_id_prefix(options) do
143
143
  year_field = FieldByIdLocator.new(@session, dom, /(.*?)_#{DATE_TIME_SUFFIXES[:year]}$/).locate
144
144
  raise NotFoundError.new("No date fields were found") unless year_field && year_field.id =~ /(.*?)_1i/
145
145
  $1
146
146
  end
147
-
147
+
148
148
  select date.year, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:year]}"
149
149
  select date.strftime('%B'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:month]}"
150
150
  select date.day, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:day]}"
@@ -152,9 +152,9 @@ module Webrat
152
152
 
153
153
  webrat_deprecate :selects_date, :select_date
154
154
 
155
- # Verifies that time elements (hour, minute) exist on the current page
155
+ # Verifies that time elements (hour, minute) exist on the current page
156
156
  # with the specified values. You can optionally restrict the search to a specific
157
- # time's elements by assigning <tt>options[:from]</tt> the value of the time's
157
+ # time's elements by assigning <tt>options[:from]</tt> the value of the time's
158
158
  # label. Selects all the time elements with date provided. The time provided may
159
159
  # be a string or a Time object.
160
160
  #
@@ -164,28 +164,28 @@ module Webrat
164
164
  #
165
165
  # Note: Just like Rails' time_select helper this assumes the form is using
166
166
  # 24 hour select boxes, and not 12 hours with AM/PM.
167
- #
167
+ #
168
168
  # Examples:
169
169
  # select_time "9:30"
170
170
  # select_date "3:30PM", :from => "Party Time"
171
171
  # select_date Time.parse("10:00PM"), :from => "Event"
172
172
  # select_date "10:30AM", :id_prefix => 'meeting'
173
173
  def select_time(time_to_select, options ={})
174
- time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
174
+ time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
175
175
 
176
176
  id_prefix = locate_id_prefix(options) do
177
177
  hour_field = FieldByIdLocator.new(@session, dom, /(.*?)_#{DATE_TIME_SUFFIXES[:hour]}$/).locate
178
178
  raise NotFoundError.new("No time fields were found") unless hour_field && hour_field.id =~ /(.*?)_4i/
179
179
  $1
180
180
  end
181
-
181
+
182
182
  select time.hour.to_s.rjust(2,'0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:hour]}"
183
183
  select time.min.to_s.rjust(2,'0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:minute]}"
184
184
  end
185
185
 
186
186
  webrat_deprecate :selects_time, :select_time
187
-
188
- # Verifies and selects all the date and time elements on the current page.
187
+
188
+ # Verifies and selects all the date and time elements on the current page.
189
189
  # See #select_time and #select_date for more details and available options.
190
190
  #
191
191
  # Examples:
@@ -194,23 +194,23 @@ module Webrat
194
194
  # select_datetime Time.parse("December 25, 2000 15:30"), :from => "Event"
195
195
  # select_datetime "April 26, 1982 5:50PM", :id_prefix => 'birthday'
196
196
  def select_datetime(time_to_select, options ={})
197
- time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
198
-
197
+ time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
198
+
199
199
  options[:id_prefix] ||= (options[:from] ? FieldByIdLocator.new(@session, dom, options[:from]).locate : nil)
200
-
200
+
201
201
  select_date time, options
202
202
  select_time time, options
203
203
  end
204
204
 
205
205
  webrat_deprecate :selects_datetime, :select_datetime
206
-
206
+
207
207
  # Verifies that an input file field exists on the current page and sets
208
208
  # its value to the given +file+, so that the file will be uploaded
209
209
  # along with the form. An optional <tt>content_type</tt> may be given.
210
210
  #
211
211
  # Example:
212
- # attaches_file "Resume", "/path/to/the/resume.txt"
213
- # attaches_file "Photo", "/path/to/the/image.png", "image/png"
212
+ # attach_file "Resume", "/path/to/the/resume.txt"
213
+ # attach_file "Photo", "/path/to/the/image.png", "image/png"
214
214
  def attach_file(field_locator, path, content_type = nil)
215
215
  locate_field(field_locator, FileField).set(path, content_type)
216
216
  end
@@ -229,13 +229,13 @@ module Webrat
229
229
  def click_area(area_name)
230
230
  find_area(area_name).click
231
231
  end
232
-
232
+
233
233
  webrat_deprecate :clicks_area, :click_area
234
-
234
+
235
235
  # Issues a request for the URL pointed to by a link on the current page,
236
236
  # follows any redirects, and verifies the final page load was successful.
237
- #
238
- # click_link has very basic support for detecting Rails-generated
237
+ #
238
+ # click_link has very basic support for detecting Rails-generated
239
239
  # JavaScript onclick handlers for PUT, POST and DELETE links, as well as
240
240
  # CSRF authenticity tokens if they are present.
241
241
  #
@@ -243,15 +243,15 @@ module Webrat
243
243
  #
244
244
  # Passing a :method in the options hash overrides the HTTP method used
245
245
  # for making the link request
246
- #
246
+ #
247
247
  # It will try to find links by (in order of precedence):
248
248
  # innerHTML, with simple &nbsp; handling
249
249
  # title
250
250
  # id
251
- #
251
+ #
252
252
  # innerHTML and title are matchable by text subtring or Regexp
253
253
  # id is matchable by full text equality or Regexp
254
- #
254
+ #
255
255
  # Example:
256
256
  # click_link "Sign up"
257
257
  # click_link "Sign up", :javascript => false
@@ -261,7 +261,7 @@ module Webrat
261
261
  end
262
262
 
263
263
  webrat_deprecate :clicks_link, :click_link
264
-
264
+
265
265
  # Verifies that a submit button exists for the form, then submits the form, follows
266
266
  # any redirects, and verifies the final page was successful.
267
267
  #
@@ -288,38 +288,38 @@ module Webrat
288
288
  def submit_form(id)
289
289
  FormLocator.new(@session, dom, id).locate.submit
290
290
  end
291
-
291
+
292
292
  def dom # :nodoc:
293
293
  return @dom if @dom
294
-
294
+
295
295
  if @selector
296
296
  @dom = scoped_dom
297
297
  else
298
298
  @dom = page_dom
299
299
  end
300
-
300
+
301
301
  return @dom
302
302
  end
303
-
303
+
304
304
  protected
305
-
305
+
306
306
  def page_dom #:nodoc:
307
307
  return @response.dom if @response.respond_to?(:dom)
308
-
308
+
309
309
  if @session.xml_content_type?
310
310
  dom = Webrat::XML.xml_document(@response_body)
311
311
  else
312
312
  dom = Webrat::XML.html_document(@response_body)
313
313
  end
314
-
314
+
315
315
  Webrat.define_dom_method(@response, dom)
316
316
  return dom
317
317
  end
318
-
318
+
319
319
  def scoped_dom
320
320
  Webrat::XML.css_at(@scope.dom, @selector)
321
321
  end
322
-
322
+
323
323
  def locate_field(field_locator, *field_types) #:nodoc:
324
324
  if field_locator.is_a?(Field)
325
325
  field_locator
@@ -327,10 +327,10 @@ module Webrat
327
327
  field(field_locator, *field_types)
328
328
  end
329
329
  end
330
-
330
+
331
331
  def locate_id_prefix(options, &location_strategy) #:nodoc:
332
332
  return options[:id_prefix] if options[:id_prefix]
333
-
333
+
334
334
  if options[:from]
335
335
  if (label = LabelLocator.new(@session, dom, options[:from]).locate)
336
336
  label.for_id
@@ -341,10 +341,10 @@ module Webrat
341
341
  yield
342
342
  end
343
343
  end
344
-
344
+
345
345
  def forms #:nodoc:
346
346
  @forms ||= Form.load_all(@session, dom)
347
347
  end
348
-
348
+
349
349
  end
350
350
  end