1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*7c568831SAndroid Build Coastguard Worker# 3*7c568831SAndroid Build Coastguard Worker# this tests the Expand() API of the xmlTextReader interface 4*7c568831SAndroid Build Coastguard Worker# this extract the Dragon bibliography entries from the XML specification 5*7c568831SAndroid Build Coastguard Worker# 6*7c568831SAndroid Build Coastguard Workerimport setup_test 7*7c568831SAndroid Build Coastguard Workerimport libxml2 8*7c568831SAndroid Build Coastguard Workerimport os 9*7c568831SAndroid Build Coastguard Workerimport sys 10*7c568831SAndroid Build Coastguard Worker 11*7c568831SAndroid Build Coastguard Worker# Memory debug specific 12*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1) 13*7c568831SAndroid Build Coastguard Worker 14*7c568831SAndroid Build Coastguard Workerexpect="""<bibl id="Aho" key="Aho/Ullman">Aho, Alfred V., 15*7c568831SAndroid Build Coastguard WorkerRavi Sethi, and Jeffrey D. Ullman. 16*7c568831SAndroid Build Coastguard Worker<emph>Compilers: Principles, Techniques, and Tools</emph>. 17*7c568831SAndroid Build Coastguard WorkerReading: Addison-Wesley, 1986, rpt. corr. 1988.</bibl>""" 18*7c568831SAndroid Build Coastguard Worker 19*7c568831SAndroid Build Coastguard Workerbasedir = os.path.dirname(os.path.realpath(__file__)) 20*7c568831SAndroid Build Coastguard Workerf = open(os.path.join(basedir, '../../test/valid/REC-xml-19980210.xml'), 'rb') 21*7c568831SAndroid Build Coastguard Workerinput = libxml2.inputBuffer(f) 22*7c568831SAndroid Build Coastguard Workerreader = input.newTextReader("REC") 23*7c568831SAndroid Build Coastguard Workerres="" 24*7c568831SAndroid Build Coastguard Workerwhile reader.Read() > 0: 25*7c568831SAndroid Build Coastguard Worker while reader.Name() == 'bibl': 26*7c568831SAndroid Build Coastguard Worker node = reader.Expand() # expand the subtree 27*7c568831SAndroid Build Coastguard Worker if node.xpathEval("@id = 'Aho'"): # use XPath on it 28*7c568831SAndroid Build Coastguard Worker res = res + node.serialize() 29*7c568831SAndroid Build Coastguard Worker if reader.Next() != 1: # skip the subtree 30*7c568831SAndroid Build Coastguard Worker break; 31*7c568831SAndroid Build Coastguard Worker 32*7c568831SAndroid Build Coastguard Workerif res != expect: 33*7c568831SAndroid Build Coastguard Worker print("Error: didn't get the expected output") 34*7c568831SAndroid Build Coastguard Worker print("got '%s'" % (res)) 35*7c568831SAndroid Build Coastguard Worker print("expected '%s'" % (expect)) 36*7c568831SAndroid Build Coastguard Worker 37*7c568831SAndroid Build Coastguard Worker 38*7c568831SAndroid Build Coastguard Worker# 39*7c568831SAndroid Build Coastguard Worker# cleanup 40*7c568831SAndroid Build Coastguard Worker# 41*7c568831SAndroid Build Coastguard Workerdel input 42*7c568831SAndroid Build Coastguard Workerdel reader 43*7c568831SAndroid Build Coastguard Worker 44*7c568831SAndroid Build Coastguard Worker# Memory debug specific 45*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser() 46*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0: 47*7c568831SAndroid Build Coastguard Worker print("OK") 48*7c568831SAndroid Build Coastguard Workerelse: 49*7c568831SAndroid Build Coastguard Worker print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 50