[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)