diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 142ce2c..a8d5c2d 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -14,6 +14,8 @@ import locale import operator import os import pickle +import pyexpat +import subprocess import sys import textwrap import types @@ -96,6 +98,11 @@ ENTITY_XML = """\ &entity; """ +macro_to_find = 'XML_SetReparseDeferralEnabled' +header_file = '/usr/include/expat.h' +result = subprocess.run(['grep', '-q', macro_to_find, header_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) +fails_with_expat = (unittest.expectedFailure if result.returncode == 0 else lambda test: test) + EXTERNAL_ENTITY_XML = """\ @@ -1410,27 +1417,38 @@ class XMLPullParserTest(unittest.TestCase): with self.assertRaises(StopIteration): next(it) - def test_simple_xml_with_ns(self): + def test_simple_xml(self, chunk_size=None): parser = ET.XMLPullParser() self.assert_event_tags(parser, []) - self._feed(parser, "\n") - self.assert_event_tags(parser, []) - self._feed(parser, "\n") + self._feed(parser, "\n", chunk_size) self.assert_event_tags(parser, []) - self._feed(parser, "text\n text\n") - self.assert_event_tags(parser, [('end', '{namespace}element')]) - self._feed(parser, "texttail\n") - self._feed(parser, "\n") + self._feed(parser, ">\n", chunk_size) + self.assert_event_tags(parser, [('end', 'element')]) + self._feed(parser, "texttail\n", chunk_size) + self._feed(parser, "\n", chunk_size) self.assert_event_tags(parser, [ - ('end', '{namespace}element'), - ('end', '{namespace}empty-element'), + ('end', 'element'), + ('end', 'empty-element'), ]) - self._feed(parser, "\n") - self.assert_event_tags(parser, [('end', '{namespace}root')]) + self._feed(parser, "\n", chunk_size) + self.assert_event_tags(parser, [('end', 'root')]) self.assertIsNone(parser.close()) + @fails_with_expat + def test_simple_xml_chunk_1(self): + self.test_simple_xml(chunk_size=1) + + @fails_with_expat + def test_simple_xml_chunk_5(self): + self.test_simple_xml(chunk_size=5) + + def test_simple_xml_chunk_22(self): + self.test_simple_xml(chunk_size=22) + def test_ns_events(self): parser = ET.XMLPullParser(events=('start-ns', 'end-ns')) self._feed(parser, "\n")