jwilger-webrat 0.4.3.4 → 0.4.4.2

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 (62) hide show
  1. data/History.txt +34 -0
  2. data/Rakefile +16 -3
  3. data/lib/webrat/core/configuration.rb +9 -16
  4. data/lib/webrat/core/elements/area.rb +7 -7
  5. data/lib/webrat/core/elements/element.rb +11 -11
  6. data/lib/webrat/core/elements/field.rb +50 -50
  7. data/lib/webrat/core/elements/form.rb +17 -17
  8. data/lib/webrat/core/elements/label.rb +6 -6
  9. data/lib/webrat/core/elements/link.rb +13 -11
  10. data/lib/webrat/core/elements/select_option.rb +9 -9
  11. data/lib/webrat/core/locators/area_locator.rb +10 -10
  12. data/lib/webrat/core/locators/button_locator.rb +13 -13
  13. data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
  14. data/lib/webrat/core/locators/field_labeled_locator.rb +11 -11
  15. data/lib/webrat/core/locators/field_locator.rb +7 -7
  16. data/lib/webrat/core/locators/field_named_locator.rb +10 -10
  17. data/lib/webrat/core/locators/form_locator.rb +6 -6
  18. data/lib/webrat/core/locators/label_locator.rb +9 -9
  19. data/lib/webrat/core/locators/link_locator.rb +12 -12
  20. data/lib/webrat/core/locators/locator.rb +5 -5
  21. data/lib/webrat/core/locators/select_option_locator.rb +11 -11
  22. data/lib/webrat/core/locators.rb +2 -2
  23. data/lib/webrat/core/logging.rb +7 -4
  24. data/lib/webrat/core/matchers/have_content.rb +12 -12
  25. data/lib/webrat/core/matchers/have_selector.rb +9 -9
  26. data/lib/webrat/core/matchers/have_tag.rb +4 -4
  27. data/lib/webrat/core/matchers/have_xpath.rb +24 -24
  28. data/lib/webrat/core/methods.rb +14 -10
  29. data/lib/webrat/core/mime.rb +3 -3
  30. data/lib/webrat/core/save_and_open_page.rb +9 -9
  31. data/lib/webrat/core/scope.rb +54 -52
  32. data/lib/webrat/core/session.rb +20 -13
  33. data/lib/webrat/core/xml/hpricot.rb +3 -3
  34. data/lib/webrat/core/xml/nokogiri.rb +11 -11
  35. data/lib/webrat/core/xml/rexml.rb +3 -3
  36. data/lib/webrat/core/xml.rb +16 -16
  37. data/lib/webrat/core_extensions/blank.rb +1 -1
  38. data/lib/webrat/core_extensions/deprecate.rb +1 -1
  39. data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
  40. data/lib/webrat/core_extensions/meta_class.rb +1 -1
  41. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  42. data/lib/webrat/mechanize.rb +9 -9
  43. data/lib/webrat/merb.rb +1 -1
  44. data/lib/webrat/merb_session.rb +10 -10
  45. data/lib/webrat/rack_test.rb +32 -0
  46. data/lib/webrat/rails.rb +2 -2
  47. data/lib/webrat/rspec-rails.rb +2 -2
  48. data/lib/webrat/selenium/application_server.rb +75 -0
  49. data/lib/webrat/selenium/matchers/have_content.rb +4 -4
  50. data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
  51. data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
  52. data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
  53. data/lib/webrat/selenium/matchers.rb +1 -1
  54. data/lib/webrat/selenium/merb_application_server.rb +50 -0
  55. data/lib/webrat/selenium/rails_application_server.rb +44 -0
  56. data/lib/webrat/selenium/selenium_rc_server.rb +90 -0
  57. data/lib/webrat/selenium/selenium_session.rb +22 -31
  58. data/lib/webrat/selenium/silence_stream.rb +14 -0
  59. data/lib/webrat/selenium/sinatra_application_server.rb +37 -0
  60. data/lib/webrat/selenium.rb +5 -81
  61. data/lib/webrat.rb +8 -11
  62. metadata +10 -2
@@ -1,20 +1,20 @@
1
1
  module Webrat
2
2
  module Matchers
3
-
3
+
4
4
  class HasContent #:nodoc:
5
5
  def initialize(content)
6
6
  @content = content
7
7
  end
8
-
8
+
9
9
  def matches?(stringlike)
10
10
  if Webrat.configuration.parse_with_nokogiri?
11
11
  @document = Webrat.nokogiri_document(stringlike)
12
12
  else
13
13
  @document = Webrat.hpricot_document(stringlike)
14
14
  end
15
-
15
+
16
16
  @element = Webrat::XML.inner_text(@document)
17
-
17
+
18
18
  case @content
19
19
  when String
20
20
  @element.include?(@content)
@@ -22,7 +22,7 @@ module Webrat
22
22
  @element.match(@content)
23
23
  end
