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.
- data/History.txt +34 -0
- data/Rakefile +16 -3
- data/lib/webrat/core/configuration.rb +9 -16
- 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 +50 -50
- 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 -11
- data/lib/webrat/core/elements/select_option.rb +9 -9
- 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 +12 -12
- data/lib/webrat/core/locators/locator.rb +5 -5
- data/lib/webrat/core/locators/select_option_locator.rb +11 -11
- data/lib/webrat/core/locators.rb +2 -2
- 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 +24 -24
- data/lib/webrat/core/methods.rb +14 -10
- data/lib/webrat/core/mime.rb +3 -3
- data/lib/webrat/core/save_and_open_page.rb +9 -9
- data/lib/webrat/core/scope.rb +54 -52
- data/lib/webrat/core/session.rb +20 -13
- 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/xml.rb +16 -16
- 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 +27 -0
- data/lib/webrat/mechanize.rb +9 -9
- data/lib/webrat/merb.rb +1 -1
- data/lib/webrat/merb_session.rb +10 -10
- data/lib/webrat/rack_test.rb +32 -0
- data/lib/webrat/rails.rb +2 -2
- data/lib/webrat/rspec-rails.rb +2 -2
- data/lib/webrat/selenium/application_server.rb +75 -0
- 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/matchers.rb +1 -1
- data/lib/webrat/selenium/merb_application_server.rb +50 -0
- data/lib/webrat/selenium/rails_application_server.rb +44 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +90 -0
- data/lib/webrat/selenium/selenium_session.rb +22 -31
- data/lib/webrat/selenium/silence_stream.rb +14 -0
- data/lib/webrat/selenium/sinatra_application_server.rb +37 -0
- data/lib/webrat/selenium.rb +5 -81
- data/lib/webrat.rb +8 -11
- 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
|
data/lib/webrat/core/methods.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/webrat/core/mime.rb
CHANGED
@@ -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
|