38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#!/usr/bin/python -u
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport sys
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport libxml2
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Memory debug specific
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclibxml2.debugMemory(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclog = ""
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncclass callback:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def startDocument(self):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync global log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync log = log + "startDocument:"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def endDocument(self):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync global log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync log = log + "endDocument:"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def startElement(self, tag, attrs):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync global log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync log = log + "startElement %s %s:" % (tag, attrs)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def endElement(self, tag):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync global log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync log = log + "endElement %s:" % (tag)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def characters(self, data):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync global log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync log = log + "characters: %s:" % (data)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def warning(self, msg):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync global log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync log = log + "warning: %s:" % (msg)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def error(self, msg):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync global log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync log = log + "error: %s:" % (msg)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def fatalError(self, msg):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync global log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync log = log + "fatalError: %s:" % (msg)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynchandler = callback()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncctxt = libxml2.htmlCreatePushParser(handler, "<foo", 4, "test.xml")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncchunk = " url='tst'>b"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncctxt.htmlParseChunk(chunk, len(chunk), 0)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncchunk = "ar</foo>"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncctxt.htmlParseChunk(chunk, len(chunk), 1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncctxt=None
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncreference = """startDocument:startElement html None:startElement body None:startElement foo {'url': 'tst'}:error: Tag foo invalid
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync:characters: bar:endElement foo:endElement body:endElement html:endDocument:"""
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif log != reference:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Error got: %s" % log
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Exprected: %s" % reference
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Memory debug specific
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclibxml2.cleanupParser()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif libxml2.debugMemory(1) == 0:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "OK"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncelse:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Memory leak %d bytes" % (libxml2.debugMemory(1))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.dumpMemory()