Blame python/tests/validDTD.py

Packit Service a31ea6
#!/usr/bin/python -u
Packit Service a31ea6
import libxml2
Packit Service a31ea6
import sys
Packit Service a31ea6
Packit Service a31ea6
ARG = 'test string'
Packit Service a31ea6
Packit Service a31ea6
class ErrorHandler:
Packit Service a31ea6
Packit Service a31ea6
    def __init__(self):
Packit Service a31ea6
        self.errors = []
Packit Service a31ea6
Packit Service a31ea6
    def handler(self, msg, data):
Packit Service a31ea6
        if data != ARG:
Packit Service a31ea6
            raise Exception("Error handler did not receive correct argument")
Packit Service a31ea6
        self.errors.append(msg)
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
# Memory debug specific
Packit Service a31ea6
libxml2.debugMemory(1)
Packit Service a31ea6
Packit Service a31ea6
dtd=""""""
Packit Service a31ea6
valid="""
Packit Service a31ea6
<foo></foo>"""
Packit Service a31ea6
Packit Service a31ea6
invalid="""
Packit Service a31ea6
<foo><bar/></foo>"""
Packit Service a31ea6
Packit Service a31ea6
dtd = libxml2.parseDTD(None, 'test.dtd')
Packit Service a31ea6
ctxt = libxml2.newValidCtxt()
Packit Service a31ea6
e = ErrorHandler()
Packit Service a31ea6
ctxt.setValidityErrorHandler(e.handler, e.handler, ARG)
Packit Service a31ea6
Packit Service a31ea6
# Test valid document
Packit Service a31ea6
doc = libxml2.parseDoc(valid)
Packit Service a31ea6
ret = doc.validateDtd(ctxt, dtd)
Packit Service a31ea6
if ret != 1 or e.errors:
Packit Service a31ea6
    print("error doing DTD validation")
Packit Service a31ea6
    sys.exit(1)
Packit Service a31ea6
doc.freeDoc()
Packit Service a31ea6
Packit Service a31ea6
# Test invalid document
Packit Service a31ea6
doc = libxml2.parseDoc(invalid)
Packit Service a31ea6
ret = doc.validateDtd(ctxt, dtd)
Packit Service a31ea6
if ret != 0 or not e.errors:
Packit Service a31ea6
    print("Error: document supposed to be invalid")
Packit Service a31ea6
doc.freeDoc()
Packit Service a31ea6
Packit Service a31ea6
dtd.freeDtd()
Packit Service a31ea6
del dtd
Packit Service a31ea6
del ctxt
Packit Service a31ea6
Packit Service a31ea6
# Memory debug specific
Packit Service a31ea6
libxml2.cleanupParser()
Packit Service a31ea6
if libxml2.debugMemory(1) == 0:
Packit Service a31ea6
    print("OK")
Packit Service a31ea6
else:
Packit Service a31ea6
    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
Packit Service a31ea6
    libxml2.dumpMemory()
Packit Service a31ea6