| #!/usr/bin/env python3 | |
| import sys | |
| import setup_test | |
| 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))) |