| | from io import BytesIO, StringIO |
| | import libxml2 |
| | import sys |
| | from xml.sax.handler import ContentHandler |
| | from xml.sax.xmlreader import InputSource |
| | import xml.sax |
| |
|
| |
|
| | |
| | |
| | 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) |
| |
|
| |
|
| | |
| | libxml2.debugMemory(1) |
| |
|
| | TestBytesInput() |
| | TestStringInput() |
| |
|
| | |
| | libxml2.cleanupParser() |
| | if libxml2.debugMemory(1) == 0: |
| | print("OK") |
| | else: |
| | print("Memory leak %d bytes" % (libxml2.debugMemory(1))) |
| |
|