|
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()
|