Skip to content

Commit 6d3c424

Browse files
committed
Add more tests
Based on ideas by @picnixz
1 parent 30598a9 commit 6d3c424

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

Lib/test/test_pyexpat.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,14 +779,39 @@ class ParentParserLifetimeTest(unittest.TestCase):
779779
See https://github.com/python/cpython/issues/139400.
780780
"""
781781

782-
def test_parent_parser_outlives_its_subparsers(self):
782+
def test_parent_parser_outlives_its_subparsers__single(self):
783783
parser = expat.ParserCreate()
784784
subparser = parser.ExternalEntityParserCreate(None)
785785

786786
# Now try to cause garbage collection of the parent parser
787787
# while it's still being referenced by a related subparser
788788
del parser
789789

790+
def test_parent_parser_outlives_its_subparsers__multiple(self):
791+
parser = expat.ParserCreate()
792+
subparser_one = parser.ExternalEntityParserCreate(None)
793+
subparser_two = parser.ExternalEntityParserCreate(None)
794+
795+
# Now try to cause garbage collection of the parent parser
796+
# while it's still being referenced by a related subparser
797+
del parser
798+
799+
def test_parent_parser_outlives_its_subparsers__chain(self):
800+
parser = expat.ParserCreate()
801+
subparser = parser.ExternalEntityParserCreate(None)
802+
subsubparser = subparser.ExternalEntityParserCreate(None)
803+
804+
# Now try to cause garbage collection of the parent parsers
805+
# while they are still being referenced by a related subparser
806+
del parser
807+
del subparser
808+
809+
def test_cycle(self):
810+
parser = expat.ParserCreate()
811+
subparser = parser.ExternalEntityParserCreate(None)
812+
parser.StartElementHandler = lambda _1, _2: subparser
813+
parser.Parse('<doc/>', True)
814+
790815

791816
class ReparseDeferralTest(unittest.TestCase):
792817
def test_getter_setter_round_trip(self):

0 commit comments

Comments
 (0)