| #!/usr/bin/python -u |
| import sys |
| import libxml2 |
| |
| #memory debug specific |
| libxml2.debugMemory(1) |
| |
| # |
| # A document hosting the nodes returned from the extension function |
| # |
| mydoc = libxml2.newDoc("1.0") |
| |
| def foo(ctx, str): |
| global mydoc |
| |
| # |
| # test returning a node set works as expected |
| # |
| parent = mydoc.newDocNode(None, 'p', None) |
| mydoc.addChild(parent) |
| node = mydoc.newDocText(str) |
| parent.addChild(node) |
| return [parent] |
| |
| doc = libxml2.parseFile("tst.xml") |
| ctxt = doc.xpathNewContext() |
| libxml2.registerXPathFunction(ctxt._o, "foo", None, foo) |
| res = ctxt.xpathEval("foo('hello')") |
| if type(res) != type([]): |
| print "Failed to return a nodeset" |
| sys.exit(1) |
| if len(res) != 1: |
| print "Unexpected nodeset size" |
| sys.exit(1) |
| node = res[0] |
| if node.name != 'p': |
| print "Unexpected nodeset element result" |
| sys.exit(1) |
| node = node.children |
| if node.type != 'text': |
| print "Unexpected nodeset element children type" |
| sys.exit(1) |
| if node.content != 'hello': |
| print "Unexpected nodeset element children content" |
| sys.exit(1) |
| |
| doc.freeDoc() |
| mydoc.freeDoc() |
| ctxt.xpathFreeContext() |
| |
| #memory debug specific |
| libxml2.cleanupParser() |
| if libxml2.debugMemory(1) == 0: |
| print "OK" |
| else: |
| print "Memory leak %d bytes" % (libxml2.debugMemory(1)) |
| libxml2.dumpMemory() |