1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*7c568831SAndroid Build Coastguard Workerimport setup_test 3*7c568831SAndroid Build Coastguard Workerimport libxml2 4*7c568831SAndroid Build Coastguard Worker 5*7c568831SAndroid Build Coastguard Workertry: 6*7c568831SAndroid Build Coastguard Worker import libxml2mod 7*7c568831SAndroid Build Coastguard Workerexcept ModuleNotFoundError: 8*7c568831SAndroid Build Coastguard Worker from libxmlmods import libxml2mod 9*7c568831SAndroid Build Coastguard Worker 10*7c568831SAndroid Build Coastguard Workerimport sys 11*7c568831SAndroid Build Coastguard Worker 12*7c568831SAndroid Build Coastguard Workerdef error(msg, data): 13*7c568831SAndroid Build Coastguard Worker pass 14*7c568831SAndroid Build Coastguard Worker 15*7c568831SAndroid Build Coastguard Worker# Memory debug specific 16*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1) 17*7c568831SAndroid Build Coastguard Worker 18*7c568831SAndroid Build Coastguard Workerdtd="""<!ELEMENT foo EMPTY>""" 19*7c568831SAndroid Build Coastguard Workerinstance="""<?xml version="1.0"?> 20*7c568831SAndroid Build Coastguard Worker<foo></foo>""" 21*7c568831SAndroid Build Coastguard Worker 22*7c568831SAndroid Build Coastguard Workerdtd = libxml2.parseDTD(None, 'test.dtd') 23*7c568831SAndroid Build Coastguard Workerctxt = libxml2.newValidCtxt() 24*7c568831SAndroid Build Coastguard Workerlibxml2mod.xmlSetValidErrors(ctxt._o, error, error) 25*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(instance) 26*7c568831SAndroid Build Coastguard Workerret = doc.validateDtd(ctxt, dtd) 27*7c568831SAndroid Build Coastguard Workerif ret != 1: 28*7c568831SAndroid Build Coastguard Worker print("error doing DTD validation") 29*7c568831SAndroid Build Coastguard Worker sys.exit(1) 30*7c568831SAndroid Build Coastguard Worker 31*7c568831SAndroid Build Coastguard Workerdoc.freeDoc() 32*7c568831SAndroid Build Coastguard Workerdtd.freeDtd() 33*7c568831SAndroid Build Coastguard Workerdel dtd 34*7c568831SAndroid Build Coastguard Workerdel ctxt 35*7c568831SAndroid Build Coastguard Worker 36*7c568831SAndroid Build Coastguard Worker# Memory debug specific 37*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser() 38*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0: 39*7c568831SAndroid Build Coastguard Worker print("OK") 40*7c568831SAndroid Build Coastguard Workerelse: 41*7c568831SAndroid Build Coastguard Worker print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 42