@@ -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
791816class ReparseDeferralTest (unittest .TestCase ):
792817 def test_getter_setter_round_trip (self ):
0 commit comments