[XML-SIG] Patch: Generic test_sax.py
Juergen Hermann
Juergen Hermann" <jh@web.de
Thu, 27 Sep 2001 23:01:01 +0200
Hi!
The following patch changes test_sax.py so that it tests ANY sax
driver (i.e. the current driver according to PY_SAX_PRSER etc.).
The only thing remaining expat-specific are the tests for
incremental parsing. expat passes the changed tests.
Comments? If anyone objects to the changes in-place , I'll add
the patched module as "test_sax2.py".
Index: test_sax.py
===================================================================
RCS file: /cvsroot/pyxml/xml/test/test_sax.py,v
retrieving revision 1.6
diff -u -r1.6 test_sax.py
--- test_sax.py 2001/08/07 19:31:24 1.6
+++ test_sax.py 2001/09/27 20:51:26
@@ -1,15 +1,16 @@
# regression test for SAX 2.0
# $Id: test_sax.py,v 1.6 2001/08/07 19:31:24 fdrake Exp $
-from xml.sax import make_parser, ContentHandler, \
+from xml.sax import handler, 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, quoteattr, XMLFilterBase
-from xml.sax.expatreader import create_parser
+from xml.sax.saxutils import XMLGenerator, escape, quoteattr, XMLFilterBase, Location
+from xml.sax import expatreader
+from xml.sax.sax2exts import make_parser
from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
from cStringIO import StringIO
from test.test_support import verbose, TestFailed, findfile
@@ -223,7 +224,7 @@
# ===== XMLReader support
def test_expat_file():
- parser = create_parser()
+ parser = make_parser()
result = StringIO()
xmlgen = XMLGenerator(result)
@@ -247,16 +248,15 @@
self._entities.append((name, publicId, systemId, ndata))
def test_expat_dtdhandler():
- parser = create_parser()
+ parser = make_parser()
handler = TestDTDHandler()
parser.setDTDHandler(handler)
- parser.feed('<!DOCTYPE doc [\n')
- parser.feed(' <!ENTITY img SYSTEM "expat.gif" NDATA GIF>\n')
- parser.feed(' <!NOTATION GIF PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">\n')
- parser.feed(']>\n')
- parser.feed('<doc></doc>')
- parser.close()
+ parser.parse(StringIO('''<!DOCTYPE doc [
+ <!ENTITY img SYSTEM "expat.gif" NDATA GIF>
+ <!NOTATION GIF PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">
+]>
+<doc></doc>'''))
return handler._notations == [("GIF", "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN", None)] and \
handler._entities == [("img", None, "expat.gif", "GIF")]
@@ -271,16 +271,15 @@
return inpsrc
def test_expat_entityresolver():
- parser = create_parser()
+ parser = make_parser()
parser.setEntityResolver(TestEntityResolver())
result = StringIO()
parser.setContentHandler(XMLGenerator(result))
- parser.feed('<!DOCTYPE doc [\n')
- parser.feed(' <!ENTITY test SYSTEM "whatever">\n')
- parser.feed(']>\n')
- parser.feed('<doc>&test;</doc>')
- parser.close()
+ parser.parse(StringIO('''<!DOCTYPE doc [
+ <!ENTITY test SYSTEM "whatever">
+]>
+<doc>&test;</doc>'''))
return result.getvalue() == start + "<doc><entity></entity></doc>"
@@ -295,42 +294,40 @@
self._attrs = attrs
def test_expat_attrs_empty():
- parser = create_parser()
+ parser = make_parser()
gather = AttrGatherer()
parser.setContentHandler(gather)
- parser.feed("<doc/>")
- parser.close()
+ parser.parse(StringIO("<doc/>"))
return verify_empty_attrs(gather._attrs)
def test_expat_attrs_wattr():
- parser = create_parser()
+ parser = make_parser()
gather = AttrGatherer()
parser.setContentHandler(gather)
- parser.feed("<doc attr='val'/>")
- parser.close()
+ parser.parse(StringIO("<doc attr='val'/>"))
return verify_attrs_wattr(gather._attrs)
def test_expat_nsattrs_empty():
- parser = create_parser(1)
+ parser = make_parser()
+ parser.setFeature(handler.feature_namespaces, 1)
gather = AttrGatherer()
parser.setContentHandler(gather)
- parser.feed("<doc/>")
- parser.close()
+ parser.parse(StringIO("<doc/>"))
return verify_empty_nsattrs(gather._attrs)
def test_expat_nsattrs_wattr():
- parser = create_parser(1)
+ parser = make_parser()
+ parser.setFeature(handler.feature_namespaces, 1)
gather = AttrGatherer()
parser.setContentHandler(gather)
- parser.feed("<doc xmlns:ns='%s' ns:attr='val'/>" % ns_uri)
- parser.close()
+ parser.parse(StringIO("<doc xmlns:ns='%s' ns:attr='val'/>" % ns_uri))
attrs = gather._attrs
@@ -352,7 +349,7 @@
xml_test_out = open(findfile("test.xml.out")).read()
def test_expat_inpsource_filename():
- parser = create_parser()
+ parser = make_parser()
result = StringIO()
xmlgen = XMLGenerator(result)
@@ -362,7 +359,7 @@
return result.getvalue() == xml_test_out
def test_expat_inpsource_sysid():
- parser = create_parser()
+ parser = make_parser()
result = StringIO()
xmlgen = XMLGenerator(result)
@@ -372,7 +369,7 @@
return result.getvalue() == xml_test_out
def test_expat_inpsource_stream():
- parser = create_parser()
+ parser = make_parser()
result = StringIO()
xmlgen = XMLGenerator(result)
@@ -388,7 +385,7 @@
def test_expat_incremental():
result = StringIO()
xmlgen = XMLGenerator(result)
- parser = create_parser()
+ parser = expatreader.create_parser()
parser.setContentHandler(xmlgen)
parser.feed("<doc>")
@@ -400,7 +397,7 @@
def test_expat_incremental_reset():
result = StringIO()
xmlgen = XMLGenerator(result)
- parser = create_parser()
+ parser = expatreader.create_parser()
parser.setContentHandler(xmlgen)
parser.feed("<doc>")
@@ -420,29 +417,36 @@
# ===== Locator support
+class LocatorTest(XMLGenerator):
+ def __init__(self, out=None, encoding="iso-8859-1"):
+ XMLGenerator.__init__(self, out, encoding)
+ self.location = None
+
+ def endDocument(self):
+ XMLGenerator.endDocument(self)
+ self.location = Location(self._locator)
+
def test_expat_locator_noinfo():
result = StringIO()
- xmlgen = XMLGenerator(result)
- parser = create_parser()
+ xmlgen = LocatorTest(result)
+ parser = make_parser()
parser.setContentHandler(xmlgen)
- parser.feed("<doc>")
- parser.feed("</doc>")
- parser.close()
+ parser.parse(StringIO("<doc></doc>"))
- return parser.getSystemId() is None and \
- parser.getPublicId() is None and \
- parser.getLineNumber() == 1
+ return xmlgen.location.getSystemId() is None and \
+ xmlgen.location.getPublicId() is None and \
+ xmlgen.location.getLineNumber() == 1
def test_expat_locator_withinfo():
result = StringIO()
- xmlgen = XMLGenerator(result)
- parser = create_parser()
+ xmlgen = LocatorTest(result)
+ parser = make_parser()
parser.setContentHandler(xmlgen)
parser.parse(findfile("test.xml"))
- return parser.getSystemId() == findfile("test.xml") and \
- parser.getPublicId() is None
+ return xmlgen.location.getSystemId() == findfile("test.xml") and \
+ xmlgen.location.getPublicId() is None
# ===========================================================================
@@ -452,7 +456,7 @@
# ===========================================================================
def test_expat_inpsource_location():
- parser = create_parser()
+ parser = make_parser()
parser.setContentHandler(ContentHandler()) # do nothing
source = InputSource()
source.setByteStream(StringIO("<foo bar foobar>")) #ill-formed
@@ -464,7 +468,7 @@
return e.getSystemId() == name
def test_expat_incomplete():
- parser = create_parser()
+ parser = make_parser()
parser.setContentHandler(ContentHandler()) # do nothing
try:
parser.parse(StringIO("<foo>"))
@@ -620,7 +624,7 @@
# ===== Main program
def make_test_output():
- parser = create_parser()
+ parser = make_parser()
result = StringIO()
xmlgen = XMLGenerator(result)