1 #!/usr/bin/python -u 2 import sys 3 import libxml2 4 5 # Memory debug specific 6 libxml2.debugMemory(1) 7 8 def foo(ctx, x): 9 return x + 1 10 11 def bar(ctx, x): 12 return "%d" % (x + 2) 13 14 doc = libxml2.parseFile("tst.xml") 15 ctxt = doc.xpathNewContext() 16 res = ctxt.xpathEval("//*") 17 if len(res) != 2: 18 print("xpath query: wrong node set size") 19 sys.exit(1) 20 if res[0].name != "doc" or res[1].name != "foo": 21 print("xpath query: wrong node set value") 22 sys.exit(1) 23 24 libxml2.registerXPathFunction(ctxt._o, "foo", None, foo) 25 libxml2.registerXPathFunction(ctxt._o, "bar", None, bar) 26 i = 10000 27 while i > 0: 28 res = ctxt.xpathEval("foo(1)") 29 if res != 2: 30 print("xpath extension failure") 31 sys.exit(1) 32 i = i - 1 33 i = 10000 34 while i > 0: 35 res = ctxt.xpathEval("bar(1)") 36 if res != "3": 37 print("xpath extension failure got %s expecting '3'") 38 sys.exit(1) 39 i = i - 1 40 doc.freeDoc() 41 ctxt.xpathFreeContext() 42 43 # Memory debug specific 44 libxml2.cleanupParser() 45 if libxml2.debugMemory(1) == 0: 46 print("OK") 47 else: 48 print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 49 libxml2.dumpMemory() 50