xref: /aosp_15_r20/external/libxml2/python/tests/nsdel.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*7c568831SAndroid Build Coastguard Worker#
3*7c568831SAndroid Build Coastguard Worker# this test exercise the XPath basic engine, parser, etc, and
4*7c568831SAndroid Build Coastguard Worker# allows to detect memory leaks
5*7c568831SAndroid Build Coastguard Worker#
6*7c568831SAndroid Build Coastguard Workerimport sys
7*7c568831SAndroid Build Coastguard Workerimport setup_test
8*7c568831SAndroid Build Coastguard Workerimport libxml2
9*7c568831SAndroid Build Coastguard Worker
10*7c568831SAndroid Build Coastguard Workerinstance="""<?xml version="1.0"?>
11*7c568831SAndroid Build Coastguard Worker<tag xmlns:foo='urn:foo' xmlns:bar='urn:bar' xmlns:baz='urn:baz' />"""
12*7c568831SAndroid Build Coastguard Worker
13*7c568831SAndroid Build Coastguard Workerdef namespaceDefs(node):
14*7c568831SAndroid Build Coastguard Worker    n = node.nsDefs()
15*7c568831SAndroid Build Coastguard Worker    while n:
16*7c568831SAndroid Build Coastguard Worker        yield n
17*7c568831SAndroid Build Coastguard Worker        n = n.next
18*7c568831SAndroid Build Coastguard Worker
19*7c568831SAndroid Build Coastguard Workerdef checkNamespaceDefs(node, count):
20*7c568831SAndroid Build Coastguard Worker    nsList = list(namespaceDefs(node))
21*7c568831SAndroid Build Coastguard Worker    #print nsList
22*7c568831SAndroid Build Coastguard Worker    if len(nsList) != count :
23*7c568831SAndroid Build Coastguard Worker        raise Exception("Error: saw %d namespace declarations.  Expected %d" % (len(nsList), count))
24*7c568831SAndroid Build Coastguard Worker
25*7c568831SAndroid Build Coastguard Worker# Memory debug specific
26*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1)
27*7c568831SAndroid Build Coastguard Worker
28*7c568831SAndroid Build Coastguard Worker# Remove single namespace
29*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(instance)
30*7c568831SAndroid Build Coastguard Workernode = doc.getRootElement()
31*7c568831SAndroid Build Coastguard WorkercheckNamespaceDefs(node, 3)
32*7c568831SAndroid Build Coastguard Workerns = node.removeNsDef('urn:bar')
33*7c568831SAndroid Build Coastguard WorkercheckNamespaceDefs(node, 2)
34*7c568831SAndroid Build Coastguard Workerns.freeNsList()
35*7c568831SAndroid Build Coastguard Workerdoc.freeDoc()
36*7c568831SAndroid Build Coastguard Worker
37*7c568831SAndroid Build Coastguard Worker# Remove all namespaces
38*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(instance)
39*7c568831SAndroid Build Coastguard Workernode = doc.getRootElement()
40*7c568831SAndroid Build Coastguard WorkercheckNamespaceDefs(node, 3)
41*7c568831SAndroid Build Coastguard Workerns = node.removeNsDef(None)
42*7c568831SAndroid Build Coastguard WorkercheckNamespaceDefs(node, 0)
43*7c568831SAndroid Build Coastguard Workerns.freeNsList()
44*7c568831SAndroid Build Coastguard Workerdoc.freeDoc()
45*7c568831SAndroid Build Coastguard Worker
46*7c568831SAndroid Build Coastguard Worker# Remove a namespace referred to by a child
47*7c568831SAndroid Build Coastguard Workerdoc = libxml2.newDoc("1.0")
48*7c568831SAndroid Build Coastguard Workerroot = doc.newChild(None, "root", None)
49*7c568831SAndroid Build Coastguard Workernamespace = root.newNs("http://example.com/sample", "s")
50*7c568831SAndroid Build Coastguard Workerchild = root.newChild(namespace, "child", None)
51*7c568831SAndroid Build Coastguard Workerroot.removeNsDef("http://example.com/sample")
52*7c568831SAndroid Build Coastguard Workerdoc.reconciliateNs(root)
53*7c568831SAndroid Build Coastguard Workernamespace.freeNsList()
54*7c568831SAndroid Build Coastguard Workerdoc.serialize() # This should not segfault
55*7c568831SAndroid Build Coastguard Workerdoc.freeDoc()
56*7c568831SAndroid Build Coastguard Worker
57*7c568831SAndroid Build Coastguard Worker# Memory debug specific
58*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser()
59*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0:
60*7c568831SAndroid Build Coastguard Worker    print("OK")
61*7c568831SAndroid Build Coastguard Workerelse:
62*7c568831SAndroid Build Coastguard Worker    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
63