diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2000-03-31 15:44:52 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2000-03-31 15:44:52 (GMT) |
commit | b17664ddf070a23bff2ba8c4849dadaac8dbc98e (patch) | |
tree | 0af3fadb082e3b9b935b089929afc7b7fe40b2ef | |
parent | b7f105371f05d16a2d724d3662c98550d311bdfb (diff) | |
download | cpython-b17664ddf070a23bff2ba8c4849dadaac8dbc98e.zip cpython-b17664ddf070a23bff2ba8c4849dadaac8dbc98e.tar.gz cpython-b17664ddf070a23bff2ba8c4849dadaac8dbc98e.tar.bz2 |
Added test case for pyexpat module that tries to exercise all the handlers
-rw-r--r-- | Lib/test/test_pyexpat.py | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py new file mode 100644 index 0000000..439d676 --- /dev/null +++ b/Lib/test/test_pyexpat.py @@ -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 "â"> +<!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 + |