File tree Expand file tree Collapse file tree 1 file changed +24
-0
lines changed
Expand file tree Collapse file tree 1 file changed +24
-0
lines changed 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