File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1212import sys
1313import unicodedata
1414import unittest
15+ import weakref
1516from test .support import (
17+ gc_collect ,
1618 open_urlresource ,
1719 requires_resource ,
1820 script_helper ,
@@ -1338,6 +1340,28 @@ def run_grapheme_break_tests(self, testdata):
13381340 self .assertEqual ([x .start for x in result ], breaks [i :- 1 ], comment )
13391341 self .assertEqual ([x .end for x in result ], breaks [i + 1 :], comment )
13401342
1343+ def test_reference_loops (self ):
1344+ # Test that reference loops involving GraphemeBreakIterator or
1345+ # Segment can be broken by the garbage collector.
1346+ class S (str ):
1347+ pass
1348+
1349+ s = S ('abc' )
1350+ s .ref = unicodedata .iter_graphemes (s )
1351+ wr = weakref .ref (s )
1352+ del s
1353+ self .assertIsNotNone (wr ())
1354+ gc_collect ()
1355+ self .assertIsNone (wr ())
1356+
1357+ s = S ('abc' )
1358+ s .ref = next (unicodedata .iter_graphemes (s ))
1359+ wr = weakref .ref (s )
1360+ del s
1361+ self .assertIsNotNone (wr ())
1362+ gc_collect ()
1363+ self .assertIsNone (wr ())
1364+
13411365
13421366if __name__ == "__main__" :
13431367 unittest .main ()
You can’t perform that action at this time.
0 commit comments