from test.test_support import verbose, TestFailed, findfile
from xml.sax.sax2exts import XMLValParserFactory
from xml.sax import InputSource, SAXException, ContentHandler
from StringIO import StringIO
import sys
#make_parser, ContentHandler, \
# SAXException, SAXReaderNotAvailable, SAXParseException
# try:
# make_parser()
# except SAXReaderNotAvailable:
# # don't try to test this module if we cannot create a parser
# raise ImportError("no XML parsers available")
# from xml.sax.saxutils import XMLGenerator, escape, XMLFilterBase
# from xml.sax.expatreader import create_parser
# from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
# from cStringIO import StringIO
# ===== Utilities
tests = 0
fails = 0
def confirm(outcome, name):
global tests, fails
tests = tests + 1
if outcome:
print "Passed", name
else:
print "Failed", name
fails = fails + 1
def gen_inputs():
f = open("xmlval_illformed.dtd","w")
f.write("""\n""")
if __name__=='__main__' and len(sys.argv)>1 and sys.argv[1] == 'generate':
gen_inputs()
raise SystemExit
doc1 = """
"""
def test_nonexistent():
p = XMLValParserFactory.make_parser()
i = InputSource("doc1.xml")
i.setByteStream(StringIO(doc1))
try:
p.parse(i)
except SAXException,e:
print "PASS:",e
return 1
else:
return 0
doc2 = """
<"""
def test_illformed():
p = XMLValParserFactory.make_parser()
i = InputSource("doc2.xml")
i.setByteStream(StringIO(doc2))
try:
p.parse(i)
except SAXException,e:
print "PASS:",e
return 1
else:
return 0
doc3 = """
]>
"""
class H(ContentHandler):
def __init__(self):
self.passed = 0
def ignorableWhitespace(self, data):
self.passed = 1
def test_ignorable():
p = XMLValParserFactory.make_parser()
i = InputSource("doc3.xml")
i.setByteStream(StringIO(doc3))
h = H()
p.setContentHandler(h)
p.parse(i)
return h.passed
items = locals().items()
items.sort()
for (name, value) in items:
if name[ : 5] == "test_":
confirm(value(), name)
print "%d tests, %d failures" % (tests, fails)
if fails != 0:
raise TestFailed, "%d of %d tests failed" % (fails, tests)