summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--lib/rexml/sax2listener.rb2
-rw-r--r--test/rexml/parser/test_sax2.rb51
3 files changed, 61 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index cfbb986053..06cfd94dc3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sun Aug 11 19:06:03 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/sax2listener.rb (REXML::SAX2Listener#notationdecl): Fix
+ wrong number of arguments in the template listener.
+ [Bug #8731] [ruby-dev:47582]
+ Reported by Ippei Obayashi.
+ * test/rexml/parser/test_sax2.rb: Add tests for parsing notation
+ declarations with SAX2 API.
+
Sun Aug 11 18:44:04 2013 Kouhei Sutou <kou@cozmixng.org>
* lib/rexml/sax2listener.rb (REXML::SAX2Listener#elementdecl): Fix wrong
diff --git a/lib/rexml/sax2listener.rb b/lib/rexml/sax2listener.rb
index ce4435d345..9f276eb4ed 100644
--- a/lib/rexml/sax2listener.rb
+++ b/lib/rexml/sax2listener.rb
@@ -73,7 +73,7 @@ module REXML
def entitydecl declaration
end
# <!NOTATION ...>
- def notationdecl content
+ def notationdecl name, public_or_system, public_id, system_id
end
# Called when <![CDATA[ ... ]]> is encountered in a document.
# @p content "..."
diff --git a/test/rexml/parser/test_sax2.rb b/test/rexml/parser/test_sax2.rb
index 5ce9db79fd..bd3555eec6 100644
--- a/test/rexml/parser/test_sax2.rb
+++ b/test/rexml/parser/test_sax2.rb
@@ -145,5 +145,56 @@ class TestSAX2Parser < Test::Unit::TestCase
end
end
end
+
+ class TestNotationDeclaration < self
+ class Listener
+ include REXML::SAX2Listener
+ attr_reader :notation_declarations
+ def initialize
+ @notation_declarations = []
+ end
+
+ def notationdecl(*declaration)
+ super
+ @notation_declarations << declaration
+ end
+ end
+
+ private
+ def parse(internal_subset)
+ listener = Listener.new
+ parser = REXML::Parsers::SAX2Parser.new(xml(internal_subset))
+ parser.listen(listener)
+ parser.parse
+ listener.notation_declarations
+ end
+
+ class TestExternlID < self
+ def test_system
+ declaration = ["name", "SYSTEM", nil, "system-literal"]
+ assert_equal([declaration],
+ parse(<<-INTERNAL_SUBSET))
+<!NOTATION name SYSTEM "system-literal">
+ INTERNAL_SUBSET
+ end
+
+ def test_public
+ declaration = ["name", "PUBLIC", "public-literal", "system-literal"]
+ assert_equal([declaration], parse(<<-INTERNAL_SUBSET))
+<!NOTATION name PUBLIC "public-literal" "system-literal">
+ INTERNAL_SUBSET
+ end
+ end
+
+ class TestPublicID < self
+ def test_literal
+ declaration = ["name", "PUBLIC", "public-literal", nil]
+ assert_equal([declaration],
+ parse(<<-INTERNAL_SUBSET))
+<!NOTATION name PUBLIC "public-literal">
+ INTERNAL_SUBSET
+ end
+ end
+ end
end
end