2013-08-11 04:43:17 -04:00
|
|
|
require "test/unit"
|
|
|
|
require "rexml/parsers/sax2parser"
|
|
|
|
require "rexml/sax2listener"
|
|
|
|
|
|
|
|
class TestSAX2Parser < Test::Unit::TestCase
|
|
|
|
class TestDocumentTypeDeclaration < self
|
|
|
|
private
|
|
|
|
def xml(internal_subset)
|
|
|
|
<<-XML
|
|
|
|
<!DOCTYPE r SYSTEM "urn:x-henrikmartensson:test" [
|
|
|
|
#{internal_subset}
|
|
|
|
]>
|
|
|
|
<r/>
|
|
|
|
XML
|
|
|
|
end
|
|
|
|
|
|
|
|
class TestEntityDecl < self
|
|
|
|
class Listener
|
|
|
|
include REXML::SAX2Listener
|
|
|
|
attr_reader :entity_declarations
|
|
|
|
def initialize
|
|
|
|
@entity_declarations = []
|
|
|
|
end
|
|
|
|
|
2013-08-11 05:01:41 -04:00
|
|
|
def entitydecl(declaration)
|
2013-08-11 04:43:17 -04:00
|
|
|
super
|
2013-08-11 05:01:41 -04:00
|
|
|
@entity_declarations << declaration
|
2013-08-11 04:43:17 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def parse(internal_subset)
|
|
|
|
listener = Listener.new
|
|
|
|
parser = REXML::Parsers::SAX2Parser.new(xml(internal_subset))
|
|
|
|
parser.listen(listener)
|
|
|
|
parser.parse
|
|
|
|
listener.entity_declarations
|
|
|
|
end
|
|
|
|
|
|
|
|
class TestGeneralEntity < self
|
|
|
|
class TestValue < self
|
|
|
|
def test_double_quote
|
|
|
|
assert_equal([["name", "value"]], parse(<<-INTERNAL_SUBSET))
|
|
|
|
<!ENTITY name "value">
|
|
|
|
INTERNAL_SUBSET
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_single_quote
|
|
|
|
assert_equal([["name", "value"]], parse(<<-INTERNAL_SUBSET))
|
|
|
|
<!ENTITY name 'value'>
|
|
|
|
INTERNAL_SUBSET
|
|
|
|
end
|
|
|
|
end
|
2013-08-11 05:01:41 -04:00
|
|
|
|
|
|
|
class TestExternlID < self
|
|
|
|
class TestSystem < self
|
2013-08-11 05:09:25 -04:00
|
|
|
def test_with_ndata
|
|
|
|
declaration = [
|
|
|
|
"name",
|
|
|
|
"SYSTEM", "system-literal",
|
|
|
|
"NDATA", "ndata-name",
|
|
|
|
]
|
|
|
|
assert_equal([declaration],
|
|
|
|
parse(<<-INTERNAL_SUBSET))
|
|
|
|
<!ENTITY name SYSTEM "system-literal" NDATA ndata-name>
|
|
|
|
INTERNAL_SUBSET
|
|
|
|
end
|
|
|
|
|
2013-08-11 05:01:41 -04:00
|
|
|
def test_without_ndata
|
|
|
|
declaration = [
|
|
|
|
"name",
|
|
|
|
"SYSTEM", "system-literal",
|
|
|
|
]
|
|
|
|
assert_equal([declaration],
|
|
|
|
parse(<<-INTERNAL_SUBSET))
|
|
|
|
<!ENTITY name SYSTEM "system-literal">
|
|
|
|
INTERNAL_SUBSET
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class TestPublic < self
|
2013-08-11 05:09:25 -04:00
|
|
|
def test_with_ndata
|
|
|
|
declaration = [
|
|
|
|
"name",
|
|
|
|
"PUBLIC", "public-literal", "system-literal",
|
|
|
|
"NDATA", "ndata-name",
|
|
|
|
]
|
|
|
|
assert_equal([declaration],
|
|
|
|
parse(<<-INTERNAL_SUBSET))
|
|
|
|
<!ENTITY name PUBLIC "public-literal" "system-literal" NDATA ndata-name>
|
|
|
|
INTERNAL_SUBSET
|
|
|
|
end
|
|
|
|
|
2013-08-11 05:01:41 -04:00
|
|
|
def test_without_ndata
|
|
|
|
declaration = [
|
|
|
|
"name",
|
|
|
|
"PUBLIC", "public-literal", "system-literal",
|
|
|
|
]
|
|
|
|
assert_equal([declaration], parse(<<-INTERNAL_SUBSET))
|
|
|
|
<!ENTITY name PUBLIC "public-literal" "system-literal">
|
|
|
|
INTERNAL_SUBSET
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2013-08-11 04:43:17 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|