summaryrefslogtreecommitdiff
path: root/Lib/test
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_capi.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index e4d20355d4..e6516b33ae 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -579,6 +579,37 @@ class CAPITest(unittest.TestCase):
self.assertEqual(ref(), inst)
self.assertEqual(inst.weakreflist, ref)
+ def test_heaptype_with_managed_weakref(self):
+ inst = _testcapi.HeapCTypeWithManagedWeakref()
+ ref = weakref.ref(inst)
+ self.assertEqual(ref(), inst)
+
+ def test_sublclassing_managed_weakref(self):
+
+ class C(_testcapi.HeapCTypeWithManagedWeakref):
+ pass
+
+ inst = C()
+ ref = weakref.ref(inst)
+ self.assertEqual(ref(), inst)
+
+ def test_sublclassing_managed_both(self):
+
+ class C1(_testcapi.HeapCTypeWithManagedWeakref, _testcapi.HeapCTypeWithManagedDict):
+ pass
+
+ class C2(_testcapi.HeapCTypeWithManagedDict, _testcapi.HeapCTypeWithManagedWeakref):
+ pass
+
+ for cls in (C1, C2):
+ inst = cls()
+ ref = weakref.ref(inst)
+ self.assertEqual(ref(), inst)
+ inst.spam = inst
+ del inst
+ ref = weakref.ref(cls())
+ self.assertIs(ref(), None)
+
def test_heaptype_with_buffer(self):
inst = _testcapi.HeapCTypeWithBuffer()
b = bytes(inst)