xref: /aosp_15_r20/external/libxml2/python/tests/cutnpaste.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*7c568831SAndroid Build Coastguard Workerimport sys
3*7c568831SAndroid Build Coastguard Workerimport setup_test
4*7c568831SAndroid Build Coastguard Workerimport libxml2
5*7c568831SAndroid Build Coastguard Worker
6*7c568831SAndroid Build Coastguard Worker# Memory debug specific
7*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1)
8*7c568831SAndroid Build Coastguard Worker
9*7c568831SAndroid Build Coastguard Worker#
10*7c568831SAndroid Build Coastguard Worker# Testing XML document serialization
11*7c568831SAndroid Build Coastguard Worker#
12*7c568831SAndroid Build Coastguard Workersource = libxml2.parseDoc("""<?xml version="1.0"?>
13*7c568831SAndroid Build Coastguard Worker<root xmlns:foo="http://example.org/foo"
14*7c568831SAndroid Build Coastguard Worker      xmlns:bar="http://example.org/bar">
15*7c568831SAndroid Build Coastguard Worker<include xmlns="http://example.org/include">
16*7c568831SAndroid Build Coastguard Worker<fragment><foo:elem bar="tricky"/></fragment>
17*7c568831SAndroid Build Coastguard Worker</include>
18*7c568831SAndroid Build Coastguard Worker</root>
19*7c568831SAndroid Build Coastguard Worker""")
20*7c568831SAndroid Build Coastguard Worker
21*7c568831SAndroid Build Coastguard Workertarget = libxml2.parseDoc("""<?xml version="1.0"?>
22*7c568831SAndroid Build Coastguard Worker<root xmlns:foobar="http://example.org/bar"/>""")
23*7c568831SAndroid Build Coastguard Worker
24*7c568831SAndroid Build Coastguard Workerfragment = source.xpathEval("//*[name()='fragment']")[0]
25*7c568831SAndroid Build Coastguard Workerdest = target.getRootElement()
26*7c568831SAndroid Build Coastguard Worker
27*7c568831SAndroid Build Coastguard Worker# do a cut and paste operation
28*7c568831SAndroid Build Coastguard Workerfragment.unlinkNode()
29*7c568831SAndroid Build Coastguard Workerdest.addChild(fragment)
30*7c568831SAndroid Build Coastguard Worker# do the namespace fixup
31*7c568831SAndroid Build Coastguard Workerdest.reconciliateNs(target)
32*7c568831SAndroid Build Coastguard Worker
33*7c568831SAndroid Build Coastguard Worker# The source tree can be freed at that point
34*7c568831SAndroid Build Coastguard Workersource.freeDoc()
35*7c568831SAndroid Build Coastguard Worker
36*7c568831SAndroid Build Coastguard Worker# check the resulting tree
37*7c568831SAndroid Build Coastguard Workerstr = dest.serialize()
38*7c568831SAndroid Build Coastguard Workerif str != """<root xmlns:foobar="http://example.org/bar" xmlns:default="http://example.org/include" xmlns:foo="http://example.org/foo"><default:fragment><foo:elem bar="tricky"/></default:fragment></root>""":
39*7c568831SAndroid Build Coastguard Worker    print("reconciliateNs() failed")
40*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
41*7c568831SAndroid Build Coastguard Workertarget.freeDoc()
42*7c568831SAndroid Build Coastguard Worker
43*7c568831SAndroid Build Coastguard Worker# Memory debug specific
44*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser()
45*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0:
46*7c568831SAndroid Build Coastguard Worker    print("OK")
47*7c568831SAndroid Build Coastguard Workerelse:
48*7c568831SAndroid Build Coastguard Worker    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
49