1#!/usr/bin/python -u 2import sys 3import libxml2 4 5# Memory debug specific 6libxml2.debugMemory(1) 7 8log = "" 9 10class callback: 11 def startDocument(self): 12 global log 13 log = log + "startDocument:" 14 15 def endDocument(self): 16 global log 17 log = log + "endDocument:" 18 19 def startElement(self, tag, attrs): 20 global log 21 log = log + "startElement %s %s:" % (tag, attrs) 22 23 def endElement(self, tag): 24 global log 25 log = log + "endElement %s:" % (tag) 26 27 def characters(self, data): 28 global log 29 log = log + "characters: %s:" % (data) 30 31 def warning(self, msg): 32 global log 33 log = log + "warning: %s:" % (msg) 34 35 def error(self, msg): 36 global log 37 log = log + "error: %s:" % (msg) 38 39 def fatalError(self, msg): 40 global log 41 log = log + "fatalError: %s:" % (msg) 42 43handler = callback() 44 45log="" 46chunk="""<foo><bar2/>""" 47ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") 48ctxt.parseChunk(chunk, len(chunk), 0) 49ctxt=None 50 51reference = "startDocument:startElement foo None:startElement bar2 None:endElement bar2:" 52if log != reference: 53 print("Error got: %s" % log) 54 print("Exprected: %s" % reference) 55 sys.exit(1) 56 57log="" 58chunk="""<foo><bar2></bar2>""" 59ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") 60ctxt.parseChunk(chunk, len(chunk), 0) 61ctxt=None 62 63reference = "startDocument:startElement foo None:startElement bar2 None:endElement bar2:" 64if log != reference: 65 print("Error got: %s" % log) 66 print("Exprected: %s" % reference) 67 sys.exit(1) 68 69log="" 70chunk="""<foo><bar2>""" 71ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") 72ctxt.parseChunk(chunk, len(chunk), 0) 73ctxt=None 74 75reference = "startDocument:startElement foo None:startElement bar2 None:" 76if log != reference: 77 print("Error got: %s" % log) 78 print("Exprected: %s" % reference) 79 sys.exit(1) 80 81log="" 82chunk="""<foo><bar2 a="1" b='2' />""" 83ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") 84ctxt.parseChunk(chunk, len(chunk), 0) 85ctxt=None 86 87reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:" 88if log != reference: 89 print("Error got: %s" % log) 90 print("Exprected: %s" % reference) 91 sys.exit(1) 92 93log="" 94chunk="""<foo><bar2 a="1" b='2' >""" 95ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") 96ctxt.parseChunk(chunk, len(chunk), 0) 97ctxt=None 98 99reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:" 100if log != reference: 101 print("Error got: %s" % log) 102 print("Exprected: %s" % reference) 103 sys.exit(1) 104 105log="" 106chunk="""<foo><bar2 a="1" b='2' ></bar2>""" 107ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") 108ctxt.parseChunk(chunk, len(chunk), 0) 109ctxt=None 110 111reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:" 112if log != reference: 113 print("Error got: %s" % log) 114 print("Exprected: %s" % reference) 115 sys.exit(1) 116 117log="" 118chunk="""<foo><bar2 a="b='1' />""" 119ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") 120ctxt.parseChunk(chunk, len(chunk), 0) 121ctxt=None 122 123reference = "startDocument:startElement foo None:" 124if log != reference: 125 print("Error got: %s" % log) 126 print("Exprected: %s" % reference) 127 sys.exit(1) 128 129# Memory debug specific 130libxml2.cleanupParser() 131if libxml2.debugMemory(1) == 0: 132 print("OK") 133else: 134 print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 135 libxml2.dumpMemory() 136