Blame python/tests/nsdel.py

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