1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*7c568831SAndroid Build Coastguard Worker# 3*7c568831SAndroid Build Coastguard Worker# This test exercise the redirection of error messages with a 4*7c568831SAndroid Build Coastguard Worker# functions defined in Python. 5*7c568831SAndroid Build Coastguard Worker# 6*7c568831SAndroid Build Coastguard Workerimport sys 7*7c568831SAndroid Build Coastguard Workerimport setup_test 8*7c568831SAndroid Build Coastguard Workerimport libxml2 9*7c568831SAndroid Build Coastguard Worker 10*7c568831SAndroid Build Coastguard Worker# Memory debug specific 11*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1) 12*7c568831SAndroid Build Coastguard Worker 13*7c568831SAndroid Build Coastguard Workerexpect="""--> (3) xmlns: URI foo is not absolute 14*7c568831SAndroid Build Coastguard Worker--> (4) Opening and ending tag mismatch: x line 1 and y 15*7c568831SAndroid Build Coastguard Worker""" 16*7c568831SAndroid Build Coastguard Worker 17*7c568831SAndroid Build Coastguard Workererr="" 18*7c568831SAndroid Build Coastguard Workerdef callback(arg,msg,severity,reserved): 19*7c568831SAndroid Build Coastguard Worker global err 20*7c568831SAndroid Build Coastguard Worker err = err + "%s (%d) %s" % (arg,severity,msg) 21*7c568831SAndroid Build Coastguard Worker 22*7c568831SAndroid Build Coastguard Workers = """<x xmlns="foo"></y>""" 23*7c568831SAndroid Build Coastguard Worker 24*7c568831SAndroid Build Coastguard WorkerparserCtxt = libxml2.createPushParser(None,"",0,"test.xml") 25*7c568831SAndroid Build Coastguard WorkerparserCtxt.setErrorHandler(callback, "-->") 26*7c568831SAndroid Build Coastguard Workerif parserCtxt.getErrorHandler() != (callback,"-->"): 27*7c568831SAndroid Build Coastguard Worker print("getErrorHandler failed") 28*7c568831SAndroid Build Coastguard Worker sys.exit(1) 29*7c568831SAndroid Build Coastguard WorkerparserCtxt.parseChunk(s,len(s),1) 30*7c568831SAndroid Build Coastguard Workerdoc = parserCtxt.doc() 31*7c568831SAndroid Build Coastguard Workerdoc.freeDoc() 32*7c568831SAndroid Build Coastguard WorkerparserCtxt = None 33*7c568831SAndroid Build Coastguard Worker 34*7c568831SAndroid Build Coastguard Workerif err != expect: 35*7c568831SAndroid Build Coastguard Worker print("error") 36*7c568831SAndroid Build Coastguard Worker print("received %s" %(err)) 37*7c568831SAndroid Build Coastguard Worker print("expected %s" %(expect)) 38*7c568831SAndroid Build Coastguard Worker sys.exit(1) 39*7c568831SAndroid Build Coastguard Worker 40*7c568831SAndroid Build Coastguard Workeri = 10000 41*7c568831SAndroid Build Coastguard Workerwhile i > 0: 42*7c568831SAndroid Build Coastguard Worker parserCtxt = libxml2.createPushParser(None,"",0,"test.xml") 43*7c568831SAndroid Build Coastguard Worker parserCtxt.setErrorHandler(callback, "-->") 44*7c568831SAndroid Build Coastguard Worker parserCtxt.parseChunk(s,len(s),1) 45*7c568831SAndroid Build Coastguard Worker doc = parserCtxt.doc() 46*7c568831SAndroid Build Coastguard Worker doc.freeDoc() 47*7c568831SAndroid Build Coastguard Worker parserCtxt = None 48*7c568831SAndroid Build Coastguard Worker err = "" 49*7c568831SAndroid Build Coastguard Worker i = i - 1 50*7c568831SAndroid Build Coastguard Worker 51*7c568831SAndroid Build Coastguard Worker# Memory debug specific 52*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser() 53*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0: 54*7c568831SAndroid Build Coastguard Worker print("OK") 55*7c568831SAndroid Build Coastguard Workerelse: 56*7c568831SAndroid Build Coastguard Worker print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 57