Blame python/tests/nsdel.py

Packit Service a31ea6
#!/usr/bin/python -u
Packit Service a31ea6
#
Packit Service a31ea6
# this test exercise the XPath basic engine, parser, etc, and
Packit Service a31ea6
# allows to detect memory leaks
Packit Service a31ea6
#
Packit Service a31ea6
import sys
Packit Service a31ea6
import libxml2
Packit Service a31ea6
Packit Service a31ea6
instance="""
Packit Service a31ea6
<tag xmlns:foo='urn:foo' xmlns:bar='urn:bar' xmlns:baz='urn:baz' />"""
Packit Service a31ea6
Packit Service a31ea6
def namespaceDefs(node):
Packit Service a31ea6
    n = node.nsDefs()
Packit Service a31ea6
    while n:
Packit Service a31ea6
        yield n
Packit Service a31ea6
        n = n.next
Packit Service a31ea6
Packit Service a31ea6
def checkNamespaceDefs(node, count):
Packit Service a31ea6
    nsList = list(namespaceDefs(node))
Packit Service a31ea6
    #print nsList
Packit Service a31ea6
    if len(nsList) != count :
Packit Service a31ea6
        raise Exception("Error: saw %d namespace declarations.  Expected %d" % (len(nsList), count))
Packit Service a31ea6
    
Packit Service a31ea6
# Memory debug specific
Packit Service a31ea6
libxml2.debugMemory(1)
Packit Service a31ea6
Packit Service a31ea6
# Remove single namespace
Packit Service a31ea6
doc = libxml2.parseDoc(instance)
Packit Service a31ea6
node = doc.getRootElement()
Packit Service a31ea6
checkNamespaceDefs(node, 3)
Packit Service a31ea6
ns = node.removeNsDef('urn:bar')
Packit Service a31ea6
checkNamespaceDefs(node, 2)
Packit Service a31ea6
ns.freeNsList()
Packit Service a31ea6
doc.freeDoc()
Packit Service a31ea6
Packit Service a31ea6
# Remove all namespaces
Packit Service a31ea6
doc = libxml2.parseDoc(instance)
Packit Service a31ea6
node = doc.getRootElement()
Packit Service a31ea6
checkNamespaceDefs(node, 3)
Packit Service a31ea6
ns = node.removeNsDef(None)
Packit Service a31ea6
checkNamespaceDefs(node, 0)
Packit Service a31ea6
ns.freeNsList()
Packit Service a31ea6
doc.freeDoc()
Packit Service a31ea6
Packit Service a31ea6
# Remove a namespace refered to by a child
Packit Service a31ea6
doc = libxml2.newDoc("1.0")
Packit Service a31ea6
root = doc.newChild(None, "root", None)
Packit Service a31ea6
namespace = root.newNs("http://example.com/sample", "s")
Packit Service a31ea6
child = root.newChild(namespace, "child", None)
Packit Service a31ea6
root.removeNsDef("http://example.com/sample")
Packit Service a31ea6
doc.reconciliateNs(root)
Packit Service a31ea6
namespace.freeNsList()
Packit Service a31ea6
doc.serialize() # This should not segfault
Packit Service a31ea6
doc.freeDoc()
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()