blob: 6940b7902ec2e201431cc09a83d59cc0f163954e [file] [log] [blame]
Daniel Veillard074f37e2008-09-01 13:38:22 +00001#!/usr/bin/python
2import sys, libxml2
3
4libxml2.debugMemory(True)
5
6expect="""--> Invalid expression
Daniel Veillard074f37e2008-09-01 13:38:22 +00007--> Invalid expression
Daniel Veillard074f37e2008-09-01 13:38:22 +00008--> Invalid expression
Daniel Veillard074f37e2008-09-01 13:38:22 +00009--> Invalid expression
Daniel Veillard074f37e2008-09-01 13:38:22 +000010--> Invalid expression
Daniel Veillard074f37e2008-09-01 13:38:22 +000011--> Invalid expression
Martin729601f2009-10-12 22:42:26 +020012--> Invalid expression
Martin729601f2009-10-12 22:42:26 +020013--> Invalid expression
Martin729601f2009-10-12 22:42:26 +020014--> Invalid expression
Martin729601f2009-10-12 22:42:26 +020015--> Invalid expression
Daniel Veillard074f37e2008-09-01 13:38:22 +000016"""
17err=""
18def callback(ctx, str):
19 global err
20
21 err = err + "%s %s" % (ctx, str)
22
23libxml2.registerErrorHandler(callback, "-->")
24
25doc = libxml2.parseDoc("<fish/>")
26ctxt = doc.xpathNewContext()
27ctxt.setContextNode(doc)
Martin729601f2009-10-12 22:42:26 +020028badexprs = (
29 ":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)",
30 "a:/b", "/c:/d", "//e:/f", "g://h"
31 )
32for expr in badexprs:
Daniel Veillard074f37e2008-09-01 13:38:22 +000033 try:
34 ctxt.xpathEval(expr)
Daniel Veillardbf4a8f02013-04-02 10:27:57 +080035 except libxml2.xpathError:
Daniel Veillard074f37e2008-09-01 13:38:22 +000036 pass
37 else:
Daniel Veillard2cb6bf82013-03-30 21:38:20 +080038 print("Unexpectedly legal expression:", expr)
Daniel Veillard074f37e2008-09-01 13:38:22 +000039ctxt.xpathFreeContext()
40doc.freeDoc()
41
42if err != expect:
Daniel Veillard2cb6bf82013-03-30 21:38:20 +080043 print("error")
44 print("received %s" %(err))
45 print("expected %s" %(expect))
Daniel Veillard074f37e2008-09-01 13:38:22 +000046 sys.exit(1)
47
48libxml2.cleanupParser()
49leakedbytes = libxml2.debugMemory(True)
50if leakedbytes == 0:
Daniel Veillard2cb6bf82013-03-30 21:38:20 +080051 print("OK")
Daniel Veillard074f37e2008-09-01 13:38:22 +000052else:
Daniel Veillard2cb6bf82013-03-30 21:38:20 +080053 print("Memory leak", leakedbytes, "bytes")
Daniel Veillard074f37e2008-09-01 13:38:22 +000054 # drop file to .memdump file in cwd, but won't work if not compiled in
55 libxml2.dumpMemory()