mirror of
https://gitlab.gnome.org/GNOME/libxml2
synced 2025-03-28 21:33:13 +00:00

As per https://peps.python.org/pep-0394/, the python binary can be one of the following options: - Python 2 - Python 3 - Not exist All of the scripts in libxml2 use 'python', which may not exist. As Python 2 reached EOL on the 1st January 2020, it's safe to move the scripts to use python3 explicitly.
114 lines
2.9 KiB
Python
Executable File
114 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
# -*- coding: ISO-8859-1 -*-
|
||
import sys
|
||
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<63>rs4</bar4>
|
||
<bar5>chars5</bar5>
|
||
<bar6><s6</bar6>
|
||
<bar7>chars7</bar7>
|
||
<bar8>&8</bar8>
|
||
<bar9>tr<74>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)))
|
||
libxml2.dumpMemory()
|