| #!/usr/bin/env python3 | |
| # -*- coding: ISO-8859-1 -*- | |
| import sys | |
| import setup_test | |
| import libxml2 | |
| # Memory debug specific | |
| libxml2.debugMemory(1) | |
| ctxt = None | |
| class callback: | |
| def __init__(self, startd, starte, ende, delta, endd): | |
| self.startd = startd | |
| self.starte = starte | |
| self.ende = ende | |
| self.endd = endd | |
| self.delta = delta | |
| self.count = 0 | |
| def startDocument(self): | |
| global ctxt | |
| if ctxt.byteConsumed() != self.startd: | |
| print("document start at wrong index: %d expecting %d\n" % ( | |
| ctxt.byteConsumed(), self.startd)) | |
| sys.exit(1) | |
| def endDocument(self): | |
| global ctxt | |
| expect = self.ende + self.delta * (self.count - 1) + self.endd | |
| if ctxt.byteConsumed() != expect: | |
| print("document end at wrong index: %d expecting %d\n" % ( | |
| ctxt.byteConsumed(), expect)) | |
| sys.exit(1) | |
| def startElement(self, tag, attrs): | |
| global ctxt | |
| if tag == "bar1": | |
| expect = self.starte + self.delta * self.count | |
| if ctxt.byteConsumed() != expect: | |
| print("element start at wrong index: %d expecting %d\n" % ( | |
| ctxt.byteConsumed(), expect)) | |
| sys.exit(1) | |
| def endElement(self, tag): | |
| global ctxt | |
| if tag == "bar1": | |
| expect = self.ende + self.delta * self.count | |
| if ctxt.byteConsumed() != expect: | |
| print("element end at wrong index: %d expecting %d\n" % ( | |
| ctxt.byteConsumed(), expect)) | |
| sys.exit(1) | |
| self.count = self.count + 1 | |
| def characters(self, data): | |
| pass | |
| # | |
| # First run a pure UTF-8 test | |
| # | |
| handler = callback(0, 13, 27, 198, 183) | |
| ctxt = libxml2.createPushParser(handler, "<foo>\n", 6, "test.xml") | |
| chunk = """ <bar1>chars1</bar1> | |
| <bar2>chars2</bar2> | |
| <bar3>chars3</bar3> | |
| <bar4>chars4</bar4> | |
| <bar5>chars5</bar5> | |
| <bar6><s6</bar6> | |
| <bar7>chars7</bar7> | |
| <bar8>&8</bar8> | |
| <bar9>chars9</bar9> | |
| """ | |
| i = 0 | |
| while i < 10000: | |
| ctxt.parseChunk(chunk, len(chunk), 0) | |
| i = i + 1 | |
| chunk = "</foo>" | |
| ctxt.parseChunk(chunk, len(chunk), 1) | |
| ctxt=None | |
| # | |
| # Then run a test relying on ISO-Latin-1 | |
| # | |
| handler = callback(43, 57, 71, 198, 183) | |
| chunk="""<?xml version="1.0" encoding="ISO-8859-1"?> | |
| <foo> | |
| """ | |
| ctxt = libxml2.createPushParser(handler, chunk, len(chunk), "test.xml") | |
| chunk = """ <bar1>chars1</bar1> | |
| <bar2>chars2</bar2> | |
| <bar3>chars3</bar3> | |
| <bar4>chàrs4</bar4> | |
| <bar5>chars5</bar5> | |
| <bar6><s6</bar6> | |
| <bar7>chars7</bar7> | |
| <bar8>&8</bar8> | |
| <bar9>très 9</bar9> | |
| """ | |
| i = 0 | |
| while i < 10000: | |
| ctxt.parseChunk(chunk, len(chunk), 0) | |
| i = i + 1 | |
| chunk = "</foo>" | |
| ctxt.parseChunk(chunk, len(chunk), 1) | |
| ctxt=None | |
| # Memory debug specific | |
| libxml2.cleanupParser() | |
| if libxml2.debugMemory(1) == 0: | |
| print("OK") | |
| else: | |
| print("Memory leak %d bytes" % (libxml2.debugMemory(1))) |