Blame python/tests/xpathret.py

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