1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-21 14:53:44 +03:00
Files
libxml2/python/tests/unicode.py
2025-04-13 13:50:19 +02:00

62 lines
1.6 KiB
Python
Executable File

from io import BytesIO, StringIO
import libxml2
import sys
from xml.sax.handler import ContentHandler
from xml.sax.xmlreader import InputSource
import xml.sax
# Test data: an XML file with a 100,000 Unicode smileys, which expand
# into 400,000 bytes after UTF-8 encoding.
SMILEY = '\U0001f600'
TEXT = 100_000 * SMILEY
XML_STRING = '<?xml version="1.0" encoding="UTF-8" ?>\n<root>' + TEXT + '</root>'
XML_BYTES = XML_STRING.encode('utf-8')
def RunTest(test_name, source):
expected = TEXT
received = ''
class TestHandler(ContentHandler):
def characters(self, content):
nonlocal received
received += content
reader = xml.sax.make_parser(['drv_libxml2'])
reader.setContentHandler(TestHandler())
reader.parse(source)
if expected != received:
print(test_name, 'failed!')
print('Expected length:', len(expected))
print('Received length:', len(received))
print('Expected text: (prefix only)', expected[:100])
print('Received text: (prefix only)', received[:100])
sys.exit(1)
def TestBytesInput():
source = InputSource()
source.setByteStream(BytesIO(XML_BYTES))
RunTest('TestBytesInput', source)
def TestStringInput():
source = InputSource()
source.setCharacterStream(StringIO(XML_STRING))
RunTest('TestStringInput', source)
# Memory debug specific
libxml2.debugMemory(1)
TestBytesInput()
TestStringInput()
# Memory debug specific
libxml2.cleanupParser()
if libxml2.debugMemory(1) == 0:
print("OK")
else:
print("Memory leak %d bytes" % (libxml2.debugMemory(1)))