diff options
author | Brandt Bucher <brandtbucher@gmail.com> | 2020-10-15 01:44:07 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-15 01:44:07 (GMT) |
commit | c13b847a6f913b72eeb71651ff626390b738d973 (patch) | |
tree | b5cc26798d51fd3a93fd8cea1c5177fba49ddd94 /Lib/test | |
parent | 302b6166fbb15c51f58b040c62e987d486742189 (diff) | |
download | cpython-c13b847a6f913b72eeb71651ff626390b738d973.zip cpython-c13b847a6f913b72eeb71651ff626390b738d973.tar.gz cpython-c13b847a6f913b72eeb71651ff626390b738d973.tar.bz2 |
bpo-41984: GC track all user classes (GH-22701)
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_finalization.py | 23 | ||||
-rw-r--r-- | Lib/test/test_gc.py | 6 |
2 files changed, 24 insertions, 5 deletions
diff --git a/Lib/test/test_finalization.py b/Lib/test/test_finalization.py index 35d7913..1d13443 100644 --- a/Lib/test/test_finalization.py +++ b/Lib/test/test_finalization.py @@ -16,6 +16,15 @@ except ImportError: raise TypeError('requires _testcapi.with_tp_del') return C +try: + from _testcapi import without_gc +except ImportError: + def without_gc(cls): + class C: + def __new__(cls, *args, **kwargs): + raise TypeError('requires _testcapi.without_gc') + return C + from test import support @@ -94,9 +103,11 @@ class SimpleBase(NonGCSimpleBase): assert self.id_ == id(self) +@without_gc class NonGC(NonGCSimpleBase): __slots__ = () +@without_gc class NonGCResurrector(NonGCSimpleBase): __slots__ = () @@ -109,8 +120,14 @@ class NonGCResurrector(NonGCSimpleBase): class Simple(SimpleBase): pass -class SimpleResurrector(NonGCResurrector, SimpleBase): - pass +# Can't inherit from NonGCResurrector, in case importing without_gc fails. +class SimpleResurrector(SimpleBase): + + def side_effect(self): + """ + Resurrect self by storing self in a class-wide list. + """ + self.survivors.append(self) class TestBase: @@ -178,6 +195,7 @@ class SimpleFinalizationTest(TestBase, unittest.TestCase): self.assert_survivors([]) self.assertIs(wr(), None) + @support.cpython_only def test_non_gc(self): with SimpleBase.test(): s = NonGC() @@ -191,6 +209,7 @@ class SimpleFinalizationTest(TestBase, unittest.TestCase): self.assert_del_calls(ids) self.assert_survivors([]) + @support.cpython_only def test_non_gc_resurrect(self): with SimpleBase.test(): s = NonGCResurrector() diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py index 1b096ef..ba66737 100644 --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -582,9 +582,9 @@ class GCTests(unittest.TestCase): self.assertTrue(gc.is_tracked(UserInt())) self.assertTrue(gc.is_tracked([])) self.assertTrue(gc.is_tracked(set())) - self.assertFalse(gc.is_tracked(UserClassSlots())) - self.assertFalse(gc.is_tracked(UserFloatSlots())) - self.assertFalse(gc.is_tracked(UserIntSlots())) + self.assertTrue(gc.is_tracked(UserClassSlots())) + self.assertTrue(gc.is_tracked(UserFloatSlots())) + self.assertTrue(gc.is_tracked(UserIntSlots())) def test_is_finalized(self): # Objects not tracked by the always gc return false |