1198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#!/usr/bin/python -u
2198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#
3198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard# this tests the entities substitutions with the XmlTextReader interface
4198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#
5198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardimport sys
6198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardimport libxml2
7198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
8198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard# Memory debug specific
9198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardlibxml2.debugMemory(1)
10198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
11198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardresult = ""
12198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillarddef processNode(reader):
13198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    global result
14198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
15198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    result = result + "%d %d %s %d\n" % (reader.Depth(), reader.NodeType(),
16198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard			   reader.Name(), reader.IsEmptyElement())
17198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
18198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#
19198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard# Parse a document testing the readerForxxx API
20198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#
21198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillarddocstr="""<foo>
22198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard<label>some text</label>
23198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard<item>100</item>
24198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard</foo>"""
25198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardexpect="""0 1 foo 0
26198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 14 #text 0
27198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 1 label 0
28198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard2 3 #text 0
29198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 15 label 0
30198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 14 #text 0
31198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 1 item 0
32198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard2 3 #text 0
33198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 15 item 0
34198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 14 #text 0
35198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard0 15 foo 0
36198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard"""
37198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardresult = ""
38198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
39198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardreader = libxml2.readerForDoc(docstr, "test1", None, 0)
40198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardret = reader.Read()
41198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardwhile ret == 1:
42198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    processNode(reader)
43198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    ret = reader.Read()
44198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
45198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardif ret != 0:
462cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("Error parsing the document test1")
47198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    sys.exit(1)
48198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
49198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardif result != expect:
502cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("Unexpected result for test1")
512cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print(result)
52198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    sys.exit(1)
53198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
54198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#
55198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard# Reuse the reader for another document testing the ReaderNewxxx API
56198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#
57198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillarddocstr="""<foo>
58198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard<label>some text</label>
59198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard<item>1000</item>
60198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard</foo>"""
61198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardexpect="""0 1 foo 0
62198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 14 #text 0
63198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 1 label 0
64198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard2 3 #text 0
65198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 15 label 0
66198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 14 #text 0
67198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 1 item 0
68198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard2 3 #text 0
69198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 15 item 0
70198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard1 14 #text 0
71198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard0 15 foo 0
72198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard"""
73198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardresult = ""
74198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
75198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardreader.NewDoc(docstr, "test2", None, 0)
76198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardret = reader.Read()
77198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardwhile ret == 1:
78198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    processNode(reader)
79198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    ret = reader.Read()
80198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
81198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardif ret != 0:
822cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("Error parsing the document test2")
83198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    sys.exit(1)
84198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
85198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardif result != expect:
862cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("Unexpected result for test2")
872cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print(result)
88198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    sys.exit(1)
89198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
90198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#
91198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard# cleanup
92198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard#
93198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillarddel reader
94198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard
95198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard# Memory debug specific
96198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardlibxml2.cleanupParser()
97198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardif libxml2.debugMemory(1) == 0:
982cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("OK")
99198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillardelse:
1002cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
101198c1bfc1cd2cc031410e4be4e5faebed45c557cDaniel Veillard    libxml2.dumpMemory()
102