xref: /aosp_15_r20/external/libxml2/python/tests/indexes.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*7c568831SAndroid Build Coastguard Worker# -*- coding: ISO-8859-1 -*-
3*7c568831SAndroid Build Coastguard Workerimport sys
4*7c568831SAndroid Build Coastguard Workerimport setup_test
5*7c568831SAndroid Build Coastguard Workerimport libxml2
6*7c568831SAndroid Build Coastguard Worker
7*7c568831SAndroid Build Coastguard Worker# Memory debug specific
8*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1)
9*7c568831SAndroid Build Coastguard Worker
10*7c568831SAndroid Build Coastguard Workerctxt = None
11*7c568831SAndroid Build Coastguard Worker
12*7c568831SAndroid Build Coastguard Workerclass callback:
13*7c568831SAndroid Build Coastguard Worker    def __init__(self, startd, starte, ende, delta, endd):
14*7c568831SAndroid Build Coastguard Worker        self.startd = startd
15*7c568831SAndroid Build Coastguard Worker        self.starte = starte
16*7c568831SAndroid Build Coastguard Worker        self.ende = ende
17*7c568831SAndroid Build Coastguard Worker        self.endd = endd
18*7c568831SAndroid Build Coastguard Worker        self.delta = delta
19*7c568831SAndroid Build Coastguard Worker        self.count = 0
20*7c568831SAndroid Build Coastguard Worker
21*7c568831SAndroid Build Coastguard Worker    def startDocument(self):
22*7c568831SAndroid Build Coastguard Worker        global ctxt
23*7c568831SAndroid Build Coastguard Worker        if ctxt.byteConsumed() != self.startd:
24*7c568831SAndroid Build Coastguard Worker            print("document start at wrong index: %d expecting %d\n" % (
25*7c568831SAndroid Build Coastguard Worker                  ctxt.byteConsumed(), self.startd))
26*7c568831SAndroid Build Coastguard Worker            sys.exit(1)
27*7c568831SAndroid Build Coastguard Worker
28*7c568831SAndroid Build Coastguard Worker    def endDocument(self):
29*7c568831SAndroid Build Coastguard Worker        global ctxt
30*7c568831SAndroid Build Coastguard Worker        expect = self.ende + self.delta * (self.count - 1) + self.endd
31*7c568831SAndroid Build Coastguard Worker        if ctxt.byteConsumed() != expect:
32*7c568831SAndroid Build Coastguard Worker            print("document end at wrong index: %d expecting %d\n" % (
33*7c568831SAndroid Build Coastguard Worker                  ctxt.byteConsumed(), expect))
34*7c568831SAndroid Build Coastguard Worker            sys.exit(1)
35*7c568831SAndroid Build Coastguard Worker
36*7c568831SAndroid Build Coastguard Worker    def startElement(self, tag, attrs):
37*7c568831SAndroid Build Coastguard Worker        global ctxt
38*7c568831SAndroid Build Coastguard Worker        if tag == "bar1":
39*7c568831SAndroid Build Coastguard Worker            expect = self.starte + self.delta * self.count
40*7c568831SAndroid Build Coastguard Worker            if ctxt.byteConsumed() != expect:
41*7c568831SAndroid Build Coastguard Worker                print("element start at wrong index: %d expecting %d\n" % (
42*7c568831SAndroid Build Coastguard Worker                   ctxt.byteConsumed(), expect))
43*7c568831SAndroid Build Coastguard Worker                sys.exit(1)
44*7c568831SAndroid Build Coastguard Worker
45*7c568831SAndroid Build Coastguard Worker
46*7c568831SAndroid Build Coastguard Worker    def endElement(self, tag):
47*7c568831SAndroid Build Coastguard Worker        global ctxt
48*7c568831SAndroid Build Coastguard Worker        if tag == "bar1":
49*7c568831SAndroid Build Coastguard Worker            expect = self.ende + self.delta * self.count
50*7c568831SAndroid Build Coastguard Worker            if ctxt.byteConsumed() != expect:
51*7c568831SAndroid Build Coastguard Worker                print("element end at wrong index: %d expecting %d\n" % (
52*7c568831SAndroid Build Coastguard Worker                      ctxt.byteConsumed(), expect))
53*7c568831SAndroid Build Coastguard Worker                sys.exit(1)
54*7c568831SAndroid Build Coastguard Worker            self.count = self.count + 1
55*7c568831SAndroid Build Coastguard Worker
56*7c568831SAndroid Build Coastguard Worker    def characters(self, data):
57*7c568831SAndroid Build Coastguard Worker        pass
58*7c568831SAndroid Build Coastguard Worker
59*7c568831SAndroid Build Coastguard Worker#
60*7c568831SAndroid Build Coastguard Worker# First run a pure UTF-8 test
61*7c568831SAndroid Build Coastguard Worker#
62*7c568831SAndroid Build Coastguard Workerhandler = callback(0, 13, 27, 198, 183)
63*7c568831SAndroid Build Coastguard Workerctxt = libxml2.createPushParser(handler, "<foo>\n", 6, "test.xml")
64*7c568831SAndroid Build Coastguard Workerchunk = """  <bar1>chars1</bar1>
65*7c568831SAndroid Build Coastguard Worker  <bar2>chars2</bar2>
66*7c568831SAndroid Build Coastguard Worker  <bar3>chars3</bar3>
67*7c568831SAndroid Build Coastguard Worker  <bar4>chars4</bar4>
68*7c568831SAndroid Build Coastguard Worker  <bar5>chars5</bar5>
69*7c568831SAndroid Build Coastguard Worker  <bar6>&lt;s6</bar6>
70*7c568831SAndroid Build Coastguard Worker  <bar7>chars7</bar7>
71*7c568831SAndroid Build Coastguard Worker  <bar8>&#38;8</bar8>
72*7c568831SAndroid Build Coastguard Worker  <bar9>chars9</bar9>
73*7c568831SAndroid Build Coastguard Worker"""
74*7c568831SAndroid Build Coastguard Workeri = 0
75*7c568831SAndroid Build Coastguard Workerwhile i < 10000:
76*7c568831SAndroid Build Coastguard Worker    ctxt.parseChunk(chunk, len(chunk), 0)
77*7c568831SAndroid Build Coastguard Worker    i = i + 1
78*7c568831SAndroid Build Coastguard Workerchunk = "</foo>"
79*7c568831SAndroid Build Coastguard Workerctxt.parseChunk(chunk, len(chunk), 1)
80*7c568831SAndroid Build Coastguard Workerctxt=None
81*7c568831SAndroid Build Coastguard Worker
82*7c568831SAndroid Build Coastguard Worker#
83*7c568831SAndroid Build Coastguard Worker# Then run a test relying on ISO-Latin-1
84*7c568831SAndroid Build Coastguard Worker#
85*7c568831SAndroid Build Coastguard Workerhandler = callback(43, 57, 71, 198, 183)
86*7c568831SAndroid Build Coastguard Workerchunk="""<?xml version="1.0" encoding="ISO-8859-1"?>
87*7c568831SAndroid Build Coastguard Worker<foo>
88*7c568831SAndroid Build Coastguard Worker"""
89*7c568831SAndroid Build Coastguard Workerctxt = libxml2.createPushParser(handler, chunk, len(chunk), "test.xml")
90*7c568831SAndroid Build Coastguard Workerchunk = """  <bar1>chars1</bar1>
91*7c568831SAndroid Build Coastguard Worker  <bar2>chars2</bar2>
92*7c568831SAndroid Build Coastguard Worker  <bar3>chars3</bar3>
93*7c568831SAndroid Build Coastguard Worker  <bar4>ch�rs4</bar4>
94*7c568831SAndroid Build Coastguard Worker  <bar5>chars5</bar5>
95*7c568831SAndroid Build Coastguard Worker  <bar6>&lt;s6</bar6>
96*7c568831SAndroid Build Coastguard Worker  <bar7>chars7</bar7>
97*7c568831SAndroid Build Coastguard Worker  <bar8>&#38;8</bar8>
98*7c568831SAndroid Build Coastguard Worker  <bar9>tr�s 9</bar9>
99*7c568831SAndroid Build Coastguard Worker"""
100*7c568831SAndroid Build Coastguard Workeri = 0
101*7c568831SAndroid Build Coastguard Workerwhile i < 10000:
102*7c568831SAndroid Build Coastguard Worker    ctxt.parseChunk(chunk, len(chunk), 0)
103*7c568831SAndroid Build Coastguard Worker    i = i + 1
104*7c568831SAndroid Build Coastguard Workerchunk = "</foo>"
105*7c568831SAndroid Build Coastguard Workerctxt.parseChunk(chunk, len(chunk), 1)
106*7c568831SAndroid Build Coastguard Workerctxt=None
107*7c568831SAndroid Build Coastguard Worker
108*7c568831SAndroid Build Coastguard Worker# Memory debug specific
109*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser()
110*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0:
111*7c568831SAndroid Build Coastguard Worker    print("OK")
112*7c568831SAndroid Build Coastguard Workerelse:
113*7c568831SAndroid Build Coastguard Worker    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
114