from simpleparse.xml import xml_parser
from simpleparse.parser import Parser
import unittest, string
p = Parser( xml_parser.declaration )
class XMLProductionTests(unittest.TestCase):
"""Tests that XML grammar productions match appropriate values"""
### ProductionTests will be added here by loop below...
class ProductionTest:
def __init__( self, production, should, shouldnot ):
self.production = production
self.should = should
self.shouldnot = shouldnot
def __call__( self ):
"""Perform the test"""
for item in self.should:
success, children, next = p.parse( item, self.production )
assert success, """Didn't parse %s as a %s, should have"""%( repr(item), self.production)
assert next == len(item), """Didn't parse whole of %s as a %s, parsed %s of %s characters, results were:\n%s\nRest was:\n%s"""%( repr(item), self.production, next, len(item), children, item[next:])
for item in shouldnot:
success, children, next = p.parse( item, self.production )
assert not success, """Parsed %s chars of %s as a %s, shouldn't have, result was:\n%s"""%( next, repr(item), self.production, children)
def getSuite():
return unittest.makeSuite(XMLProductionTests, 'test')
testData = {
"CharData":(
[# should match
"""Type """,
],
[# should not match
],
),
"Attribute":(
[# should match
"""s=&this;""",
'''s="&this;"''',
"""&this;""",
],
[# should not match
# unfinished elements
],
),
"element":(
[# should match
"""""",
"""""",
"""""",
"""""",
"""""",
],
[# should not match
# unfinished elements
"""""",
"""""",
"""""",
# end with no start...
"""""",
# malformed end tags
"""""",
"""""",
],
),
"content":(
[# should match
"""Type less-than (<) to save options.
This document was prepared on &docdate; and
is classified &security-level;.""",
"""""",
"""""",
"""""",
"""""",
"""&this;""",
"""""",
],
[# should not match
# unfinished elements
"""""",
"""""",
"""""",
# end with no start...
"""""",
# malformed end tags
"""""",
"""""",
],
),
"AttValue":(
[# should match
'''"&this;"''',
],
[# should not match
],
),
"Name": (
[# should match
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-:._",
"_a",
":a",
":a",
],
[# should not match
"-a",
"0",
"0.0",
".this",
],
),
"Comment": (
[# should match
"",
"",
"",
"",
"",
"",
],
[# should not match
"",
"",
"",
],
),
"prolog": (
[ # should match
""" """,
"""
]>""",
"""""",
"""
]>""",
"""
%ISOLat2;
]>""",
],
[ # should not match
],
),
"ExternalID": (
[# should match
'''SYSTEM "hello.dtd"''',
],
[# should not match
],
),
"elementdecl": (
[# should match
'''''',
"""""",
"""""",
"""""",
"""""",
"""""",
"""""",
"""""",
],
[# should not match
"""""",
],
),
"elementdecl_pe": (
[# should match
""" %name.para; %content.para;""",
],
[# should not match
],
),
"contentspec": (
[# should match
'''EMPTY''',
'''ANY''',
'''%content.para;''',
],
[# should not match
],
),
"AttlistDecl": (
[# should match
'''''',
"""""",
"""""",
],
[# should not match
],
),
"AttDef": (
[# should match
''' id ID #REQUIRED''',
""" name CDATA #IMPLIED""",
''' type (bullets|ordered|glossary) "ordered"''',
''' method CDATA #FIXED "POST"''',
],
[# should not match
],
),
"EntityDecl": (
[
"""""",
"""""",
"""""",
"""""",
],
[# should not match
],
),
"EntityDef":(
[
'''PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
"http://www.textuality.com/boilerplate/OpenHatch.xml"''',
],
[# should not match
],
),
"PubidLiteral":(
[
'''"-//Textuality//TEXT Standard open-hatch boilerplate//EN"''',
],
[# should not match
],
),
}
for production, (should,shouldnot) in testData.items():
setattr( XMLProductionTests, 'test'+production, ProductionTest(production, should, shouldnot))
if __name__ == "__main__":
unittest.main(defaultTest="getSuite")