Imported Upstream version 2.9.1
[platform/upstream/libxml2.git] / python / tests / nsdel.py
1 #!/usr/bin/python -u
2 #
3 # this test exercise the XPath basic engine, parser, etc, and
4 # allows to detect memory leaks
5 #
6 import sys
7 import libxml2
8
9 instance="""<?xml version="1.0"?>
10 <tag xmlns:foo='urn:foo' xmlns:bar='urn:bar' xmlns:baz='urn:baz' />"""
11
12 def namespaceDefs(node):
13     n = node.nsDefs()
14     while n:
15         yield n
16         n = n.next
17
18 def checkNamespaceDefs(node, count):
19     nsList = list(namespaceDefs(node))
20     #print nsList
21     if len(nsList) != count :
22         raise Exception("Error: saw %d namespace declarations.  Expected %d" % (len(nsList), count))
23     
24 # Memory debug specific
25 libxml2.debugMemory(1)
26
27 # Remove single namespace
28 doc = libxml2.parseDoc(instance)
29 node = doc.getRootElement()
30 checkNamespaceDefs(node, 3)
31 ns = node.removeNsDef('urn:bar')
32 checkNamespaceDefs(node, 2)
33 ns.freeNsList()
34 doc.freeDoc()
35
36 # Remove all namespaces
37 doc = libxml2.parseDoc(instance)
38 node = doc.getRootElement()
39 checkNamespaceDefs(node, 3)
40 ns = node.removeNsDef(None)
41 checkNamespaceDefs(node, 0)
42 ns.freeNsList()
43 doc.freeDoc()
44
45 # Remove a namespace refered to by a child
46 doc = libxml2.newDoc("1.0")
47 root = doc.newChild(None, "root", None)
48 namespace = root.newNs("http://example.com/sample", "s")
49 child = root.newChild(namespace, "child", None)
50 root.removeNsDef("http://example.com/sample")
51 doc.reconciliateNs(root)
52 namespace.freeNsList()
53 doc.serialize() # This should not segfault
54 doc.freeDoc()
55
56 # Memory debug specific
57 libxml2.cleanupParser()
58 if libxml2.debugMemory(1) == 0:
59     print("OK")
60 else:
61     print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
62     libxml2.dumpMemory()