1#!/usr/local/bin/python3.8 -u
2#
3# this tests the entities substitutions with the XmlTextReader interface
4#
5import sys
6import libxml2
7
8# Memory debug specific
9libxml2.debugMemory(1)
10
11result = ""
12def processNode(reader):
13    global result
14
15    result = result + "%d %d %s %d\n" % (reader.Depth(), reader.NodeType(),
16			   reader.Name(), reader.IsEmptyElement())
17
18#
19# Parse a document testing the readerForxxx API
20#
21docstr="""<foo>
22<label>some text</label>
23<item>100</item>
24</foo>"""
25expect="""0 1 foo 0
261 14 #text 0
271 1 label 0
282 3 #text 0
291 15 label 0
301 14 #text 0
311 1 item 0
322 3 #text 0
331 15 item 0
341 14 #text 0
350 15 foo 0
36"""
37result = ""
38
39reader = libxml2.readerForDoc(docstr, "test1", None, 0)
40ret = reader.Read()
41while ret == 1:
42    processNode(reader)
43    ret = reader.Read()
44
45if ret != 0:
46    print("Error parsing the document test1")
47    sys.exit(1)
48
49if result != expect:
50    print("Unexpected result for test1")
51    print(result)
52    sys.exit(1)
53
54#
55# Reuse the reader for another document testing the ReaderNewxxx API
56#
57docstr="""<foo>
58<label>some text</label>
59<item>1000</item>
60</foo>"""
61expect="""0 1 foo 0
621 14 #text 0
631 1 label 0
642 3 #text 0
651 15 label 0
661 14 #text 0
671 1 item 0
682 3 #text 0
691 15 item 0
701 14 #text 0
710 15 foo 0
72"""
73result = ""
74
75reader.NewDoc(docstr, "test2", None, 0)
76ret = reader.Read()
77while ret == 1:
78    processNode(reader)
79    ret = reader.Read()
80
81if ret != 0:
82    print("Error parsing the document test2")
83    sys.exit(1)
84
85if result != expect:
86    print("Unexpected result for test2")
87    print(result)
88    sys.exit(1)
89
90#
91# cleanup
92#
93del reader
94
95# Memory debug specific
96libxml2.cleanupParser()
97if libxml2.debugMemory(1) == 0:
98    print("OK")
99else:
100    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
101    libxml2.dumpMemory()
102