pushSAXhtml.py revision 38ae7e4efe803ea78b6499cd05a394db32623e41
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync#!/usr/bin/python -u
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncimport sys
9476d2be49d26a770787f5957478b930484c6ea5vboxsyncimport libxml2
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync# Memory debug specific
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsynclibxml2.debugMemory(1)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsynclog = ""
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncclass callback:
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync def startDocument(self):
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync global log
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync log = log + "startDocument:"
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync def endDocument(self):
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync global log
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync log = log + "endDocument:"
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync def startElement(self, tag, attrs):
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync global log
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync log = log + "startElement %s %s:" % (tag, attrs)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync def endElement(self, tag):
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync global log
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync log = log + "endElement %s:" % (tag)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
b7782c7ad55341aaa2bcc6c5f20c8fcaf4d8dd7bvboxsync def characters(self, data):
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync global log
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync log = log + "characters: %s:" % (data)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync def warning(self, msg):
389492cf692ff5f76b379f1142092a3091e9bb8dvboxsync global log
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync log = log + "warning: %s:" % (msg)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
1715638289c28170682182429eaae968dddbe120vboxsync def error(self, msg):
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync global log
1715638289c28170682182429eaae968dddbe120vboxsync log = log + "error: %s:" % (msg)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync def fatalError(self, msg):
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync global log
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync log = log + "fatalError: %s:" % (msg)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsynchandler = callback()
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncctxt = libxml2.htmlCreatePushParser(handler, "<foo", 4, "test.xml")
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncchunk = " url='tst'>b"
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncctxt.htmlParseChunk(chunk, len(chunk), 0)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncchunk = "ar</foo>"
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncctxt.htmlParseChunk(chunk, len(chunk), 1)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncctxt=None
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncreference = """startDocument:startElement html None:startElement body None:startElement foo {'url': 'tst'}:error: Tag foo invalid
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync:characters: bar:endElement foo:endElement body:endElement html:endDocument:"""
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncif log != reference:
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync print "Error got: %s" % log
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync print "Exprected: %s" % reference
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync sys.exit(1)
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync# Memory debug specific
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsynclibxml2.cleanupParser()
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncif libxml2.debugMemory(1) == 0:
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync print "OK"
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsyncelse:
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync print "Memory leak %d bytes" % (libxml2.debugMemory(1))
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync libxml2.dumpMemory()
5b93fdb3b4e681a6e4e01a3000f2a3ac07d99895vboxsync