jwilger-webrat 0.4.3.4 → 0.4.4.2

Sign up to get free protection for your applications and to get access to all the features.
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