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 Workerreader = libxml2.readerForDoc(docstr, "test1", None, 0) 41*7c568831SAndroid Build Coastguard Workerret = reader.Read() 42*7c568831SAndroid Build Coastguard Workerwhile ret == 1: 43*7c568831SAndroid Build Coastguard Worker processNode(reader) 44*7c568831SAndroid Build Coastguard Worker ret = reader.Read() 45*7c568831SAndroid Build Coastguard Worker 46*7c568831SAndroid Build Coastguard Workerif ret != 0: 47*7c568831SAndroid Build Coastguard Worker print("Error parsing the document test1") 48*7c568831SAndroid Build Coastguard Worker sys.exit(1) 49*7c568831SAndroid Build Coastguard Worker 50*7c568831SAndroid Build Coastguard Workerif result != expect: 51*7c568831SAndroid Build Coastguard Worker print("Unexpected result for test1") 52*7c568831SAndroid Build Coastguard Worker print(result) 53*7c568831SAndroid Build Coastguard Worker sys.exit(1) 54*7c568831SAndroid Build Coastguard Worker 55*7c568831SAndroid Build Coastguard Worker# 56*7c568831SAndroid Build Coastguard Worker# Reuse the reader for another document testing the ReaderNewxxx API 57*7c568831SAndroid Build Coastguard Worker# 58*7c568831SAndroid Build Coastguard Workerdocstr="""<foo> 59*7c568831SAndroid Build Coastguard Worker<label>some text</label> 60*7c568831SAndroid Build Coastguard Worker<item>1000</item> 61*7c568831SAndroid Build Coastguard Worker</foo>""" 62*7c568831SAndroid Build Coastguard Workerexpect="""0 1 foo 0 63*7c568831SAndroid Build Coastguard Worker1 14 #text 0 64*7c568831SAndroid Build Coastguard Worker1 1 label 0 65*7c568831SAndroid Build Coastguard Worker2 3 #text 0 66*7c568831SAndroid Build Coastguard Worker1 15 label 0 67*7c568831SAndroid Build Coastguard Worker1 14 #text 0 68*7c568831SAndroid Build Coastguard Worker1 1 item 0 69*7c568831SAndroid Build Coastguard Worker2 3 #text 0 70*7c568831SAndroid Build Coastguard Worker1 15 item 0 71*7c568831SAndroid Build Coastguard Worker1 14 #text 0 72*7c568831SAndroid Build Coastguard Worker0 15 foo 0 73*7c568831SAndroid Build Coastguard Worker""" 74*7c568831SAndroid Build Coastguard Workerresult = "" 75*7c568831SAndroid Build Coastguard Worker 76*7c568831SAndroid Build Coastguard Workerreader.NewDoc(docstr, "test2", None, 0) 77*7c568831SAndroid Build Coastguard Workerret = reader.Read() 78*7c568831SAndroid Build Coastguard Workerwhile ret == 1: 79*7c568831SAndroid Build Coastguard Worker processNode(reader) 80*7c568831SAndroid Build Coastguard Worker ret = reader.Read() 81*7c568831SAndroid Build Coastguard Worker 82*7c568831SAndroid Build Coastguard Workerif ret != 0: 83*7c568831SAndroid Build Coastguard Worker print("Error parsing the document test2") 84*7c568831SAndroid Build Coastguard Worker sys.exit(1) 85*7c568831SAndroid Build Coastguard Worker 86*7c568831SAndroid Build Coastguard Workerif result != expect: 87*7c568831SAndroid Build Coastguard Worker print("Unexpected result for test2") 88*7c568831SAndroid Build Coastguard Worker print(result) 89*7c568831SAndroid Build Coastguard Worker sys.exit(1) 90*7c568831SAndroid Build Coastguard Worker 91*7c568831SAndroid Build Coastguard Worker# 92*7c568831SAndroid Build Coastguard Worker# cleanup 93*7c568831SAndroid Build Coastguard Worker# 94*7c568831SAndroid Build Coastguard Workerdel reader 95*7c568831SAndroid Build Coastguard Worker 96*7c568831SAndroid Build Coastguard Worker# Memory debug specific 97*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser() 98*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0: 99*7c568831SAndroid Build Coastguard Worker print("OK") 100*7c568831SAndroid Build Coastguard Workerelse: 101*7c568831SAndroid Build Coastguard Worker print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 102