Home | History | Annotate | Download | only in tests
      1 #!/usr/bin/python -u
      2 import sys
      3 import libxml2
      4 
      5 #memory debug specific
      6 libxml2.debugMemory(1)
      7 
      8 called = ""
      9 
     10 def foo(ctx, x):
     11     global called
     12 
     13     #
     14     # test that access to the XPath evaluation contexts
     15     #
     16     pctxt = libxml2.xpathParserContext(_obj=ctx)
     17     ctxt = pctxt.context()
     18     called = ctxt.function()
     19     return x + 1
     20 
     21 def bar(ctxt, x):
     22     return "%d" % (x + 2)
     23 
     24 doc = libxml2.parseFile("tst.xml")
     25 ctxt = doc.xpathNewContext()
     26 res = ctxt.xpathEval("//*")
     27 if len(res) != 2:
     28     print("xpath query: wrong node set size")
     29     sys.exit(1)
     30 if res[0].name != "doc" or res[1].name != "foo":
     31     print("xpath query: wrong node set value")
     32     sys.exit(1)
     33 libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
     34 libxml2.registerXPathFunction(ctxt._o, "bar", None, bar)
     35 i = 10000
     36 while i > 0:
     37     res = ctxt.xpathEval("foo(1)")
     38     if res != 2:
     39         print("xpath extension failure")
     40         sys.exit(1)
     41     i = i - 1
     42 i = 10000
     43 while i > 0:
     44     res = ctxt.xpathEval("bar(1)")
     45     if res != "3":
     46         print("xpath extension failure got %s expecting '3'")
     47         sys.exit(1)
     48     i = i - 1
     49 doc.freeDoc()
     50 ctxt.xpathFreeContext()
     51 
     52 if called != "foo":
     53     print("xpath function: failed to access the context")
     54     print("xpath function: %s" % (called))
     55     sys.exit(1)
     56 
     57 #memory debug specific
     58 libxml2.cleanupParser()
     59 if libxml2.debugMemory(1) == 0:
     60     print("OK")
     61 else:
     62     print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     63     libxml2.dumpMemory()
     64