#!/usr/bin/python -u
#
# This test exercise the redirection of error messages with a
# functions defined in Python.
#
import sys
import libxml2

# Memory debug specific
libxml2.debugMemory(1)

expect="""--> (3) xmlns: URI foo is not absolute
--> (4) Opening and ending tag mismatch: x line 0 and y
"""

err=""
def callback(arg,msg,severity,reserved):
    global err
    err = err + "%s (%d) %s" % (arg,severity,msg)

s = """<x xmlns="foo"></y>"""

parserCtxt = libxml2.createPushParser(None,"",0,"test.xml")
parserCtxt.setErrorHandler(callback, "-->")
if parserCtxt.getErrorHandler() != (callback,"-->"):
    print("getErrorHandler failed")
    sys.exit(1)
parserCtxt.parseChunk(s,len(s),1)
doc = parserCtxt.doc()
doc.freeDoc()
parserCtxt = None

if err != expect:
    print("error")
    print("received %s" %(err))
    print("expected %s" %(expect))
    sys.exit(1)

i = 10000
while i > 0:
    parserCtxt = libxml2.createPushParser(None,"",0,"test.xml")
    parserCtxt.setErrorHandler(callback, "-->")
    parserCtxt.parseChunk(s,len(s),1)
    doc = parserCtxt.doc()
    doc.freeDoc()
    parserCtxt = None
    err = ""
    i = i - 1

# Memory debug specific
libxml2.cleanupParser()
if libxml2.debugMemory(1) == 0:
    print("OK")
else:
    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
    libxml2.dumpMemory()
