Skip to content

Commit

Permalink
sax: Extend xml.sax.expatreader.ExpatParser.flush test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
hartwork committed Feb 24, 2024
1 parent dbbd98c commit 3b6ea39
Showing 1 changed file with 34 additions and 8 deletions.
42 changes: 34 additions & 8 deletions Lib/test/test_sax.py
Original file line number Diff line number Diff line change
Expand Up @@ -1215,23 +1215,49 @@ def test_expat_incremental_reset(self):

self.assertEqual(result.getvalue(), start + b"<doc>text</doc>")

def test_expat_incremental_reparse_deferral(self):
def test_flush_reparse_deferral_enabled(self):
if pyexpat.version_info < (2, 6, 0):
return

result = BytesIO()
xmlgen = XMLGenerator(result)
parser = create_parser()
parser.setContentHandler(xmlgen)

# This artificial chunking triggers reparse deferral with Expat >=2.6.0
parser.feed("<doc ")
parser.feed(">")
for chunk in ("<doc", ">"):
parser.feed(chunk)

self.assertEqual(result.getvalue(), start) # i.e. no elements started
self.assertTrue(parser._parser.GetReparseDeferralEnabled())

parser.flush()

self.assertTrue(parser._parser.GetReparseDeferralEnabled())
self.assertEqual(result.getvalue(), start + b"<doc>")

parser.feed("</doc>")
parser.close()

self.assertEqual(result.getvalue(), start + b"<doc></doc>")

def test_flush_reparse_deferral_disabled(self):
result = BytesIO()
xmlgen = XMLGenerator(result)
parser = create_parser()
parser.setContentHandler(xmlgen)

for chunk in ("<doc", ">"):
parser.feed(chunk)

if pyexpat.version_info >= (2, 6, 0):
self.assertEqual(result.getvalue(), start)
else:
self.assertEqual(result.getvalue(), start + b"<doc>")
parser._parser.SetReparseDeferralEnabled(False)

self.assertEqual(result.getvalue(), start) # i.e. no elements started
self.assertFalse(parser._parser.GetReparseDeferralEnabled())

parser.flush() # no-op for Expat <2.6.0
parser.flush()

self.assertFalse(parser._parser.GetReparseDeferralEnabled())
self.assertEqual(result.getvalue(), start + b"<doc>")

parser.feed("</doc>")
Expand Down

0 comments on commit 3b6ea39

Please sign in to comment.