xref: /aosp_15_r20/external/libxml2/python/tests/reader.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*7c568831SAndroid Build Coastguard Worker# -*- coding: ISO-8859-1 -*-
3*7c568831SAndroid Build Coastguard Worker#
4*7c568831SAndroid Build Coastguard Worker# this tests the basic APIs of the XmlTextReader interface
5*7c568831SAndroid Build Coastguard Worker#
6*7c568831SAndroid Build Coastguard Workerimport setup_test
7*7c568831SAndroid Build Coastguard Workerimport libxml2
8*7c568831SAndroid Build Coastguard Workerimport sys
9*7c568831SAndroid Build Coastguard Workertry:
10*7c568831SAndroid Build Coastguard Worker    import StringIO
11*7c568831SAndroid Build Coastguard Worker    str_io = StringIO.StringIO
12*7c568831SAndroid Build Coastguard Workerexcept:
13*7c568831SAndroid Build Coastguard Worker    import io
14*7c568831SAndroid Build Coastguard Worker    str_io = io.StringIO
15*7c568831SAndroid Build Coastguard Worker
16*7c568831SAndroid Build Coastguard Worker# Memory debug specific
17*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1)
18*7c568831SAndroid Build Coastguard Worker
19*7c568831SAndroid Build Coastguard Workerf = str_io("""<a><b b1="b1"/><c>content of c</c></a>""")
20*7c568831SAndroid Build Coastguard Workerinput = libxml2.inputBuffer(f)
21*7c568831SAndroid Build Coastguard Workerreader = input.newTextReader("test1")
22*7c568831SAndroid Build Coastguard Workerret = reader.Read()
23*7c568831SAndroid Build Coastguard Workerif ret != 1:
24*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading to first element")
25*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
26*7c568831SAndroid Build Coastguard Workerif reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
27*7c568831SAndroid Build Coastguard Worker   reader.NodeType() != 1 or reader.HasAttributes() != 0:
28*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading the first element")
29*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
30*7c568831SAndroid Build Coastguard Workerret = reader.Read()
31*7c568831SAndroid Build Coastguard Workerif ret != 1:
32*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading to second element")
33*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
34*7c568831SAndroid Build Coastguard Workerif reader.Name() != "b" or reader.IsEmptyElement() != 1 or \
35*7c568831SAndroid Build Coastguard Worker   reader.NodeType() != 1 or reader.HasAttributes() != 1:
36*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading the second element")
37*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
38*7c568831SAndroid Build Coastguard Workerret = reader.Read()
39*7c568831SAndroid Build Coastguard Workerif ret != 1:
40*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading to third element")
41*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
42*7c568831SAndroid Build Coastguard Workerif reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
43*7c568831SAndroid Build Coastguard Worker   reader.NodeType() != 1 or reader.HasAttributes() != 0:
44*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading the third element")
45*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
46*7c568831SAndroid Build Coastguard Workerret = reader.Read()
47*7c568831SAndroid Build Coastguard Workerif ret != 1:
48*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading to text node")
49*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
50*7c568831SAndroid Build Coastguard Workerif reader.Name() != "#text" or reader.IsEmptyElement() != 0 or \
51*7c568831SAndroid Build Coastguard Worker   reader.NodeType() != 3 or reader.HasAttributes() != 0 or \
52*7c568831SAndroid Build Coastguard Worker   reader.Value() != "content of c":
53*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading the text node")
54*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
55*7c568831SAndroid Build Coastguard Workerret = reader.Read()
56*7c568831SAndroid Build Coastguard Workerif ret != 1:
57*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading to end of third element")
58*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
59*7c568831SAndroid Build Coastguard Workerif reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
60*7c568831SAndroid Build Coastguard Worker   reader.NodeType() != 15 or reader.HasAttributes() != 0:
61*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading the end of third element")
62*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
63*7c568831SAndroid Build Coastguard Workerret = reader.Read()
64*7c568831SAndroid Build Coastguard Workerif ret != 1:
65*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading to end of first element")
66*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
67*7c568831SAndroid Build Coastguard Workerif reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
68*7c568831SAndroid Build Coastguard Worker   reader.NodeType() != 15 or reader.HasAttributes() != 0:
69*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading the end of first element")
70*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
71*7c568831SAndroid Build Coastguard Workerret = reader.Read()
72*7c568831SAndroid Build Coastguard Workerif ret != 0:
73*7c568831SAndroid Build Coastguard Worker    print("test1: Error reading to end of document")
74*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
75*7c568831SAndroid Build Coastguard Worker
76*7c568831SAndroid Build Coastguard Worker#
77*7c568831SAndroid Build Coastguard Worker# example from the XmlTextReader docs
78*7c568831SAndroid Build Coastguard Worker#
79*7c568831SAndroid Build Coastguard Workerf = str_io("""<test xmlns:dt="urn:datatypes" dt:type="int"/>""")
80*7c568831SAndroid Build Coastguard Workerinput = libxml2.inputBuffer(f)
81*7c568831SAndroid Build Coastguard Workerreader = input.newTextReader("test2")
82*7c568831SAndroid Build Coastguard Worker
83*7c568831SAndroid Build Coastguard Workerret = reader.Read()
84*7c568831SAndroid Build Coastguard Workerif ret != 1:
85*7c568831SAndroid Build Coastguard Worker    print("Error reading test element")
86*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
87*7c568831SAndroid Build Coastguard Workerif reader.GetAttributeNo(0) != "urn:datatypes" or \
88*7c568831SAndroid Build Coastguard Worker   reader.GetAttributeNo(1) != "int" or \
89*7c568831SAndroid Build Coastguard Worker   reader.GetAttributeNs("type", "urn:datatypes") != "int" or \
90*7c568831SAndroid Build Coastguard Worker   reader.GetAttribute("dt:type") != "int":
91*7c568831SAndroid Build Coastguard Worker    print("error reading test attributes")
92*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
93*7c568831SAndroid Build Coastguard Worker
94*7c568831SAndroid Build Coastguard Worker#
95*7c568831SAndroid Build Coastguard Worker# example from the XmlTextReader docs
96*7c568831SAndroid Build Coastguard Worker#
97*7c568831SAndroid Build Coastguard Workerf = str_io("""<root xmlns:a="urn:456">
98*7c568831SAndroid Build Coastguard Worker<item>
99*7c568831SAndroid Build Coastguard Worker<ref href="a:b"/>
100*7c568831SAndroid Build Coastguard Worker</item>
101*7c568831SAndroid Build Coastguard Worker</root>""")
102*7c568831SAndroid Build Coastguard Workerinput = libxml2.inputBuffer(f)
103*7c568831SAndroid Build Coastguard Workerreader = input.newTextReader("test3")
104*7c568831SAndroid Build Coastguard Worker
105*7c568831SAndroid Build Coastguard Workerret = reader.Read()
106*7c568831SAndroid Build Coastguard Workerwhile ret == 1:
107*7c568831SAndroid Build Coastguard Worker    if reader.Name() == "ref":
108*7c568831SAndroid Build Coastguard Worker        if reader.LookupNamespace("a") != "urn:456":
109*7c568831SAndroid Build Coastguard Worker            print("error resolving namespace prefix")
110*7c568831SAndroid Build Coastguard Worker            sys.exit(1)
111*7c568831SAndroid Build Coastguard Worker        break
112*7c568831SAndroid Build Coastguard Worker    ret = reader.Read()
113*7c568831SAndroid Build Coastguard Workerif ret != 1:
114*7c568831SAndroid Build Coastguard Worker    print("Error finding the ref element")
115*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
116*7c568831SAndroid Build Coastguard Worker
117*7c568831SAndroid Build Coastguard Worker#
118*7c568831SAndroid Build Coastguard Worker# Home made example for the various attribute access functions
119*7c568831SAndroid Build Coastguard Worker#
120*7c568831SAndroid Build Coastguard Workerf = str_io("""<testattr xmlns="urn:1" xmlns:a="urn:2" b="b" a:b="a:b"/>""")
121*7c568831SAndroid Build Coastguard Workerinput = libxml2.inputBuffer(f)
122*7c568831SAndroid Build Coastguard Workerreader = input.newTextReader("test4")
123*7c568831SAndroid Build Coastguard Workerret = reader.Read()
124*7c568831SAndroid Build Coastguard Workerif ret != 1:
125*7c568831SAndroid Build Coastguard Worker    print("Error reading the testattr element")
126*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
127*7c568831SAndroid Build Coastguard Worker#
128*7c568831SAndroid Build Coastguard Worker# Attribute exploration by index
129*7c568831SAndroid Build Coastguard Worker#
130*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttributeNo(0) != 1:
131*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute(0)")
132*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
133*7c568831SAndroid Build Coastguard Workerif reader.Value() != "urn:1":
134*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(0)")
135*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
136*7c568831SAndroid Build Coastguard Workerif reader.Name() != "xmlns":
137*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(0) name")
138*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
139*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttributeNo(1) != 1:
140*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute(1)")
141*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
142*7c568831SAndroid Build Coastguard Workerif reader.Value() != "urn:2":
143*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(1)")
144*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
145*7c568831SAndroid Build Coastguard Workerif reader.Name() != "xmlns:a":
146*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(1) name")
147*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
148*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttributeNo(2) != 1:
149*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute(2)")
150*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
151*7c568831SAndroid Build Coastguard Workerif reader.Value() != "b":
152*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(2)")
153*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
154*7c568831SAndroid Build Coastguard Workerif reader.Name() != "b":
155*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(2) name")
156*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
157*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttributeNo(3) != 1:
158*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute(3)")
159*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
160*7c568831SAndroid Build Coastguard Workerif reader.Value() != "a:b":
161*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(3)")
162*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
163*7c568831SAndroid Build Coastguard Workerif reader.Name() != "a:b":
164*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(3) name")
165*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
166*7c568831SAndroid Build Coastguard Worker#
167*7c568831SAndroid Build Coastguard Worker# Attribute exploration by name
168*7c568831SAndroid Build Coastguard Worker#
169*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttribute("xmlns") != 1:
170*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute('xmlns')")
171*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
172*7c568831SAndroid Build Coastguard Workerif reader.Value() != "urn:1":
173*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute('xmlns')")
174*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
175*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttribute("xmlns:a") != 1:
176*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute('xmlns')")
177*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
178*7c568831SAndroid Build Coastguard Workerif reader.Value() != "urn:2":
179*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute('xmlns:a')")
180*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
181*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttribute("b") != 1:
182*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute('b')")
183*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
184*7c568831SAndroid Build Coastguard Workerif reader.Value() != "b":
185*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute('b')")
186*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
187*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttribute("a:b") != 1:
188*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute('a:b')")
189*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
190*7c568831SAndroid Build Coastguard Workerif reader.Value() != "a:b":
191*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute('a:b')")
192*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
193*7c568831SAndroid Build Coastguard Workerif reader.MoveToAttributeNs("b", "urn:2") != 1:
194*7c568831SAndroid Build Coastguard Worker    print("Failed moveToAttribute('b', 'urn:2')")
195*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
196*7c568831SAndroid Build Coastguard Workerif reader.Value() != "a:b":
197*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute('b', 'urn:2')")
198*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
199*7c568831SAndroid Build Coastguard Worker#
200*7c568831SAndroid Build Coastguard Worker# Go back and read in sequence
201*7c568831SAndroid Build Coastguard Worker#
202*7c568831SAndroid Build Coastguard Workerif reader.MoveToElement() != 1:
203*7c568831SAndroid Build Coastguard Worker    print("Failed to move back to element")
204*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
205*7c568831SAndroid Build Coastguard Workerif reader.MoveToFirstAttribute() != 1:
206*7c568831SAndroid Build Coastguard Worker    print("Failed to move to first attribute")
207*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
208*7c568831SAndroid Build Coastguard Workerif reader.Value() != "urn:1":
209*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(0)")
210*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
211*7c568831SAndroid Build Coastguard Workerif reader.Name() != "xmlns":
212*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(0) name")
213*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
214*7c568831SAndroid Build Coastguard Workerif reader.MoveToNextAttribute() != 1:
215*7c568831SAndroid Build Coastguard Worker    print("Failed to move to next attribute")
216*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
217*7c568831SAndroid Build Coastguard Workerif reader.Value() != "urn:2":
218*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(1)")
219*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
220*7c568831SAndroid Build Coastguard Workerif reader.Name() != "xmlns:a":
221*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(1) name")
222*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
223*7c568831SAndroid Build Coastguard Workerif reader.MoveToNextAttribute() != 1:
224*7c568831SAndroid Build Coastguard Worker    print("Failed to move to next attribute")
225*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
226*7c568831SAndroid Build Coastguard Workerif reader.Value() != "b":
227*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(2)")
228*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
229*7c568831SAndroid Build Coastguard Workerif reader.Name() != "b":
230*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(2) name")
231*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
232*7c568831SAndroid Build Coastguard Workerif reader.MoveToNextAttribute() != 1:
233*7c568831SAndroid Build Coastguard Worker    print("Failed to move to next attribute")
234*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
235*7c568831SAndroid Build Coastguard Workerif reader.Value() != "a:b":
236*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(3)")
237*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
238*7c568831SAndroid Build Coastguard Workerif reader.Name() != "a:b":
239*7c568831SAndroid Build Coastguard Worker    print("Failed to read attribute(3) name")
240*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
241*7c568831SAndroid Build Coastguard Workerif reader.MoveToNextAttribute() != 0:
242*7c568831SAndroid Build Coastguard Worker    print("Failed to detect last attribute")
243*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
244*7c568831SAndroid Build Coastguard Worker
245*7c568831SAndroid Build Coastguard Worker
246*7c568831SAndroid Build Coastguard Worker#
247*7c568831SAndroid Build Coastguard Worker# a couple of tests for namespace nodes
248*7c568831SAndroid Build Coastguard Worker#
249*7c568831SAndroid Build Coastguard Workerf = str_io("""<a xmlns="http://example.com/foo"/>""")
250*7c568831SAndroid Build Coastguard Workerinput = libxml2.inputBuffer(f)
251*7c568831SAndroid Build Coastguard Workerreader = input.newTextReader("test6")
252*7c568831SAndroid Build Coastguard Workerret = reader.Read()
253*7c568831SAndroid Build Coastguard Workerif ret != 1:
254*7c568831SAndroid Build Coastguard Worker    print("test6: failed to Read()")
255*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
256*7c568831SAndroid Build Coastguard Workerret = reader.MoveToFirstAttribute()
257*7c568831SAndroid Build Coastguard Workerif ret != 1:
258*7c568831SAndroid Build Coastguard Worker    print("test6: failed to MoveToFirstAttribute()")
259*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
260*7c568831SAndroid Build Coastguard Workerif reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
261*7c568831SAndroid Build Coastguard Worker   reader.LocalName() != "xmlns" or reader.Name() != "xmlns" or \
262*7c568831SAndroid Build Coastguard Worker   reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
263*7c568831SAndroid Build Coastguard Worker    print("test6: failed to read the namespace node")
264*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
265*7c568831SAndroid Build Coastguard Worker
266*7c568831SAndroid Build Coastguard Workerf = str_io("""<a xmlns:prefix="http://example.com/foo"/>""")
267*7c568831SAndroid Build Coastguard Workerinput = libxml2.inputBuffer(f)
268*7c568831SAndroid Build Coastguard Workerreader = input.newTextReader("test7")
269*7c568831SAndroid Build Coastguard Workerret = reader.Read()
270*7c568831SAndroid Build Coastguard Workerif ret != 1:
271*7c568831SAndroid Build Coastguard Worker    print("test7: failed to Read()")
272*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
273*7c568831SAndroid Build Coastguard Workerret = reader.MoveToFirstAttribute()
274*7c568831SAndroid Build Coastguard Workerif ret != 1:
275*7c568831SAndroid Build Coastguard Worker    print("test7: failed to MoveToFirstAttribute()")
276*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
277*7c568831SAndroid Build Coastguard Workerif reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
278*7c568831SAndroid Build Coastguard Worker   reader.LocalName() != "prefix" or reader.Name() != "xmlns:prefix" or \
279*7c568831SAndroid Build Coastguard Worker   reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
280*7c568831SAndroid Build Coastguard Worker    print("test7: failed to read the namespace node")
281*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
282*7c568831SAndroid Build Coastguard Worker
283*7c568831SAndroid Build Coastguard Worker#
284*7c568831SAndroid Build Coastguard Worker# Test for a limit case:
285*7c568831SAndroid Build Coastguard Worker#
286*7c568831SAndroid Build Coastguard Workerf = str_io("""<a/>""")
287*7c568831SAndroid Build Coastguard Workerinput = libxml2.inputBuffer(f)
288*7c568831SAndroid Build Coastguard Workerreader = input.newTextReader("test8")
289*7c568831SAndroid Build Coastguard Workerret = reader.Read()
290*7c568831SAndroid Build Coastguard Workerif ret != 1:
291*7c568831SAndroid Build Coastguard Worker    print("test8: failed to read the node")
292*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
293*7c568831SAndroid Build Coastguard Workerif reader.Name() != "a" or reader.IsEmptyElement() != 1:
294*7c568831SAndroid Build Coastguard Worker    print("test8: failed to analyze the node")
295*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
296*7c568831SAndroid Build Coastguard Workerret = reader.Read()
297*7c568831SAndroid Build Coastguard Workerif ret != 0:
298*7c568831SAndroid Build Coastguard Worker    print("test8: failed to detect the EOF")
299*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
300*7c568831SAndroid Build Coastguard Worker
301*7c568831SAndroid Build Coastguard Worker#
302*7c568831SAndroid Build Coastguard Worker# Another test provided by St�phane Bidoul and checked with C#
303*7c568831SAndroid Build Coastguard Worker#
304*7c568831SAndroid Build Coastguard Workerdef tst_reader(s):
305*7c568831SAndroid Build Coastguard Worker    f = str_io(s)
306*7c568831SAndroid Build Coastguard Worker    input = libxml2.inputBuffer(f)
307*7c568831SAndroid Build Coastguard Worker    reader = input.newTextReader("tst")
308*7c568831SAndroid Build Coastguard Worker    res = ""
309*7c568831SAndroid Build Coastguard Worker    while reader.Read():
310*7c568831SAndroid Build Coastguard Worker        res=res + "%s (%s) [%s] %d %d\n" % (reader.NodeType(),reader.Name(),
311*7c568831SAndroid Build Coastguard Worker                                      reader.Value(), reader.IsEmptyElement(),
312*7c568831SAndroid Build Coastguard Worker                                      reader.Depth())
313*7c568831SAndroid Build Coastguard Worker        if reader.NodeType() == 1: # Element
314*7c568831SAndroid Build Coastguard Worker            while reader.MoveToNextAttribute():
315*7c568831SAndroid Build Coastguard Worker                res = res + "-- %s (%s) [%s] %d %d\n" % (reader.NodeType(),
316*7c568831SAndroid Build Coastguard Worker                                       reader.Name(),reader.Value(),
317*7c568831SAndroid Build Coastguard Worker                                       reader.IsEmptyElement(), reader.Depth())
318*7c568831SAndroid Build Coastguard Worker    return res
319*7c568831SAndroid Build Coastguard Worker
320*7c568831SAndroid Build Coastguard Workerdoc="""<a><b b1="b1"/><c>content of c</c></a>"""
321*7c568831SAndroid Build Coastguard Workerexpect="""1 (a) [None] 0 0
322*7c568831SAndroid Build Coastguard Worker1 (b) [None] 1 1
323*7c568831SAndroid Build Coastguard Worker-- 2 (b1) [b1] 0 2
324*7c568831SAndroid Build Coastguard Worker1 (c) [None] 0 1
325*7c568831SAndroid Build Coastguard Worker3 (#text) [content of c] 0 2
326*7c568831SAndroid Build Coastguard Worker15 (c) [None] 0 1
327*7c568831SAndroid Build Coastguard Worker15 (a) [None] 0 0
328*7c568831SAndroid Build Coastguard Worker"""
329*7c568831SAndroid Build Coastguard Workerres = tst_reader(doc)
330*7c568831SAndroid Build Coastguard Workerif res != expect:
331*7c568831SAndroid Build Coastguard Worker    print("test5 failed")
332*7c568831SAndroid Build Coastguard Worker    print(res)
333*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
334*7c568831SAndroid Build Coastguard Worker
335*7c568831SAndroid Build Coastguard Workerdoc="""<test><b/><c/></test>"""
336*7c568831SAndroid Build Coastguard Workerexpect="""1 (test) [None] 0 0
337*7c568831SAndroid Build Coastguard Worker1 (b) [None] 1 1
338*7c568831SAndroid Build Coastguard Worker1 (c) [None] 1 1
339*7c568831SAndroid Build Coastguard Worker15 (test) [None] 0 0
340*7c568831SAndroid Build Coastguard Worker"""
341*7c568831SAndroid Build Coastguard Workerres = tst_reader(doc)
342*7c568831SAndroid Build Coastguard Workerif res != expect:
343*7c568831SAndroid Build Coastguard Worker    print("test9 failed")
344*7c568831SAndroid Build Coastguard Worker    print(res)
345*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
346*7c568831SAndroid Build Coastguard Worker
347*7c568831SAndroid Build Coastguard Workerdoc="""<a><b>bbb</b><c>ccc</c></a>"""
348*7c568831SAndroid Build Coastguard Workerexpect="""1 (a) [None] 0 0
349*7c568831SAndroid Build Coastguard Worker1 (b) [None] 0 1
350*7c568831SAndroid Build Coastguard Worker3 (#text) [bbb] 0 2
351*7c568831SAndroid Build Coastguard Worker15 (b) [None] 0 1
352*7c568831SAndroid Build Coastguard Worker1 (c) [None] 0 1
353*7c568831SAndroid Build Coastguard Worker3 (#text) [ccc] 0 2
354*7c568831SAndroid Build Coastguard Worker15 (c) [None] 0 1
355*7c568831SAndroid Build Coastguard Worker15 (a) [None] 0 0
356*7c568831SAndroid Build Coastguard Worker"""
357*7c568831SAndroid Build Coastguard Workerres = tst_reader(doc)
358*7c568831SAndroid Build Coastguard Workerif res != expect:
359*7c568831SAndroid Build Coastguard Worker    print("test10 failed")
360*7c568831SAndroid Build Coastguard Worker    print(res)
361*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
362*7c568831SAndroid Build Coastguard Worker
363*7c568831SAndroid Build Coastguard Workerdoc="""<test a="a"/>"""
364*7c568831SAndroid Build Coastguard Workerexpect="""1 (test) [None] 1 0
365*7c568831SAndroid Build Coastguard Worker-- 2 (a) [a] 0 1
366*7c568831SAndroid Build Coastguard Worker"""
367*7c568831SAndroid Build Coastguard Workerres = tst_reader(doc)
368*7c568831SAndroid Build Coastguard Workerif res != expect:
369*7c568831SAndroid Build Coastguard Worker    print("test11 failed")
370*7c568831SAndroid Build Coastguard Worker    print(res)
371*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
372*7c568831SAndroid Build Coastguard Worker
373*7c568831SAndroid Build Coastguard Workerdoc="""<test><a>aaa</a><b/></test>"""
374*7c568831SAndroid Build Coastguard Workerexpect="""1 (test) [None] 0 0
375*7c568831SAndroid Build Coastguard Worker1 (a) [None] 0 1
376*7c568831SAndroid Build Coastguard Worker3 (#text) [aaa] 0 2
377*7c568831SAndroid Build Coastguard Worker15 (a) [None] 0 1
378*7c568831SAndroid Build Coastguard Worker1 (b) [None] 1 1
379*7c568831SAndroid Build Coastguard Worker15 (test) [None] 0 0
380*7c568831SAndroid Build Coastguard Worker"""
381*7c568831SAndroid Build Coastguard Workerres = tst_reader(doc)
382*7c568831SAndroid Build Coastguard Workerif res != expect:
383*7c568831SAndroid Build Coastguard Worker    print("test12 failed")
384*7c568831SAndroid Build Coastguard Worker    print(res)
385*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
386*7c568831SAndroid Build Coastguard Worker
387*7c568831SAndroid Build Coastguard Workerdoc="""<test><p></p></test>"""
388*7c568831SAndroid Build Coastguard Workerexpect="""1 (test) [None] 0 0
389*7c568831SAndroid Build Coastguard Worker1 (p) [None] 0 1
390*7c568831SAndroid Build Coastguard Worker15 (p) [None] 0 1
391*7c568831SAndroid Build Coastguard Worker15 (test) [None] 0 0
392*7c568831SAndroid Build Coastguard Worker"""
393*7c568831SAndroid Build Coastguard Workerres = tst_reader(doc)
394*7c568831SAndroid Build Coastguard Workerif res != expect:
395*7c568831SAndroid Build Coastguard Worker    print("test13 failed")
396*7c568831SAndroid Build Coastguard Worker    print(res)
397*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
398*7c568831SAndroid Build Coastguard Worker
399*7c568831SAndroid Build Coastguard Workerdoc="""<p></p>"""
400*7c568831SAndroid Build Coastguard Workerexpect="""1 (p) [None] 0 0
401*7c568831SAndroid Build Coastguard Worker15 (p) [None] 0 0
402*7c568831SAndroid Build Coastguard Worker"""
403*7c568831SAndroid Build Coastguard Workerres = tst_reader(doc)
404*7c568831SAndroid Build Coastguard Workerif res != expect:
405*7c568831SAndroid Build Coastguard Worker    print("test14 failed")
406*7c568831SAndroid Build Coastguard Worker    print(res)
407*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
408*7c568831SAndroid Build Coastguard Worker
409*7c568831SAndroid Build Coastguard Worker#
410*7c568831SAndroid Build Coastguard Worker# test from bug #108801
411*7c568831SAndroid Build Coastguard Worker#
412*7c568831SAndroid Build Coastguard Workerdoc="""<?xml version="1.0" standalone="no"?>
413*7c568831SAndroid Build Coastguard Worker<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
414*7c568831SAndroid Build Coastguard Worker                  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
415*7c568831SAndroid Build Coastguard Worker]>
416*7c568831SAndroid Build Coastguard Worker
417*7c568831SAndroid Build Coastguard Worker<article>
418*7c568831SAndroid Build Coastguard Workerxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
419*7c568831SAndroid Build Coastguard Worker</article>
420*7c568831SAndroid Build Coastguard Worker"""
421*7c568831SAndroid Build Coastguard Workerexpect="""10 (article) [None] 0 0
422*7c568831SAndroid Build Coastguard Worker1 (article) [None] 0 0
423*7c568831SAndroid Build Coastguard Worker3 (#text) [
424*7c568831SAndroid Build Coastguard Workerxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
425*7c568831SAndroid Build Coastguard Worker] 0 1
426*7c568831SAndroid Build Coastguard Worker15 (article) [None] 0 0
427*7c568831SAndroid Build Coastguard Worker"""
428*7c568831SAndroid Build Coastguard Workerres = tst_reader(doc)
429*7c568831SAndroid Build Coastguard Workerif res != expect:
430*7c568831SAndroid Build Coastguard Worker    print("test15 failed")
431*7c568831SAndroid Build Coastguard Worker    print(res)
432*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
433*7c568831SAndroid Build Coastguard Worker
434*7c568831SAndroid Build Coastguard Worker#
435*7c568831SAndroid Build Coastguard Worker# cleanup for memory allocation counting
436*7c568831SAndroid Build Coastguard Worker#
437*7c568831SAndroid Build Coastguard Workerdel f
438*7c568831SAndroid Build Coastguard Workerdel input
439*7c568831SAndroid Build Coastguard Workerdel reader
440*7c568831SAndroid Build Coastguard Worker
441*7c568831SAndroid Build Coastguard Worker# Memory debug specific
442*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser()
443*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0:
444*7c568831SAndroid Build Coastguard Worker    print("OK")
445*7c568831SAndroid Build Coastguard Workerelse:
446*7c568831SAndroid Build Coastguard Worker    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
447