Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fix the html-scanner to count children correctly, playing nicely with…

… :only, fixes #2181 [patrick@lenz.sh]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2670 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit e515ba9ecd43101d31ae9afea8de766e886192dd 1 parent 9601f96
@jamis jamis authored
View
6 actionpack/lib/action_controller/vendor/html-scanner/html/node.rb
@@ -435,7 +435,11 @@ def match(conditions)
# count children
if opts = conditions[:children]
- matches = children.select { |c| c.match(/./) }
+ matches = children.select do |c|
+ c.match(/./) or
+ (c.kind_of?(HTML::Tag) and (c.closing == :self or ! c.childless?))
+ end
+
matches = matches.select { |c| c.match(opts[:only]) } if opts[:only]
opts.each do |key, value|
next if key == :only
View
21 actionpack/test/controller/test_test.rb
@@ -20,6 +20,7 @@ def test_html_output
render :text => <<HTML
<html>
<body>
+ <a href="/"><img src="/images/button.png" /></a>
<div id="foo">
<ul>
<li class="item">hello</li>
@@ -121,8 +122,8 @@ def test_assert_tag_child
# there is a tag with a child 'input' tag
assert_tag :child => { :tag => "input" }
- # there is no tag with a child 'a' tag
- assert_no_tag :child => { :tag => "a" }
+ # there is no tag with a child 'strong' tag
+ assert_no_tag :child => { :tag => "strong" }
end
def test_assert_tag_ancestor
@@ -233,6 +234,22 @@ def test_assert_tag_multiple
:only => { :tag => "li" } } }
end
+ def test_assert_tag_children_without_content
+ process :test_html_output
+
+ # there is a form tag with an 'input' child which is a self closing tag
+ assert_tag :tag => "form",
+ :children => { :count => 1,
+ :only => { :tag => "input" } }
+
+ # the body tag has an 'a' child which in turn has an 'img' child
+ assert_tag :tag => "body",
+ :children => { :count => 1,
+ :only => { :tag => "a",
+ :children => { :count => 1,
+ :only => { :tag => "img" } } } }
+ end
+
def test_assert_generates
assert_generates 'controller/action/5', :controller => 'controller', :action => 'action', :id => '5'
end
Please sign in to comment.
Something went wrong with that request. Please try again.