aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Koziarski <michael@koziarski.com>2007-09-21 20:45:49 +0000
committerMichael Koziarski <michael@koziarski.com>2007-09-21 20:45:49 +0000
commit9b468f4cd7daa9f1e8122938e6c2c5b8bf235a5f (patch)
tree26035d76b000cf31f6ada5155af5a4a2cd410628
parent4e0fef46369e78dd0b326c506b3006915edddfd3 (diff)
downloadrails-9b468f4cd7daa9f1e8122938e6c2c5b8bf235a5f.tar.gz
rails-9b468f4cd7daa9f1e8122938e6c2c5b8bf235a5f.tar.bz2
rails-9b468f4cd7daa9f1e8122938e6c2c5b8bf235a5f.zip
[html-scanner] Fix parsing of empty tags. Closes #7641. [anthony.bailey]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7528 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--actionpack/lib/action_controller/vendor/html-scanner/html/document.rb3
-rw-r--r--actionpack/test/controller/html-scanner/document_test.rb20
2 files changed, 23 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/vendor/html-scanner/html/document.rb b/actionpack/lib/action_controller/vendor/html-scanner/html/document.rb
index 29422937b2..329ab01560 100644
--- a/actionpack/lib/action_controller/vendor/html-scanner/html/document.rb
+++ b/actionpack/lib/action_controller/vendor/html-scanner/html/document.rb
@@ -22,6 +22,9 @@ module HTML #:nodoc:
if node.tag?
if node_stack.length > 1 && node.closing == :close
if node_stack.last.name == node.name
+ if node_stack.last.children.empty?
+ node_stack.last.children << Text.new(node_stack.last, node.line, node.position, "")
+ end
node_stack.pop
else
open_start = node_stack.last.position - 20
diff --git a/actionpack/test/controller/html-scanner/document_test.rb b/actionpack/test/controller/html-scanner/document_test.rb
index a6ba70dde1..0719883f31 100644
--- a/actionpack/test/controller/html-scanner/document_test.rb
+++ b/actionpack/test/controller/html-scanner/document_test.rb
@@ -75,6 +75,26 @@ class DocumentTest < Test::Unit::TestCase
assert_not_nil doc.find(:tag => "div", :children => { :count => 1, :only => { :tag => "table" } })
end
+ def test_tag_nesting_nothing_to_s
+ doc = HTML::Document.new("<tag></tag>")
+ assert_equal "<tag></tag>", doc.root.to_s
+ end
+
+ def test_tag_nesting_space_to_s
+ doc = HTML::Document.new("<tag> </tag>")
+ assert_equal "<tag> </tag>", doc.root.to_s
+ end
+
+ def test_tag_nesting_text_to_s
+ doc = HTML::Document.new("<tag>text</tag>")
+ assert_equal "<tag>text</tag>", doc.root.to_s
+ end
+
+ def test_tag_nesting_tag_to_s
+ doc = HTML::Document.new("<tag><nested /></tag>")
+ assert_equal "<tag><nested /></tag>", doc.root.to_s
+ end
+
def test_parse_cdata
doc = HTML::Document.new(<<-HTML)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"