xref: /aosp_15_r20/external/libxml2/python/tests/reader7.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 Workerreader = libxml2.readerForDoc(docstr, "test1", None, 0)
41*7c568831SAndroid Build Coastguard Workerret = reader.Read()
42*7c568831SAndroid Build Coastguard Workerwhile ret == 1:
43*7c568831SAndroid Build Coastguard Worker    processNode(reader)
44*7c568831SAndroid Build Coastguard Worker    ret = reader.Read()
45*7c568831SAndroid Build Coastguard Worker
46*7c568831SAndroid Build Coastguard Workerif ret != 0:
47*7c568831SAndroid Build Coastguard Worker    print("Error parsing the document test1")
48*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
49*7c568831SAndroid Build Coastguard Worker
50*7c568831SAndroid Build Coastguard Workerif result != expect:
51*7c568831SAndroid Build Coastguard Worker    print("Unexpected result for test1")
52*7c568831SAndroid Build Coastguard Worker    print(result)
53*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
54*7c568831SAndroid Build Coastguard Worker
55*7c568831SAndroid Build Coastguard Worker#
56*7c568831SAndroid Build Coastguard Worker# Reuse the reader for another document testing the ReaderNewxxx API
57*7c568831SAndroid Build Coastguard Worker#
58*7c568831SAndroid Build Coastguard Workerdocstr="""<foo>
59*7c568831SAndroid Build Coastguard Worker<label>some text</label>
60*7c568831SAndroid Build Coastguard Worker<item>1000</item>
61*7c568831SAndroid Build Coastguard Worker</foo>"""
62*7c568831SAndroid Build Coastguard Workerexpect="""0 1 foo 0
63*7c568831SAndroid Build Coastguard Worker1 14 #text 0
64*7c568831SAndroid Build Coastguard Worker1 1 label 0
65*7c568831SAndroid Build Coastguard Worker2 3 #text 0
66*7c568831SAndroid Build Coastguard Worker1 15 label 0
67*7c568831SAndroid Build Coastguard Worker1 14 #text 0
68*7c568831SAndroid Build Coastguard Worker1 1 item 0
69*7c568831SAndroid Build Coastguard Worker2 3 #text 0
70*7c568831SAndroid Build Coastguard Worker1 15 item 0
71*7c568831SAndroid Build Coastguard Worker1 14 #text 0
72*7c568831SAndroid Build Coastguard Worker0 15 foo 0
73*7c568831SAndroid Build Coastguard Worker"""
74*7c568831SAndroid Build Coastguard Workerresult = ""
75*7c568831SAndroid Build Coastguard Worker
76*7c568831SAndroid Build Coastguard Workerreader.NewDoc(docstr, "test2", None, 0)
77*7c568831SAndroid Build Coastguard Workerret = reader.Read()
78*7c568831SAndroid Build Coastguard Workerwhile ret == 1:
79*7c568831SAndroid Build Coastguard Worker    processNode(reader)
80*7c568831SAndroid Build Coastguard Worker    ret = reader.Read()
81*7c568831SAndroid Build Coastguard Worker
82*7c568831SAndroid Build Coastguard Workerif ret != 0:
83*7c568831SAndroid Build Coastguard Worker    print("Error parsing the document test2")
84*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
85*7c568831SAndroid Build Coastguard Worker
86*7c568831SAndroid Build Coastguard Workerif result != expect:
87*7c568831SAndroid Build Coastguard Worker    print("Unexpected result for test2")
88*7c568831SAndroid Build Coastguard Worker    print(result)
89*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
90*7c568831SAndroid Build Coastguard Worker
91*7c568831SAndroid Build Coastguard Worker#
92*7c568831SAndroid Build Coastguard Worker# cleanup
93*7c568831SAndroid Build Coastguard Worker#
94*7c568831SAndroid Build Coastguard Workerdel reader
95*7c568831SAndroid Build Coastguard Worker
96*7c568831SAndroid Build Coastguard Worker# Memory debug specific
97*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser()
98*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0:
99*7c568831SAndroid Build Coastguard Worker    print("OK")
100*7c568831SAndroid Build Coastguard Workerelse:
101*7c568831SAndroid Build Coastguard Worker    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
102