| #!/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() |