summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorBrandt Bucher <brandtbucher@gmail.com>2020-10-15 01:44:07 (GMT)
committerGitHub <noreply@github.com>2020-10-15 01:44:07 (GMT)
commitc13b847a6f913b72eeb71651ff626390b738d973 (patch)
treeb5cc26798d51fd3a93fd8cea1c5177fba49ddd94 /Lib
parent302b6166fbb15c51f58b040c62e987d486742189 (diff)
downloadcpython-c13b847a6f913b72eeb71651ff626390b738d973.zip
cpython-c13b847a6f913b72eeb71651ff626390b738d973.tar.gz
cpython-c13b847a6f913b72eeb71651ff626390b738d973.tar.bz2
bpo-41984: GC track all user classes (GH-22701)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_finalization.py23
-rw-r--r--Lib/test/test_gc.py6
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