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