24
24
  end
25
-
25
+
26
26
  # ==== Returns
27
27
  # String:: The failure message.
28
28
  def failure_message
@@ -34,11 +34,11 @@ module Webrat
34
34
  def negative_failure_message
35
35
  "expected the following element's content to not #{content_message}:\n#{squeeze_space(@element)}"
36
36
  end
37
-
37
+
38
38
  def squeeze_space(inner_text)
39
39
  inner_text.gsub(/^\s*$/, "").squeeze("\n")
40
40
  end
41
-
41
+
42
42
  def content_message
43
43
  case @content
44
44
  when String
@@ -48,26 +48,26 @@ module Webrat
48
48
  end
49
49
  end
50
50
  end
51
-
51
+
52
52
  # Matches the contents of an HTML document with
53
53
  # whatever string is supplied
54
54
  def contain(content)
55
55
  HasContent.new(content)
56
56
  end
57
-
57
+
58
58
  # Asserts that the body of the response contain
59
59
  # the supplied string or regexp
60
60
  def assert_contain(content)
61
61
  hc = HasContent.new(content)
62
62
  assert hc.matches?(response_body), hc.failure_message
63
63
  end
64
-
64
+
65
65
  # Asserts that the body of the response
66
66
  # does not contain the supplied string or regepx
67
67
  def assert_not_contain(content)
68
68
  hc = HasContent.new(content)
69
69
  assert !hc.matches?(response_body), hc.negative_failure_message
70
70
  end
71
-
71
+
72
72
  end
73
- end
73
+ end
@@ -2,7 +2,7 @@ require "webrat/core/matchers/have_xpath"
2
2
 
3
3
  module Webrat
4
4
  module Matchers
5
-
5
+
6
6
  class HaveSelector < HaveXpath #:nodoc:
7
7
  # ==== Returns
8
8
  # String:: The failure message.
@@ -15,7 +15,7 @@ module Webrat
15
15
  def negative_failure_message
16
16
  "expected following output to omit a #{tag_inspect}:\n#{@document}"
17
17
  end
18
-
18
+
19
19
  def tag_inspect
20
20
  options = @options.dup
21
21
  count = options.delete(:count)
@@ -40,9 +40,9 @@ module Webrat
40
40
  ast.to_xpath
41
41
  end.first
42
42
  end
43
-
43
+
44
44
  end
45
-
45
+
46
46
  # Matches HTML content against a CSS 3 selector.
47
47
  #
48
48
  # ==== Parameters
@@ -54,21 +54,21 @@ module Webrat
54
54
  HaveSelector.new(name, attributes, &block)
55
55
  end
56
56
  alias_method :match_selector, :have_selector
57
-
58
-
57
+
58
+
59
59
  # Asserts that the body of the response contains
60
60
  # the supplied selector
61
61
  def assert_have_selector(name, attributes = {}, &block)
62
62
  matcher = HaveSelector.new(name, attributes, &block)
63
63
  assert matcher.matches?(response_body), matcher.failure_message
64
64
  end
65
-
65
+
66
66
  # Asserts that the body of the response
67
67
  # does not contain the supplied string or regepx
68
68
  def assert_have_no_selector(name, attributes = {}, &block)
69
69
  matcher = HaveSelector.new(name, attributes, &block)
70
70
  assert !matcher.matches?(response_body), matcher.negative_failure_message
71
71
  end
72
-
72
+
73
73
  end
74
- end
74
+ end
@@ -6,16 +6,16 @@ module Webrat
6
6
  def have_tag(*args, &block)
7
7
  have_selector(*args, &block)
8
8
  end
9
-
9
+
10
10
  alias_method :match_tag, :have_tag
11
-
11
+
12
12
  def assert_have_tag(*args, &block)
13
13
  assert_have_selector(*args, &block)
14
14
  end
15
-
15
+
16
16
  def assert_have_no_tag(*args, &block)
17
17
  assert_have_no_selector(*args, &block)
18
18
  end
19
19
 
20
20
  end
21
- end
21
+ end
@@ -3,25 +3,25 @@ require "webrat/core/xml/rexml"
3
3
 
4
4
  module Webrat
5
5
  module Matchers
6
-
6
+
7
7
  class HaveXpath #:nodoc:
8
8
  def initialize(expected, options = {}, &block)
9
9
  @expected = expected
10
10
  @options = options
11
11
  @block = block
12
12
  end
13
-
13
+
14
14
  def matches?(stringlike, &block)
15
15
  @block ||= block
16
16
  matched = matches(stringlike)
17
-
17
+
18
18
  if @options[:count]
19
19
  matched.size == @options[:count] && (!@block || @block.call(matched))
20
20
  else
21
21
  matched.any? && (!@block || @block.call(matched))
22
22
  end
23
23
  end
24
-
24
+
25
25
  def matches(stringlike)
26
26
  if Webrat.configuration.parse_with_nokogiri?
