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