diff options
Diffstat (limited to 'test/rexml/test_doctype.rb')
-rw-r--r-- | test/rexml/test_doctype.rb | 151 |
1 files changed, 111 insertions, 40 deletions
diff --git a/test/rexml/test_doctype.rb b/test/rexml/test_doctype.rb index 91de05b05f..d728cba606 100644 --- a/test/rexml/test_doctype.rb +++ b/test/rexml/test_doctype.rb @@ -4,65 +4,111 @@ require 'rexml/document' module REXMLTests class TestDocTypeAccessor < Test::Unit::TestCase - def setup @sysid = "urn:x-test:sysid1" - @notid1 = "urn:x-test:notation1" - @notid2 = "urn:x-test:notation2" - document_string1 = <<-"XMLEND" - <!DOCTYPE r SYSTEM "#{@sysid}" [ - <!NOTATION n1 SYSTEM "#{@notid1}"> - <!NOTATION n2 SYSTEM "#{@notid2}"> + @notation_id1 = "urn:x-test:notation1" + @notation_id2 = "urn:x-test:notation2" + xml_system = <<-XML + <!DOCTYPE root SYSTEM "#{@sysid}" [ + <!NOTATION n1 SYSTEM "#{@notation_id1}"> + <!NOTATION n2 SYSTEM "#{@notation_id2}"> ]> - <r/> - XMLEND - @doctype1 = REXML::Document.new(document_string1).doctype + <root/> + XML + @doc_type_system = REXML::Document.new(xml_system).doctype @pubid = "TEST_ID" - document_string2 = <<-"XMLEND" - <!DOCTYPE r PUBLIC "#{@pubid}"> - <r/> - XMLEND - @doctype2 = REXML::Document.new(document_string2).doctype - - document_string3 = <<-"XMLEND" - <!DOCTYPE r PUBLIC "#{@pubid}" "#{@sysid}"> - <r/> - XMLEND - @doctype3 = REXML::Document.new(document_string3).doctype - + xml_public_system = <<-XML + <!DOCTYPE root PUBLIC "#{@pubid}" "#{@sysid}"> + <root/> + XML + @doc_type_public_system = REXML::Document.new(xml_public_system).doctype end def test_public - assert_equal(nil, @doctype1.public) - assert_equal(@pubid, @doctype2.public) - assert_equal(@pubid, @doctype3.public) + assert_equal([ + nil, + @pubid, + ], + [ + @doc_type_system.public, + @doc_type_public_system.public, + ]) + end + + def test_to_s + assert_equal("<!DOCTYPE root PUBLIC \"#{@pubid}\" \"#{@sysid}\">", + @doc_type_public_system.to_s) end def test_system - assert_equal(@sysid, @doctype1.system) - assert_equal(nil, @doctype2.system) - assert_equal(@sysid, @doctype3.system) + assert_equal([ + @sysid, + @sysid, + ], + [ + @doc_type_system.system, + @doc_type_public_system.system, + ]) end def test_notation - assert_equal(@notid1, @doctype1.notation("n1").system) - assert_equal(@notid2, @doctype1.notation("n2").system) + assert_equal([ + @notation_id1, + @notation_id2, + ], + [ + @doc_type_system.notation("n1").system, + @doc_type_system.notation("n2").system, + ]) end def test_notations - notations = @doctype1.notations - assert_equal(2, notations.length) - assert_equal(@notid1, find_notation(notations, "n1").system) - assert_equal(@notid2, find_notation(notations, "n2").system) + notations = @doc_type_system.notations + assert_equal([ + @notation_id1, + @notation_id2, + ], + notations.collect(&:system)) end + end - def find_notation(notations, name) - notations.find { |notation| - name == notation.name - } + class TestDocType < Test::Unit::TestCase + class TestExternalID < self + class TestSystem < self + class TestSystemLiteral < self + def test_to_s + doctype = REXML::DocType.new(["root", "SYSTEM", nil, "root.dtd"]) + assert_equal("<!DOCTYPE root SYSTEM \"root.dtd\">", + doctype.to_s) + end + end + end + + class TestPublic < self + class TestPublicIDLiteral < self + def test_to_s + doctype = REXML::DocType.new(["root", "PUBLIC", "pub", "root.dtd"]) + assert_equal("<!DOCTYPE root PUBLIC \"pub\" \"root.dtd\">", + doctype.to_s) + end + end + + class TestSystemLiteral < self + def test_to_s + doctype = REXML::DocType.new(["root", "PUBLIC", "pub", "root.dtd"]) + assert_equal("<!DOCTYPE root PUBLIC \"pub\" \"root.dtd\">", + doctype.to_s) + end + + def test_to_s_double_quote + doctype = REXML::DocType.new(["root", "PUBLIC", "pub", "root\".dtd"]) + assert_equal("<!DOCTYPE root PUBLIC \"pub\" 'root\".dtd'>", + doctype.to_s) + end + end + end end - end class TestNotationDeclPublic < Test::Unit::TestCase @@ -77,11 +123,26 @@ module REXMLTests decl(@id, nil).to_s) end + def test_to_s_pubid_literal_include_apostrophe + assert_equal("<!NOTATION #{@name} PUBLIC \"#{@id}'\">", + decl("#{@id}'", nil).to_s) + end + def test_to_s_with_uri assert_equal("<!NOTATION #{@name} PUBLIC \"#{@id}\" \"#{@uri}\">", decl(@id, @uri).to_s) end + def test_to_s_system_literal_include_apostrophe + assert_equal("<!NOTATION #{@name} PUBLIC \"#{@id}\" \"system'literal\">", + decl(@id, "system'literal").to_s) + end + + def test_to_s_system_literal_include_double_quote + assert_equal("<!NOTATION #{@name} PUBLIC \"#{@id}\" 'system\"literal'>", + decl(@id, "system\"literal").to_s) + end + private def decl(id, uri) REXML::NotationDecl.new(@name, "PUBLIC", id, uri) @@ -99,9 +160,19 @@ module REXMLTests decl(@id).to_s) end + def test_to_s_include_apostrophe + assert_equal("<!NOTATION #{@name} SYSTEM \"#{@id}'\">", + decl("#{@id}'").to_s) + end + + def test_to_s_include_double_quote + assert_equal("<!NOTATION #{@name} SYSTEM '#{@id}\"'>", + decl("#{@id}\"").to_s) + end + private def decl(id) - REXML::NotationDecl.new(@name, "SYSTEM", id, nil) + REXML::NotationDecl.new(@name, "SYSTEM", nil, id) end end end |