https://github.com/python/cpython/commit/6f4d64b048133c60d40705fb5ef776f78c7dd710
commit: 6f4d64b048133c60d40705fb5ef776f78c7dd710
branch: main
author: sobolevn <[email protected]>
committer: zware <[email protected]>
date: 2024-09-29T20:47:45-05:00
summary:
gh-124722: Fix leak in `test_detach_materialized_dict_no_memory` (GH-124769)
files:
M Lib/test/test_class.py
diff --git a/Lib/test/test_class.py b/Lib/test/test_class.py
index d2b6a23cc3c10d..b88c4d16ba4ef4 100644
--- a/Lib/test/test_class.py
+++ b/Lib/test/test_class.py
@@ -1,7 +1,7 @@
"Test the functionality of Python classes implementing operators."
import unittest
-import test.support
+from test.support import cpython_only, import_helper, script_helper
testmeths = [
@@ -933,20 +933,36 @@ class C:
C.a = X()
C.a = X()
+ @cpython_only
def test_detach_materialized_dict_no_memory(self):
- import _testcapi
- class A:
- def __init__(self):
- self.a = 1
- self.b = 2
- a = A()
- d = a.__dict__
- with test.support.catch_unraisable_exception() as ex:
- _testcapi.set_nomemory(0, 1)
- del a
- self.assertEqual(ex.unraisable.exc_type, MemoryError)
- with self.assertRaises(KeyError):
- d["a"]
+ # Skip test if _testcapi is not available:
+ import_helper.import_module('_testcapi')
+
+ code = """if 1:
+ import test.support
+ import _testcapi
+
+ class A:
+ def __init__(self):
+ self.a = 1
+ self.b = 2
+ a = A()
+ d = a.__dict__
+ with test.support.catch_unraisable_exception() as ex:
+ _testcapi.set_nomemory(0, 1)
+ del a
+ assert ex.unraisable.exc_type is MemoryError
+ try:
+ d["a"]
+ except KeyError:
+ pass
+ else:
+ assert False, "KeyError not raised"
+ """
+ rc, out, err = script_helper.assert_python_ok("-c", code)
+ self.assertEqual(rc, 0)
+ self.assertFalse(out, msg=out.decode('utf-8'))
+ self.assertFalse(err, msg=err.decode('utf-8'))
if __name__ == '__main__':
unittest.main()
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]