VirtualBox

source: vbox/trunk/src/libs/libxml2-2.13.2/python/tests/reader.py@ 105420

Last change on this file since 105420 was 105420, checked in by vboxsync, 7 months ago

libxml2-2.12.6: Applied and adjusted our libxml2 changes to 2.12.6. bugref:10730

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

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette