1#!/usr/bin/python -u 2import libxml2 3import sys 4 5ARG = 'test string' 6 7class ErrorHandler: 8 9 def __init__(self): 10 self.errors = [] 11 12 def handler(self, msg, data): 13 if data != ARG: 14 raise Exception("Error handler did not receive correct argument") 15 self.errors.append(msg) 16 17 18# Memory debug specific 19libxml2.debugMemory(1) 20 21dtd="""<!ELEMENT foo EMPTY>""" 22valid="""<?xml version="1.0"?> 23<foo></foo>""" 24 25invalid="""<?xml version="1.0"?> 26<foo><bar/></foo>""" 27 28dtd = libxml2.parseDTD(None, 'test.dtd') 29ctxt = libxml2.newValidCtxt() 30e = ErrorHandler() 31ctxt.setValidityErrorHandler(e.handler, e.handler, ARG) 32 33# Test valid document 34doc = libxml2.parseDoc(valid) 35ret = doc.validateDtd(ctxt, dtd) 36if ret != 1 or e.errors: 37 print("error doing DTD validation") 38 sys.exit(1) 39doc.freeDoc() 40 41# Test invalid document 42doc = libxml2.parseDoc(invalid) 43ret = doc.validateDtd(ctxt, dtd) 44if ret != 0 or not e.errors: 45 print("Error: document supposed to be invalid") 46doc.freeDoc() 47 48dtd.freeDtd() 49del dtd 50del ctxt 51 52# Memory debug specific 53libxml2.cleanupParser() 54if libxml2.debugMemory(1) == 0: 55 print("OK") 56else: 57 print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 58 libxml2.dumpMemory() 59 60