1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*7c568831SAndroid Build Coastguard Worker# 3*7c568831SAndroid Build Coastguard Worker# this tests the entities substitutions with the XmlTextReader interface 4*7c568831SAndroid Build Coastguard Worker# 5*7c568831SAndroid Build Coastguard Workerimport sys 6*7c568831SAndroid Build Coastguard Workerimport setup_test 7*7c568831SAndroid Build Coastguard Workerimport libxml2 8*7c568831SAndroid Build Coastguard Worker 9*7c568831SAndroid Build Coastguard Worker# Memory debug specific 10*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1) 11*7c568831SAndroid Build Coastguard Worker 12*7c568831SAndroid Build Coastguard Workerresult = "" 13*7c568831SAndroid Build Coastguard Workerdef processNode(reader): 14*7c568831SAndroid Build Coastguard Worker global result 15*7c568831SAndroid Build Coastguard Worker 16*7c568831SAndroid Build Coastguard Worker result = result + "%d %d %s %d\n" % (reader.Depth(), reader.NodeType(), 17*7c568831SAndroid Build Coastguard Worker reader.Name(), reader.IsEmptyElement()) 18*7c568831SAndroid Build Coastguard Worker 19*7c568831SAndroid Build Coastguard Worker# 20*7c568831SAndroid Build Coastguard Worker# Parse a document testing the readerForxxx API 21*7c568831SAndroid Build Coastguard Worker# 22*7c568831SAndroid Build Coastguard Workerdocstr="""<foo> 23*7c568831SAndroid Build Coastguard Worker<label>some text</label> 24*7c568831SAndroid Build Coastguard Worker<item>100</item> 25*7c568831SAndroid Build Coastguard Worker</foo>""" 26*7c568831SAndroid Build Coastguard Workerexpect="""0 1 foo 0 27*7c568831SAndroid Build Coastguard Worker1 14 #text 0 28*7c568831SAndroid Build Coastguard Worker1 1 label 0 29*7c568831SAndroid Build Coastguard Worker2 3 #text 0 30*7c568831SAndroid Build Coastguard Worker1 15 label 0 31*7c568831SAndroid Build Coastguard Worker1 14 #text 0 32*7c568831SAndroid Build Coastguard Worker1 1 item 0 33*7c568831SAndroid Build Coastguard Worker2 3 #text 0 34*7c568831SAndroid Build Coastguard Worker1 15 item 0 35*7c568831SAndroid Build Coastguard Worker1 14 #text 0 36*7c568831SAndroid Build Coastguard Worker0 15 foo 0 37*7c568831SAndroid Build Coastguard Worker""" 38*7c568831SAndroid Build Coastguard Workerresult = "" 39*7c568831SAndroid Build Coastguard Worker 40*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(docstr) 41*7c568831SAndroid Build Coastguard Workerreader = doc.readerWalker(); 42*7c568831SAndroid Build Coastguard Workerret = reader.Read() 43*7c568831SAndroid Build Coastguard Workerwhile ret == 1: 44*7c568831SAndroid Build Coastguard Worker processNode(reader) 45*7c568831SAndroid Build Coastguard Worker ret = reader.Read() 46*7c568831SAndroid Build Coastguard Worker 47*7c568831SAndroid Build Coastguard Workerif ret != 0: 48*7c568831SAndroid Build Coastguard Worker print("Error parsing the document test1") 49*7c568831SAndroid Build Coastguard Worker sys.exit(1) 50*7c568831SAndroid Build Coastguard Worker 51*7c568831SAndroid Build Coastguard Workerif result != expect: 52*7c568831SAndroid Build Coastguard Worker print("Unexpected result for test1") 53*7c568831SAndroid Build Coastguard Worker print(result) 54*7c568831SAndroid Build Coastguard Worker sys.exit(1) 55*7c568831SAndroid Build Coastguard Worker 56*7c568831SAndroid Build Coastguard Workerdoc.freeDoc() 57*7c568831SAndroid Build Coastguard Worker 58*7c568831SAndroid Build Coastguard Worker# 59*7c568831SAndroid Build Coastguard Worker# Reuse the reader for another document testing the ReaderNewWalker API 60*7c568831SAndroid Build Coastguard Worker# 61*7c568831SAndroid Build Coastguard Workerdocstr="""<foo> 62*7c568831SAndroid Build Coastguard Worker<label>some text</label> 63*7c568831SAndroid Build Coastguard Worker<item>1000</item> 64*7c568831SAndroid Build Coastguard Worker</foo>""" 65*7c568831SAndroid Build Coastguard Workerexpect="""0 1 foo 0 66*7c568831SAndroid Build Coastguard Worker1 14 #text 0 67*7c568831SAndroid Build Coastguard Worker1 1 label 0 68*7c568831SAndroid Build Coastguard Worker2 3 #text 0 69*7c568831SAndroid Build Coastguard Worker1 15 label 0 70*7c568831SAndroid Build Coastguard Worker1 14 #text 0 71*7c568831SAndroid Build Coastguard Worker1 1 item 0 72*7c568831SAndroid Build Coastguard Worker2 3 #text 0 73*7c568831SAndroid Build Coastguard Worker1 15 item 0 74*7c568831SAndroid Build Coastguard Worker1 14 #text 0 75*7c568831SAndroid Build Coastguard Worker0 15 foo 0 76*7c568831SAndroid Build Coastguard Worker""" 77*7c568831SAndroid Build Coastguard Workerresult = "" 78*7c568831SAndroid Build Coastguard Worker 79*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(docstr) 80*7c568831SAndroid Build Coastguard Workerreader.NewWalker(doc) 81*7c568831SAndroid Build Coastguard Worker 82*7c568831SAndroid Build Coastguard Workerret = reader.Read() 83*7c568831SAndroid Build Coastguard Workerwhile ret == 1: 84*7c568831SAndroid Build Coastguard Worker processNode(reader) 85*7c568831SAndroid Build Coastguard Worker ret = reader.Read() 86*7c568831SAndroid Build Coastguard Worker 87*7c568831SAndroid Build Coastguard Workerif ret != 0: 88*7c568831SAndroid Build Coastguard Worker print("Error parsing the document test2") 89*7c568831SAndroid Build Coastguard Worker sys.exit(1) 90*7c568831SAndroid Build Coastguard Worker 91*7c568831SAndroid Build Coastguard Workerif result != expect: 92*7c568831SAndroid Build Coastguard Worker print("Unexpected result for test2") 93*7c568831SAndroid Build Coastguard Worker print(result) 94*7c568831SAndroid Build Coastguard Worker sys.exit(1) 95*7c568831SAndroid Build Coastguard Worker 96*7c568831SAndroid Build Coastguard Workerdoc.freeDoc() 97*7c568831SAndroid Build Coastguard Worker 98*7c568831SAndroid Build Coastguard Worker# 99*7c568831SAndroid Build Coastguard Worker# Reuse the reader for another document testing the ReaderNewxxx API 100*7c568831SAndroid Build Coastguard Worker# 101*7c568831SAndroid Build Coastguard Workerdocstr="""<foo> 102*7c568831SAndroid Build Coastguard Worker<label>some text</label> 103*7c568831SAndroid Build Coastguard Worker<item>1000</item> 104*7c568831SAndroid Build Coastguard Worker</foo>""" 105*7c568831SAndroid Build Coastguard Workerexpect="""0 1 foo 0 106*7c568831SAndroid Build Coastguard Worker1 14 #text 0 107*7c568831SAndroid Build Coastguard Worker1 1 label 0 108*7c568831SAndroid Build Coastguard Worker2 3 #text 0 109*7c568831SAndroid Build Coastguard Worker1 15 label 0 110*7c568831SAndroid Build Coastguard Worker1 14 #text 0 111*7c568831SAndroid Build Coastguard Worker1 1 item 0 112*7c568831SAndroid Build Coastguard Worker2 3 #text 0 113*7c568831SAndroid Build Coastguard Worker1 15 item 0 114*7c568831SAndroid Build Coastguard Worker1 14 #text 0 115*7c568831SAndroid Build Coastguard Worker0 15 foo 0 116*7c568831SAndroid Build Coastguard Worker""" 117*7c568831SAndroid Build Coastguard Workerresult = "" 118*7c568831SAndroid Build Coastguard Worker 119*7c568831SAndroid Build Coastguard Workerreader.NewDoc(docstr, "test3", None, 0) 120*7c568831SAndroid Build Coastguard Workerret = reader.Read() 121*7c568831SAndroid Build Coastguard Workerwhile ret == 1: 122*7c568831SAndroid Build Coastguard Worker processNode(reader) 123*7c568831SAndroid Build Coastguard Worker ret = reader.Read() 124*7c568831SAndroid Build Coastguard Worker 125*7c568831SAndroid Build Coastguard Workerif ret != 0: 126*7c568831SAndroid Build Coastguard Worker print("Error parsing the document test3") 127*7c568831SAndroid Build Coastguard Worker sys.exit(1) 128*7c568831SAndroid Build Coastguard Worker 129*7c568831SAndroid Build Coastguard Workerif result != expect: 130*7c568831SAndroid Build Coastguard Worker print("Unexpected result for test3") 131*7c568831SAndroid Build Coastguard Worker print(result) 132*7c568831SAndroid Build Coastguard Worker sys.exit(1) 133*7c568831SAndroid Build Coastguard Worker 134*7c568831SAndroid Build Coastguard Worker# 135*7c568831SAndroid Build Coastguard Worker# cleanup 136*7c568831SAndroid Build Coastguard Worker# 137*7c568831SAndroid Build Coastguard Workerdel reader 138*7c568831SAndroid Build Coastguard Worker 139*7c568831SAndroid Build Coastguard Worker# Memory debug specific 140*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser() 141*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0: 142*7c568831SAndroid Build Coastguard Worker print("OK") 143*7c568831SAndroid Build Coastguard Workerelse: 144*7c568831SAndroid Build Coastguard Worker print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 145