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><s6</bar6> 70*7c568831SAndroid Build Coastguard Worker <bar7>chars7</bar7> 71*7c568831SAndroid Build Coastguard Worker <bar8>&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><s6</bar6> 96*7c568831SAndroid Build Coastguard Worker <bar7>chars7</bar7> 97*7c568831SAndroid Build Coastguard Worker <bar8>&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