133caa0b8307eccf22010400747830b1967edb292Daniel Veillard#!/usr/bin/python -u 233caa0b8307eccf22010400747830b1967edb292Daniel Veillardimport sys 333caa0b8307eccf22010400747830b1967edb292Daniel Veillardimport libxml2 433caa0b8307eccf22010400747830b1967edb292Daniel Veillard 533caa0b8307eccf22010400747830b1967edb292Daniel Veillard# Memory debug specific 633caa0b8307eccf22010400747830b1967edb292Daniel Veillardlibxml2.debugMemory(1) 733caa0b8307eccf22010400747830b1967edb292Daniel Veillard 833caa0b8307eccf22010400747830b1967edb292Daniel Veillardlog = "" 933caa0b8307eccf22010400747830b1967edb292Daniel Veillard 1033caa0b8307eccf22010400747830b1967edb292Daniel Veillardclass callback: 1133caa0b8307eccf22010400747830b1967edb292Daniel Veillard def startDocument(self): 1233caa0b8307eccf22010400747830b1967edb292Daniel Veillard global log 1333caa0b8307eccf22010400747830b1967edb292Daniel Veillard log = log + "startDocument:" 1433caa0b8307eccf22010400747830b1967edb292Daniel Veillard 1533caa0b8307eccf22010400747830b1967edb292Daniel Veillard def endDocument(self): 1633caa0b8307eccf22010400747830b1967edb292Daniel Veillard global log 1733caa0b8307eccf22010400747830b1967edb292Daniel Veillard log = log + "endDocument:" 1833caa0b8307eccf22010400747830b1967edb292Daniel Veillard 1933caa0b8307eccf22010400747830b1967edb292Daniel Veillard def startElement(self, tag, attrs): 2033caa0b8307eccf22010400747830b1967edb292Daniel Veillard global log 2133caa0b8307eccf22010400747830b1967edb292Daniel Veillard log = log + "startElement %s %s:" % (tag, attrs) 2233caa0b8307eccf22010400747830b1967edb292Daniel Veillard 2333caa0b8307eccf22010400747830b1967edb292Daniel Veillard def endElement(self, tag): 2433caa0b8307eccf22010400747830b1967edb292Daniel Veillard global log 2533caa0b8307eccf22010400747830b1967edb292Daniel Veillard log = log + "endElement %s:" % (tag) 2633caa0b8307eccf22010400747830b1967edb292Daniel Veillard 2733caa0b8307eccf22010400747830b1967edb292Daniel Veillard def characters(self, data): 2833caa0b8307eccf22010400747830b1967edb292Daniel Veillard global log 2933caa0b8307eccf22010400747830b1967edb292Daniel Veillard log = log + "characters: %s:" % (data) 3033caa0b8307eccf22010400747830b1967edb292Daniel Veillard 3133caa0b8307eccf22010400747830b1967edb292Daniel Veillard def warning(self, msg): 3233caa0b8307eccf22010400747830b1967edb292Daniel Veillard global log 3333caa0b8307eccf22010400747830b1967edb292Daniel Veillard log = log + "warning: %s:" % (msg) 3433caa0b8307eccf22010400747830b1967edb292Daniel Veillard 3533caa0b8307eccf22010400747830b1967edb292Daniel Veillard def error(self, msg): 3633caa0b8307eccf22010400747830b1967edb292Daniel Veillard global log 3733caa0b8307eccf22010400747830b1967edb292Daniel Veillard log = log + "error: %s:" % (msg) 3833caa0b8307eccf22010400747830b1967edb292Daniel Veillard 3933caa0b8307eccf22010400747830b1967edb292Daniel Veillard def fatalError(self, msg): 4033caa0b8307eccf22010400747830b1967edb292Daniel Veillard global log 4133caa0b8307eccf22010400747830b1967edb292Daniel Veillard log = log + "fatalError: %s:" % (msg) 4233caa0b8307eccf22010400747830b1967edb292Daniel Veillard 4333caa0b8307eccf22010400747830b1967edb292Daniel Veillardhandler = callback() 4433caa0b8307eccf22010400747830b1967edb292Daniel Veillard 4533caa0b8307eccf22010400747830b1967edb292Daniel Veillardctxt = libxml2.createPushParser(handler, "<foo", 4, "test.xml") 4633caa0b8307eccf22010400747830b1967edb292Daniel Veillardchunk = " url='tst'>b" 4733caa0b8307eccf22010400747830b1967edb292Daniel Veillardctxt.parseChunk(chunk, len(chunk), 0) 4833caa0b8307eccf22010400747830b1967edb292Daniel Veillardchunk = "ar</foo>" 4933caa0b8307eccf22010400747830b1967edb292Daniel Veillardctxt.parseChunk(chunk, len(chunk), 1) 5033caa0b8307eccf22010400747830b1967edb292Daniel Veillardctxt=None 5133caa0b8307eccf22010400747830b1967edb292Daniel Veillard 5233caa0b8307eccf22010400747830b1967edb292Daniel Veillardreference = "startDocument:startElement foo {'url': 'tst'}:characters: bar:endElement foo:endDocument:" 5333caa0b8307eccf22010400747830b1967edb292Daniel Veillardif log != reference: 542cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("Error got: %s" % log) 552cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("Exprected: %s" % reference) 5633caa0b8307eccf22010400747830b1967edb292Daniel Veillard sys.exit(1) 5733caa0b8307eccf22010400747830b1967edb292Daniel Veillard 5833caa0b8307eccf22010400747830b1967edb292Daniel Veillard# Memory debug specific 5933caa0b8307eccf22010400747830b1967edb292Daniel Veillardlibxml2.cleanupParser() 6033caa0b8307eccf22010400747830b1967edb292Daniel Veillardif libxml2.debugMemory(1) == 0: 612cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("OK") 6233caa0b8307eccf22010400747830b1967edb292Daniel Veillardelse: 632cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 6433caa0b8307eccf22010400747830b1967edb292Daniel Veillard libxml2.dumpMemory() 65