Skip to content

Commit a91ed6b

Browse files
committed
Make test test_cycle waterproof
1 parent a669454 commit a91ed6b

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

Lib/test/test_pyexpat.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import abc
55
import functools
6+
import gc
67
import os
78
import re
89
import sys
@@ -809,8 +810,18 @@ def test_parent_parser_outlives_its_subparsers__chain(self):
809810
def test_cycle(self):
810811
parser = expat.ParserCreate()
811812
subparser = parser.ExternalEntityParserCreate(None)
812-
parser.StartElementHandler = lambda _1, _2: subparser
813-
parser.Parse('<doc/>', True)
813+
814+
# Hack a cycle onto it; note that parsing now would not work.
815+
parser.CharacterDataHandler = subparser
816+
817+
# Self-test that the cycle is real
818+
self.assertIn(parser, gc.get_referents(subparser))
819+
self.assertIn(subparser, gc.get_referents(parser))
820+
821+
# Now try to cause garbage collection of the parent parsers
822+
# while they are still being referenced by a related subparser.
823+
del parser
824+
del subparser
814825

815826

816827
class ReparseDeferralTest(unittest.TestCase):

0 commit comments

Comments
 (0)