xref: /aosp_15_r20/external/libxml2/python/tests/reader5.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
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