27
27
  nokogiri_matches(stringlike)
@@ -29,7 +29,7 @@ module Webrat
29
29
  rexml_matches(stringlike)
30
30
  end
31
31
  end
32
-
32
+
33
33
  def rexml_matches(stringlike)
34
34
  if REXML::Node === stringlike || Array === stringlike
35
35
  @query = query.map { |q| q.gsub(%r'//', './') }
@@ -49,48 +49,48 @@ module Webrat
49
49
  end
50
50
  end.flatten.compact
51
51
  end
52
-
52
+
53
53
  def nokogiri_matches(stringlike)
54
54
  if Nokogiri::XML::NodeSet === stringlike
55
55
  @query = query.gsub(%r'//', './')
56
56
  else
57
57
  @query = query
58
58
  end
59
-
59
+
60
60
  add_options_conditions_to(@query)
61
-
61
+
62
62
  @document = Webrat::XML.document(stringlike)
63
63
  @document.xpath(*@query)
64
64
  end
65
-
65
+
66
66
  def add_options_conditions_to(query)
67
67
  add_attributes_conditions_to(query)
68
68
  add_content_condition_to(query)
69
69
  end
70
-
70
+
71
71
  def add_attributes_conditions_to(query)
72
72
  attribute_conditions = []
73
-
73
+
74
74
  @options.each do |key, value|
75
75
  next if [:content, :count].include?(key)
76
76
  attribute_conditions << "@#{key} = #{xpath_escape(value)}"
77
77
  end
78
-
78
+
79
79
  if attribute_conditions.any?
80
80
  query << "[#{attribute_conditions.join(' and ')}]"
81
81
  end
82
82
  end
83
-
83
+
84
84
  def add_content_condition_to(query)
85
85
  if @options[:content]
86
86
  query << "[contains(., #{xpath_escape(@options[:content])})]"
87
87
  end
88
88
  end
89
-
89
+
90
90
  def query
91
91
  @expected
92
92
  end
93
-
93
+
94
94
  # ==== Returns
95
95
  # String:: The failure message.
96
96
  def failure_message
@@ -102,15 +102,15 @@ module Webrat
102
102
  def negative_failure_message
103
103
  "expected following text to not match xpath #{@expected}:\n#{@document}"
104
104
  end
105
-
105
+
106
106
  protected
107
-
107
+
108
108
  def xpath_escape(string)
109
109
  if string.include?("'") && string.include?('"')
110
110
  parts = string.split("'").map do |part|
111
111
  "'#{part}'"
112
112
  end
113
-
113
+
114
114
  "concat(" + parts.join(", \"'\", ") + ")"
115
115
  elsif string.include?("'")
116
116
  "\"#{string}\""
@@ -118,9 +118,9 @@ module Webrat
118
118
  "'#{string}'"
119
119
  end
120
120
  end
121
-
121
+
122
122
  end
123
-
123
+
124
124
  # Matches HTML content against an XPath query
125
125
  #
126
126
  # ==== Parameters
@@ -132,16 +132,16 @@ module Webrat
132
132
  HaveXpath.new(expected, options, &block)
133
133
  end
134
134
  alias_method :match_xpath, :have_xpath
135
-
135
+
136
136
  def assert_have_xpath(expected, options = {}, &block)
137
137
  hs = HaveXpath.new(expected, options, &block)
138
138
  assert hs.matches?(response_body), hs.failure_message
139
139
  end
140
-
140
+
141
141
  def assert_have_no_xpath(expected, options = {}, &block)
142
142
  hs = HaveXpath.new(expected, options, &block)
143
143
  assert !hs.matches?(response_body), hs.negative_failure_message
144
144
  end
145
-
145
+
146
146
  end
147
- end
147
+ end
@@ -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,15 @@ 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
60
  :simulate, :automate
57
-
58
-
59
-
61
+
62
+
63
+
60
64
  end
61
- end
65
+ 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,21 +2,21 @@ 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
21
  platform = ruby_platform
22
22
  if platform =~ /cygwin/ || platform =~ /win32/
@@ -25,26 +25,26 @@ module Webrat
25
25
  `open #{path}`
26
26
  end
27
27
  end
28
-
28
+
29
29
  def rewrite_css_and_image_references(response_html) # :nodoc:
30
30
  return response_html unless doc_root
31
31
  response_html.gsub(/"\/(stylesheets|images)/, doc_root + '/\1')
32
32
  end
33
-
33
+
34
34
  def saved_page_dir #:nodoc:
35
35
  File.expand_path(".")
36
36
  end
37
-
37
+
38
38
  def doc_root #:nodoc:
39
39
  nil
40
40
  end
41
-
41
+
42
42
  private
43
43
 
44
44
  # accessor for testing
45
45
  def ruby_platform
46
46
  RUBY_PLATFORM
47
47
  end
48
-
48
+
49
49
  end
50
- end
50
+ end