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