Added test case for pyexpat module that tries to exercise all the handlers
authorAndrew M. Kuchling <amk@amk.ca>
Fri, 31 Mar 2000 15:44:52 +0000 (15:44 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Fri, 31 Mar 2000 15:44:52 +0000 (15:44 +0000)
Lib/test/test_pyexpat.py [new file with mode: 0644]

diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py
new file mode 100644 (file)
index 0000000..439d676
--- /dev/null
@@ -0,0 +1,107 @@
+# Very simple test - Parse a file and print what happens
+
+# XXX TypeErrors on calling handlers, or on bad return values from a
+# handler, are obscure and unhelpful.
+        
+import sys, string
+import os
+
+import pyexpat
+               
+class Outputter:
+    def StartElementHandler(self, name, attrs):
+       print 'Start element:\n\t', name, attrs
+       
+    def EndElementHandler(self, name):
+       print 'End element:\n\t', name
+
+    def CharacterDataHandler(self, data):
+        data = string.strip(data)
+        if data:
+            print 'Character data:'
+            print '\t', repr(data)
+
+    def ProcessingInstructionHandler(self, target, data):
+       print 'PI:\n\t', target, data
+
+    def StartNamespaceDeclHandler(self, prefix, uri):
+       print 'NS decl:\n\t', prefix, uri
+
+    def EndNamespaceDeclHandler(self, prefix):
+       print 'End of NS decl:\n\t', prefix
+
+    def StartCdataSectionHandler(self):
+       print 'Start of CDATA section'
+
+    def EndCdataSectionHandler(self):
+       print 'End of CDATA section'
+
+    def CommentHandler(self, text):
+       print 'Comment:\n\t', repr(text)
+
+    def NotationDeclHandler(self, *args):
+        name, base, sysid, pubid = args
+       print 'Notation declared:', args
+
+    def UnparsedEntityDeclHandler(self, *args):
+        entityName, base, systemId, publicId, notationName = args
+        print 'Unparsed entity decl:\n\t', args
+    
+    def NotStandaloneHandler(self, userData):
+        print 'Not standalone'
+        return 1
+        
+    def ExternalEntityRefHandler(self, context, base, sysId, pubId):
+        print 'External entity ref:', context, base, sysId, pubId
+        return 1
+
+    def DefaultHandler(self, userData):
+        pass
+
+    def DefaultHandlerExpand(self, userData):
+        pass
+
+
+out = Outputter()
+parser = pyexpat.ParserCreate(namespace_separator='!')
+for name in ['StartElementHandler', 'EndElementHandler',
+            'CharacterDataHandler', 'ProcessingInstructionHandler',
+            'UnparsedEntityDeclHandler', 'NotationDeclHandler',
+            'StartNamespaceDeclHandler', 'EndNamespaceDeclHandler',
+            'CommentHandler', 'StartCdataSectionHandler',
+            'EndCdataSectionHandler',
+             'DefaultHandler', 'DefaultHandlerExpand',
+             #'NotStandaloneHandler',
+            'ExternalEntityRefHandler'
+             ]:
+    setattr(parser, name, getattr(out, name) )
+
+data = """<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
+<?xml-stylesheet href="stylesheet.css"?>
+<!-- comment data -->
+<!DOCTYPE quotations SYSTEM "quotations.dtd" [
+<!ELEMENT root ANY>
+<!NOTATION notation SYSTEM "notation.jpeg">
+<!ENTITY acirc "&#226;">
+<!ENTITY external_entity SYSTEM "entity.file">
+<!ENTITY unparsed_entity SYSTEM "entity.file" NDATA notation>
+%unparsed_entity;
+]>
+
+<root>
+<myns:subelement xmlns:myns="http://www.python.org/namespace">
+     Contents of subelements
+</myns:subelement>
+<sub2><![CDATA[contents of CDATA section]]></sub2>
+&external_entity;
+</root>
+"""
+
+try:
+    parser.Parse(data, 1)
+except pyexpat.error:
+    print '** Error', parser.ErrorCode, pyexpat.ErrorString( parser.ErrorCode)
+    print '** Line', parser.ErrorLineNumber
+    print '** Column', parser.ErrorColumnNumber
+    print '** Byte', parser.ErrorByteIndex
+