xref: /aosp_15_r20/external/libxml2/python/tests/walker.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*7c568831SAndroid Build Coastguard Worker#
3*7c568831SAndroid Build Coastguard Worker# this tests the entities substitutions with the XmlTextReader interface
4*7c568831SAndroid Build Coastguard Worker#
5*7c568831SAndroid Build Coastguard Workerimport sys
6*7c568831SAndroid Build Coastguard Workerimport setup_test
7*7c568831SAndroid Build Coastguard Workerimport libxml2
8*7c568831SAndroid Build Coastguard Worker
9*7c568831SAndroid Build Coastguard Worker# Memory debug specific
10*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1)
11*7c568831SAndroid Build Coastguard Worker
12*7c568831SAndroid Build Coastguard Workerresult = ""
13*7c568831SAndroid Build Coastguard Workerdef processNode(reader):
14*7c568831SAndroid Build Coastguard Worker    global result
15*7c568831SAndroid Build Coastguard Worker
16*7c568831SAndroid Build Coastguard Worker    result = result + "%d %d %s %d\n" % (reader.Depth(), reader.NodeType(),
17*7c568831SAndroid Build Coastguard Worker			   reader.Name(), reader.IsEmptyElement())
18*7c568831SAndroid Build Coastguard Worker
19*7c568831SAndroid Build Coastguard Worker#
20*7c568831SAndroid Build Coastguard Worker# Parse a document testing the readerForxxx API
21*7c568831SAndroid Build Coastguard Worker#
22*7c568831SAndroid Build Coastguard Workerdocstr="""<foo>
23*7c568831SAndroid Build Coastguard Worker<label>some text</label>
24*7c568831SAndroid Build Coastguard Worker<item>100</item>
25*7c568831SAndroid Build Coastguard Worker</foo>"""
26*7c568831SAndroid Build Coastguard Workerexpect="""0 1 foo 0
27*7c568831SAndroid Build Coastguard Worker1 14 #text 0
28*7c568831SAndroid Build Coastguard Worker1 1 label 0
29*7c568831SAndroid Build Coastguard Worker2 3 #text 0
30*7c568831SAndroid Build Coastguard Worker1 15 label 0
31*7c568831SAndroid Build Coastguard Worker1 14 #text 0
32*7c568831SAndroid Build Coastguard Worker1 1 item 0
33*7c568831SAndroid Build Coastguard Worker2 3 #text 0
34*7c568831SAndroid Build Coastguard Worker1 15 item 0
35*7c568831SAndroid Build Coastguard Worker1 14 #text 0
36*7c568831SAndroid Build Coastguard Worker0 15 foo 0
37*7c568831SAndroid Build Coastguard Worker"""
38*7c568831SAndroid Build Coastguard Workerresult = ""
39*7c568831SAndroid Build Coastguard Worker
40*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(docstr)
41*7c568831SAndroid Build Coastguard Workerreader = doc.readerWalker();
42*7c568831SAndroid Build Coastguard Workerret = reader.Read()
43*7c568831SAndroid Build Coastguard Workerwhile ret == 1:
44*7c568831SAndroid Build Coastguard Worker    processNode(reader)
45*7c568831SAndroid Build Coastguard Worker    ret = reader.Read()
46*7c568831SAndroid Build Coastguard Worker
47*7c568831SAndroid Build Coastguard Workerif ret != 0:
48*7c568831SAndroid Build Coastguard Worker    print("Error parsing the document test1")
49*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
50*7c568831SAndroid Build Coastguard Worker
51*7c568831SAndroid Build Coastguard Workerif result != expect:
52*7c568831SAndroid Build Coastguard Worker    print("Unexpected result for test1")
53*7c568831SAndroid Build Coastguard Worker    print(result)
54*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
55*7c568831SAndroid Build Coastguard Worker
56*7c568831SAndroid Build Coastguard Workerdoc.freeDoc()
57*7c568831SAndroid Build Coastguard Worker
58*7c568831SAndroid Build Coastguard Worker#
59*7c568831SAndroid Build Coastguard Worker# Reuse the reader for another document testing the ReaderNewWalker API
60*7c568831SAndroid Build Coastguard Worker#
61*7c568831SAndroid Build Coastguard Workerdocstr="""<foo>
62*7c568831SAndroid Build Coastguard Worker<label>some text</label>
63*7c568831SAndroid Build Coastguard Worker<item>1000</item>
64*7c568831SAndroid Build Coastguard Worker</foo>"""
65*7c568831SAndroid Build Coastguard Workerexpect="""0 1 foo 0
66*7c568831SAndroid Build Coastguard Worker1 14 #text 0
67*7c568831SAndroid Build Coastguard Worker1 1 label 0
68*7c568831SAndroid Build Coastguard Worker2 3 #text 0
69*7c568831SAndroid Build Coastguard Worker1 15 label 0
70*7c568831SAndroid Build Coastguard Worker1 14 #text 0
71*7c568831SAndroid Build Coastguard Worker1 1 item 0
72*7c568831SAndroid Build Coastguard Worker2 3 #text 0
73*7c568831SAndroid Build Coastguard Worker1 15 item 0
74*7c568831SAndroid Build Coastguard Worker1 14 #text 0
75*7c568831SAndroid Build Coastguard Worker0 15 foo 0
76*7c568831SAndroid Build Coastguard Worker"""
77*7c568831SAndroid Build Coastguard Workerresult = ""
78*7c568831SAndroid Build Coastguard Worker
79*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(docstr)
80*7c568831SAndroid Build Coastguard Workerreader.NewWalker(doc)
81*7c568831SAndroid Build Coastguard Worker
82*7c568831SAndroid Build Coastguard Workerret = reader.Read()
83*7c568831SAndroid Build Coastguard Workerwhile ret == 1:
84*7c568831SAndroid Build Coastguard Worker    processNode(reader)
85*7c568831SAndroid Build Coastguard Worker    ret = reader.Read()
86*7c568831SAndroid Build Coastguard Worker
87*7c568831SAndroid Build Coastguard Workerif ret != 0:
88*7c568831SAndroid Build Coastguard Worker    print("Error parsing the document test2")
89*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
90*7c568831SAndroid Build Coastguard Worker
91*7c568831SAndroid Build Coastguard Workerif result != expect:
92*7c568831SAndroid Build Coastguard Worker    print("Unexpected result for test2")
93*7c568831SAndroid Build Coastguard Worker    print(result)
94*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
95*7c568831SAndroid Build Coastguard Worker
96*7c568831SAndroid Build Coastguard Workerdoc.freeDoc()
97*7c568831SAndroid Build Coastguard Worker
98*7c568831SAndroid Build Coastguard Worker#
99*7c568831SAndroid Build Coastguard Worker# Reuse the reader for another document testing the ReaderNewxxx API
100*7c568831SAndroid Build Coastguard Worker#
101*7c568831SAndroid Build Coastguard Workerdocstr="""<foo>
102*7c568831SAndroid Build Coastguard Worker<label>some text</label>
103*7c568831SAndroid Build Coastguard Worker<item>1000</item>
104*7c568831SAndroid Build Coastguard Worker</foo>"""
105*7c568831SAndroid Build Coastguard Workerexpect="""0 1 foo 0
106*7c568831SAndroid Build Coastguard Worker1 14 #text 0
107*7c568831SAndroid Build Coastguard Worker1 1 label 0
108*7c568831SAndroid Build Coastguard Worker2 3 #text 0
109*7c568831SAndroid Build Coastguard Worker1 15 label 0
110*7c568831SAndroid Build Coastguard Worker1 14 #text 0
111*7c568831SAndroid Build Coastguard Worker1 1 item 0
112*7c568831SAndroid Build Coastguard Worker2 3 #text 0
113*7c568831SAndroid Build Coastguard Worker1 15 item 0
114*7c568831SAndroid Build Coastguard Worker1 14 #text 0
115*7c568831SAndroid Build Coastguard Worker0 15 foo 0
116*7c568831SAndroid Build Coastguard Worker"""
117*7c568831SAndroid Build Coastguard Workerresult = ""
118*7c568831SAndroid Build Coastguard Worker
119*7c568831SAndroid Build Coastguard Workerreader.NewDoc(docstr, "test3", None, 0)
120*7c568831SAndroid Build Coastguard Workerret = reader.Read()
121*7c568831SAndroid Build Coastguard Workerwhile ret == 1:
122*7c568831SAndroid Build Coastguard Worker    processNode(reader)
123*7c568831SAndroid Build Coastguard Worker    ret = reader.Read()
124*7c568831SAndroid Build Coastguard Worker
125*7c568831SAndroid Build Coastguard Workerif ret != 0:
126*7c568831SAndroid Build Coastguard Worker    print("Error parsing the document test3")
127*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
128*7c568831SAndroid Build Coastguard Worker
129*7c568831SAndroid Build Coastguard Workerif result != expect:
130*7c568831SAndroid Build Coastguard Worker    print("Unexpected result for test3")
131*7c568831SAndroid Build Coastguard Worker    print(result)
132*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
133*7c568831SAndroid Build Coastguard Worker
134*7c568831SAndroid Build Coastguard Worker#
135*7c568831SAndroid Build Coastguard Worker# cleanup
136*7c568831SAndroid Build Coastguard Worker#
137*7c568831SAndroid Build Coastguard Workerdel reader
138*7c568831SAndroid Build Coastguard Worker
139*7c568831SAndroid Build Coastguard Worker# Memory debug specific
140*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser()
141*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0:
142*7c568831SAndroid Build Coastguard Worker    print("OK")
143*7c568831SAndroid Build Coastguard Workerelse:
144*7c568831SAndroid Build Coastguard Worker    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
145