blob: 6c3776231b088a76e80375a16c5a4ac24b9434ce [file] [log] [blame]
Daniel Veillard0eb38c72002-12-14 23:00:35 +00001#!/usr/bin/python -u
Daniel Veillarda9a1b102004-02-17 13:24:01 +00002# -*- coding: ISO-8859-1 -*-
Daniel Veillarde18fc182002-12-28 22:56:33 +00003#
4# this tests the basic APIs of the XmlTextReader interface
5#
Daniel Veillard0eb38c72002-12-14 23:00:35 +00006import libxml2
7import StringIO
8import sys
9
10# Memory debug specific
11libxml2.debugMemory(1)
12
13f = StringIO.StringIO("""<a><b b1="b1"/><c>content of c</c></a>""")
14input = libxml2.inputBuffer(f)
Daniel Veillard4258b9c2002-12-20 10:29:40 +000015reader = input.newTextReader("test1")
Daniel Veillardaba976d2002-12-28 21:14:18 +000016ret = reader.Read()
Daniel Veillard0eb38c72002-12-14 23:00:35 +000017if ret != 1:
Daniel Veillard067bae52003-01-05 01:27:54 +000018 print "test1: Error reading to first element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000019 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000020if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
21 reader.NodeType() != 1 or reader.HasAttributes() != 0:
Daniel Veillard067bae52003-01-05 01:27:54 +000022 print "test1: Error reading the first element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000023 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000024ret = reader.Read()
Daniel Veillard0eb38c72002-12-14 23:00:35 +000025if ret != 1:
Daniel Veillard067bae52003-01-05 01:27:54 +000026 print "test1: Error reading to second element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000027 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000028if reader.Name() != "b" or reader.IsEmptyElement() != 1 or \
29 reader.NodeType() != 1 or reader.HasAttributes() != 1:
Daniel Veillard067bae52003-01-05 01:27:54 +000030 print "test1: Error reading the second element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000031 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000032ret = reader.Read()
Daniel Veillard0eb38c72002-12-14 23:00:35 +000033if ret != 1:
Daniel Veillard067bae52003-01-05 01:27:54 +000034 print "test1: Error reading to third element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000035 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000036if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
37 reader.NodeType() != 1 or reader.HasAttributes() != 0:
Daniel Veillard067bae52003-01-05 01:27:54 +000038 print "test1: Error reading the third element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000039 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000040ret = reader.Read()
Daniel Veillard0eb38c72002-12-14 23:00:35 +000041if ret != 1:
Daniel Veillard067bae52003-01-05 01:27:54 +000042 print "test1: Error reading to text node"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000043 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000044if reader.Name() != "#text" or reader.IsEmptyElement() != 0 or \
45 reader.NodeType() != 3 or reader.HasAttributes() != 0 or \
46 reader.Value() != "content of c":
Daniel Veillard067bae52003-01-05 01:27:54 +000047 print "test1: Error reading the text node"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000048 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000049ret = reader.Read()
Daniel Veillard0eb38c72002-12-14 23:00:35 +000050if ret != 1:
Daniel Veillard067bae52003-01-05 01:27:54 +000051 print "test1: Error reading to end of third element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000052 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000053if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
54 reader.NodeType() != 15 or reader.HasAttributes() != 0:
Daniel Veillard067bae52003-01-05 01:27:54 +000055 print "test1: Error reading the end of third element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000056 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000057ret = reader.Read()
Daniel Veillard0eb38c72002-12-14 23:00:35 +000058if ret != 1:
Daniel Veillard067bae52003-01-05 01:27:54 +000059 print "test1: Error reading to end of first element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000060 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000061if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
62 reader.NodeType() != 15 or reader.HasAttributes() != 0:
Daniel Veillard067bae52003-01-05 01:27:54 +000063 print "test1: Error reading the end of first element"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000064 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000065ret = reader.Read()
Daniel Veillard0eb38c72002-12-14 23:00:35 +000066if ret != 0:
Daniel Veillard067bae52003-01-05 01:27:54 +000067 print "test1: Error reading to end of document"
Daniel Veillard0eb38c72002-12-14 23:00:35 +000068 sys.exit(1)
69
70#
71# example from the XmlTextReader docs
72#
73f = StringIO.StringIO("""<test xmlns:dt="urn:datatypes" dt:type="int"/>""")
74input = libxml2.inputBuffer(f)
Daniel Veillard4258b9c2002-12-20 10:29:40 +000075reader = input.newTextReader("test2")
Daniel Veillard0eb38c72002-12-14 23:00:35 +000076
Daniel Veillardaba976d2002-12-28 21:14:18 +000077ret = reader.Read()
Daniel Veillard0eb38c72002-12-14 23:00:35 +000078if ret != 1:
79 print "Error reading test element"
80 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +000081if reader.GetAttributeNo(0) != "urn:datatypes" or \
82 reader.GetAttributeNo(1) != "int" or \
83 reader.GetAttributeNs("type", "urn:datatypes") != "int" or \
84 reader.GetAttribute("dt:type") != "int":
Daniel Veillard0eb38c72002-12-14 23:00:35 +000085 print "error reading test attributes"
86 sys.exit(1)
87
Daniel Veillardda46d2d2002-12-15 23:36:49 +000088#
89# example from the XmlTextReader docs
90#
91f = StringIO.StringIO("""<root xmlns:a="urn:456">
92<item>
93<ref href="a:b"/>
94</item>
95</root>""")
96input = libxml2.inputBuffer(f)
Daniel Veillard4258b9c2002-12-20 10:29:40 +000097reader = input.newTextReader("test3")
Daniel Veillardda46d2d2002-12-15 23:36:49 +000098
Daniel Veillardaba976d2002-12-28 21:14:18 +000099ret = reader.Read()
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000100while ret == 1:
Daniel Veillardaba976d2002-12-28 21:14:18 +0000101 if reader.Name() == "ref":
102 if reader.LookupNamespace("a") != "urn:456":
Daniel Veillard09b792b2004-02-23 10:53:52 +0000103 print "error resolving namespace prefix"
104 sys.exit(1)
105 break
Daniel Veillardaba976d2002-12-28 21:14:18 +0000106 ret = reader.Read()
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000107if ret != 1:
108 print "Error finding the ref element"
109 sys.exit(1)
110
111#
112# Home made example for the various attribute access functions
113#
114f = StringIO.StringIO("""<testattr xmlns="urn:1" xmlns:a="urn:2" b="b" a:b="a:b"/>""")
115input = libxml2.inputBuffer(f)
Daniel Veillard4258b9c2002-12-20 10:29:40 +0000116reader = input.newTextReader("test4")
Daniel Veillardaba976d2002-12-28 21:14:18 +0000117ret = reader.Read()
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000118if ret != 1:
119 print "Error reading the testattr element"
120 sys.exit(1)
121#
122# Attribute exploration by index
123#
Daniel Veillardaba976d2002-12-28 21:14:18 +0000124if reader.MoveToAttributeNo(0) != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000125 print "Failed moveToAttribute(0)"
126 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000127if reader.Value() != "urn:1":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000128 print "Failed to read attribute(0)"
129 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000130if reader.Name() != "xmlns":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000131 print "Failed to read attribute(0) name"
132 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000133if reader.MoveToAttributeNo(1) != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000134 print "Failed moveToAttribute(1)"
135 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000136if reader.Value() != "urn:2":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000137 print "Failed to read attribute(1)"
138 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000139if reader.Name() != "xmlns:a":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000140 print "Failed to read attribute(1) name"
141 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000142if reader.MoveToAttributeNo(2) != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000143 print "Failed moveToAttribute(2)"
144 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000145if reader.Value() != "b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000146 print "Failed to read attribute(2)"
147 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000148if reader.Name() != "b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000149 print "Failed to read attribute(2) name"
150 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000151if reader.MoveToAttributeNo(3) != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000152 print "Failed moveToAttribute(3)"
153 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000154if reader.Value() != "a:b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000155 print "Failed to read attribute(3)"
156 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000157if reader.Name() != "a:b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000158 print "Failed to read attribute(3) name"
159 sys.exit(1)
160#
161# Attribute exploration by name
162#
Daniel Veillardaba976d2002-12-28 21:14:18 +0000163if reader.MoveToAttribute("xmlns") != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000164 print "Failed moveToAttribute('xmlns')"
165 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000166if reader.Value() != "urn:1":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000167 print "Failed to read attribute('xmlns')"
168 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000169if reader.MoveToAttribute("xmlns:a") != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000170 print "Failed moveToAttribute('xmlns')"
171 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000172if reader.Value() != "urn:2":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000173 print "Failed to read attribute('xmlns:a')"
174 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000175if reader.MoveToAttribute("b") != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000176 print "Failed moveToAttribute('b')"
177 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000178if reader.Value() != "b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000179 print "Failed to read attribute('b')"
180 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000181if reader.MoveToAttribute("a:b") != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000182 print "Failed moveToAttribute('a:b')"
183 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000184if reader.Value() != "a:b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000185 print "Failed to read attribute('a:b')"
186 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000187if reader.MoveToAttributeNs("b", "urn:2") != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000188 print "Failed moveToAttribute('b', 'urn:2')"
189 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000190if reader.Value() != "a:b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000191 print "Failed to read attribute('b', 'urn:2')"
192 sys.exit(1)
193#
194# Go back and read in sequence
195#
Daniel Veillardaba976d2002-12-28 21:14:18 +0000196if reader.MoveToElement() != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000197 print "Failed to move back to element"
198 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000199if reader.MoveToFirstAttribute() != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000200 print "Failed to move to first attribute"
201 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000202if reader.Value() != "urn:1":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000203 print "Failed to read attribute(0)"
204 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000205if reader.Name() != "xmlns":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000206 print "Failed to read attribute(0) name"
207 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000208if reader.MoveToNextAttribute() != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000209 print "Failed to move to next attribute"
210 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000211if reader.Value() != "urn:2":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000212 print "Failed to read attribute(1)"
213 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000214if reader.Name() != "xmlns:a":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000215 print "Failed to read attribute(1) name"
216 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000217if reader.MoveToNextAttribute() != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000218 print "Failed to move to next attribute"
219 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000220if reader.Value() != "b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000221 print "Failed to read attribute(2)"
222 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000223if reader.Name() != "b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000224 print "Failed to read attribute(2) name"
225 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000226if reader.MoveToNextAttribute() != 1:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000227 print "Failed to move to next attribute"
228 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000229if reader.Value() != "a:b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000230 print "Failed to read attribute(3)"
231 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000232if reader.Name() != "a:b":
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000233 print "Failed to read attribute(3) name"
234 sys.exit(1)
Daniel Veillardaba976d2002-12-28 21:14:18 +0000235if reader.MoveToNextAttribute() != 0:
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000236 print "Failed to detect last attribute"
237 sys.exit(1)
238
Daniel Veillard29b3e282002-12-29 11:14:41 +0000239
Daniel Veillardecaba492002-12-30 10:55:29 +0000240#
241# a couple of tests for namespace nodes
242#
Daniel Veillard067bae52003-01-05 01:27:54 +0000243f = StringIO.StringIO("""<a xmlns="http://example.com/foo"/>""")
Daniel Veillardecaba492002-12-30 10:55:29 +0000244input = libxml2.inputBuffer(f)
245reader = input.newTextReader("test6")
246ret = reader.Read()
247if ret != 1:
248 print "test6: failed to Read()"
249 sys.exit(1)
250ret = reader.MoveToFirstAttribute()
251if ret != 1:
252 print "test6: failed to MoveToFirstAttribute()"
253 sys.exit(1)
254if reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
255 reader.LocalName() != "xmlns" or reader.Name() != "xmlns" or \
256 reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
257 print "test6: failed to read the namespace node"
258 sys.exit(1)
259
Daniel Veillard067bae52003-01-05 01:27:54 +0000260f = StringIO.StringIO("""<a xmlns:prefix="http://example.com/foo"/>""")
Daniel Veillardecaba492002-12-30 10:55:29 +0000261input = libxml2.inputBuffer(f)
262reader = input.newTextReader("test7")
263ret = reader.Read()
264if ret != 1:
265 print "test7: failed to Read()"
266 sys.exit(1)
267ret = reader.MoveToFirstAttribute()
268if ret != 1:
269 print "test7: failed to MoveToFirstAttribute()"
270 sys.exit(1)
271if reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
272 reader.LocalName() != "prefix" or reader.Name() != "xmlns:prefix" or \
273 reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
274 print "test7: failed to read the namespace node"
275 sys.exit(1)
Daniel Veillard29b3e282002-12-29 11:14:41 +0000276
Daniel Veillardaaa105b2002-12-30 11:42:17 +0000277#
278# Test for a limit case:
279#
280f = StringIO.StringIO("""<a/>""")
281input = libxml2.inputBuffer(f)
282reader = input.newTextReader("test8")
283ret = reader.Read()
284if ret != 1:
285 print "test8: failed to read the node"
286 sys.exit(1)
287if reader.Name() != "a" or reader.IsEmptyElement() != 1:
288 print "test8: failed to analyze the node"
289 sys.exit(1)
290ret = reader.Read()
291if ret != 0:
292 print "test8: failed to detect the EOF"
293 sys.exit(1)
294
Daniel Veillard571b8892002-12-30 12:37:59 +0000295#
296# Another test provided by Stéphane Bidoul and checked with C#
297#
298def tst_reader(s):
299 f = StringIO.StringIO(s)
300 input = libxml2.inputBuffer(f)
301 reader = input.newTextReader("tst")
302 res = ""
303 while reader.Read():
Daniel Veillard09b792b2004-02-23 10:53:52 +0000304 res=res + "%s (%s) [%s] %d %d\n" % (reader.NodeType(),reader.Name(),
305 reader.Value(), reader.IsEmptyElement(),
306 reader.Depth())
307 if reader.NodeType() == 1: # Element
308 while reader.MoveToNextAttribute():
309 res = res + "-- %s (%s) [%s] %d %d\n" % (reader.NodeType(),
310 reader.Name(),reader.Value(),
311 reader.IsEmptyElement(), reader.Depth())
Daniel Veillard571b8892002-12-30 12:37:59 +0000312 return res
313
314doc="""<a><b b1="b1"/><c>content of c</c></a>"""
Daniel Veillard4d8db8a2002-12-30 18:40:42 +0000315expect="""1 (a) [None] 0 0
3161 (b) [None] 1 1
Daniel Veillarde3c036e2003-01-01 15:11:05 +0000317-- 2 (b1) [b1] 0 2
Daniel Veillard4d8db8a2002-12-30 18:40:42 +00003181 (c) [None] 0 1
3193 (#text) [content of c] 0 2
32015 (c) [None] 0 1
32115 (a) [None] 0 0
Daniel Veillard571b8892002-12-30 12:37:59 +0000322"""
323res = tst_reader(doc)
324if res != expect:
325 print "test5 failed"
326 print res
327 sys.exit(1)
328
329doc="""<test><b/><c/></test>"""
Daniel Veillard4d8db8a2002-12-30 18:40:42 +0000330expect="""1 (test) [None] 0 0
3311 (b) [None] 1 1
3321 (c) [None] 1 1
33315 (test) [None] 0 0
Daniel Veillard571b8892002-12-30 12:37:59 +0000334"""
335res = tst_reader(doc)
336if res != expect:
Daniel Veillard4d8db8a2002-12-30 18:40:42 +0000337 print "test9 failed"
338 print res
339 sys.exit(1)
340
341doc="""<a><b>bbb</b><c>ccc</c></a>"""
342expect="""1 (a) [None] 0 0
3431 (b) [None] 0 1
3443 (#text) [bbb] 0 2
34515 (b) [None] 0 1
3461 (c) [None] 0 1
3473 (#text) [ccc] 0 2
34815 (c) [None] 0 1
34915 (a) [None] 0 0
350"""
351res = tst_reader(doc)
352if res != expect:
353 print "test10 failed"
Daniel Veillard571b8892002-12-30 12:37:59 +0000354 print res
355 sys.exit(1)
Daniel Veillardaaa105b2002-12-30 11:42:17 +0000356
Daniel Veillarde3c036e2003-01-01 15:11:05 +0000357doc="""<test a="a"/>"""
358expect="""1 (test) [None] 1 0
359-- 2 (a) [a] 0 1
360"""
361res = tst_reader(doc)
362if res != expect:
363 print "test11 failed"
364 print res
365 sys.exit(1)
366
367doc="""<test><a>aaa</a><b/></test>"""
368expect="""1 (test) [None] 0 0
3691 (a) [None] 0 1
3703 (#text) [aaa] 0 2
37115 (a) [None] 0 1
3721 (b) [None] 1 1
37315 (test) [None] 0 0
374"""
375res = tst_reader(doc)
376if res != expect:
377 print "test12 failed"
378 print res
379 sys.exit(1)
380
Daniel Veillarddab8ea92003-01-02 14:16:45 +0000381doc="""<test><p></p></test>"""
382expect="""1 (test) [None] 0 0
3831 (p) [None] 0 1
38415 (p) [None] 0 1
38515 (test) [None] 0 0
386"""
387res = tst_reader(doc)
388if res != expect:
389 print "test13 failed"
390 print res
391 sys.exit(1)
392
393doc="""<p></p>"""
394expect="""1 (p) [None] 0 0
39515 (p) [None] 0 0
396"""
397res = tst_reader(doc)
398if res != expect:
399 print "test14 failed"
400 print res
401 sys.exit(1)
402
Daniel Veillardaaa105b2002-12-30 11:42:17 +0000403#
Daniel Veillard48ef4c92003-03-22 12:38:15 +0000404# test from bug #108801
405#
406doc="""<?xml version="1.0" standalone="no"?>
407<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
408 "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
409]>
410
411<article>
412xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
413</article>
414"""
415expect="""10 (article) [None] 0 0
4161 (article) [None] 0 0
4173 (#text) [
418xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
419] 0 1
42015 (article) [None] 0 0
421"""
422res = tst_reader(doc)
423if res != expect:
424 print "test15 failed"
425 print res
426 sys.exit(1)
427
428#
Daniel Veillardaaa105b2002-12-30 11:42:17 +0000429# cleanup for memory allocation counting
430#
Daniel Veillard0eb38c72002-12-14 23:00:35 +0000431del f
432del input
433del reader
434
435# Memory debug specific
436libxml2.cleanupParser()
437if libxml2.debugMemory(1) == 0:
438 print "OK"
439else:
440 print "Memory leak %d bytes" % (libxml2.debugMemory(1))
441 libxml2.dumpMemory()