mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-21 14:53:44 +03:00
applied patch from Brent Hendricks adding namespace removal at the python
* python/libxml.c python/libxml.py: applied patch from Brent Hendricks adding namespace removal at the python level #300209 * python/tests/Makefile.am python/tests/nsdel.py: added the regression test Daniel
This commit is contained in:
62
python/tests/nsdel.py
Executable file
62
python/tests/nsdel.py
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/python -u
|
||||
#
|
||||
# this test exercise the XPath basic engine, parser, etc, and
|
||||
# allows to detect memory leaks
|
||||
#
|
||||
import sys
|
||||
import libxml2
|
||||
|
||||
instance="""<?xml version="1.0"?>
|
||||
<tag xmlns:foo='urn:foo' xmlns:bar='urn:bar' xmlns:baz='urn:baz' />"""
|
||||
|
||||
def namespaceDefs(node):
|
||||
n = node.nsDefs()
|
||||
while n:
|
||||
yield n
|
||||
n = n.next
|
||||
|
||||
def checkNamespaceDefs(node, count):
|
||||
nsList = list(namespaceDefs(node))
|
||||
#print nsList
|
||||
if len(nsList) != count :
|
||||
raise Exception, "Error: saw %d namespace declarations. Expected %d" % (len(nsList), count)
|
||||
|
||||
# Memory debug specific
|
||||
libxml2.debugMemory(1)
|
||||
|
||||
# Remove single namespace
|
||||
doc = libxml2.parseDoc(instance)
|
||||
node = doc.getRootElement()
|
||||
checkNamespaceDefs(node, 3)
|
||||
ns = node.removeNsDef('urn:bar')
|
||||
checkNamespaceDefs(node, 2)
|
||||
ns.freeNsList()
|
||||
doc.freeDoc()
|
||||
|
||||
# Remove all namespaces
|
||||
doc = libxml2.parseDoc(instance)
|
||||
node = doc.getRootElement()
|
||||
checkNamespaceDefs(node, 3)
|
||||
ns = node.removeNsDef(None)
|
||||
checkNamespaceDefs(node, 0)
|
||||
ns.freeNsList()
|
||||
doc.freeDoc()
|
||||
|
||||
# Remove a namespace refered to by a child
|
||||
doc = libxml2.newDoc("1.0")
|
||||
root = doc.newChild(None, "root", None)
|
||||
namespace = root.newNs("http://example.com/sample", "s")
|
||||
child = root.newChild(namespace, "child", None)
|
||||
root.removeNsDef("http://example.com/sample")
|
||||
doc.reconciliateNs(root)
|
||||
namespace.freeNsList()
|
||||
doc.serialize() # This should not segfault
|
||||
doc.freeDoc()
|
||||
|
||||
# Memory debug specific
|
||||
libxml2.cleanupParser()
|
||||
if libxml2.debugMemory(1) == 0:
|
||||
print "OK"
|
||||
else:
|
||||
print "Memory leak %d bytes" % (libxml2.debugMemory(1))
|
||||
libxml2.dumpMemory()
|
Reference in New Issue
Block a user