1#!/usr/bin/python
2import sys, libxml2
3
4libxml2.debugMemory(True)
5
6expect="""--> Invalid expression
7--> xmlXPathEval: evaluation failed
8--> Invalid expression
9--> xmlXPathEval: evaluation failed
10--> Invalid expression
11--> xmlXPathEval: evaluation failed
12--> Invalid expression
13--> xmlXPathEval: evaluation failed
14--> Invalid expression
15--> xmlXPathEval: evaluation failed
16--> Invalid expression
17--> xmlXPathEval: evaluation failed
18"""
19err=""
20def callback(ctx, str):
21     global err
22
23     err = err + "%s %s" % (ctx, str)
24
25libxml2.registerErrorHandler(callback, "-->")
26
27doc = libxml2.parseDoc("<fish/>")
28ctxt = doc.xpathNewContext()
29ctxt.setContextNode(doc)
30for expr in (":false()","bad:()","bad(:)",":bad(:)","bad:(:)","bad:bad(:)"):
31	try:
32		ctxt.xpathEval(expr)
33	except libxml2.xpathError, e:
34	        pass
35	else:
36		print "Unexpectedly legal expression:", expr
37ctxt.xpathFreeContext()
38doc.freeDoc()
39
40if err != expect:
41    print "error"
42    print "received %s" %(err)
43    print "expected %s" %(expect)
44    sys.exit(1)
45
46libxml2.cleanupParser()
47leakedbytes = libxml2.debugMemory(True)
48if leakedbytes == 0:
49	print "OK"
50else:
51	print "Memory leak", leakedbytes, "bytes"
52	# drop file to .memdump file in cwd, but won't work if not compiled in
53	libxml2.dumpMemory()
54