summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2023-08-16 12:28:14 (GMT)
committerGitHub <noreply@github.com>2023-08-16 12:28:14 (GMT)
commit72534ca85c64d4d33a9cf30492e037be05140fd2 (patch)
tree307009a7a420c7f2acf1d814cb9851395defebd4 /Lib
parent9864f9a7c7046d6a0174c8142ddfbb5f07de5925 (diff)
downloadcpython-72534ca85c64d4d33a9cf30492e037be05140fd2.zip
cpython-72534ca85c64d4d33a9cf30492e037be05140fd2.tar.gz
cpython-72534ca85c64d4d33a9cf30492e037be05140fd2.tar.bz2
[3.12] gh-107735: Add C API tests for PySys_GetObject() and PySys_SetObject() (GH-107736) (#107740)
[3.12] gh-107735: Add C API tests for PySys_GetObject() and PySys_SetObject() (GH-107736). (cherry picked from commit bea5f93196d213d6fbf4ba8984caf4c3cd1da882)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_capi/test_misc.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py
index 3f2736d..3d49497 100644
--- a/Lib/test/test_capi/test_misc.py
+++ b/Lib/test/test_capi/test_misc.py
@@ -51,6 +51,8 @@ _testcapi = import_helper.import_module('_testcapi')
import _testinternalcapi
+NULL = None
+
def decode_stderr(err):
return err.decode('utf-8', 'replace').replace('\r', '')
@@ -1121,6 +1123,46 @@ class CAPITest(unittest.TestCase):
del d.extra
self.assertIsNone(d.extra)
+ def test_sys_getobject(self):
+ getobject = _testcapi.sys_getobject
+
+ self.assertIs(getobject(b'stdout'), sys.stdout)
+ with support.swap_attr(sys, '\U0001f40d', 42):
+ self.assertEqual(getobject('\U0001f40d'.encode()), 42)
+
+ self.assertIs(getobject(b'nonexisting'), AttributeError)
+ self.assertIs(getobject(b'\xff'), AttributeError)
+ # CRASHES getobject(NULL)
+
+ def test_sys_setobject(self):
+ setobject = _testcapi.sys_setobject
+
+ value = ['value']
+ value2 = ['value2']
+ try:
+ self.assertEqual(setobject(b'newattr', value), 0)
+ self.assertIs(sys.newattr, value)
+ self.assertEqual(setobject(b'newattr', value2), 0)
+ self.assertIs(sys.newattr, value2)
+ self.assertEqual(setobject(b'newattr', NULL), 0)
+ self.assertFalse(hasattr(sys, 'newattr'))
+ self.assertEqual(setobject(b'newattr', NULL), 0)
+ finally:
+ with contextlib.suppress(AttributeError):
+ del sys.newattr
+ try:
+ self.assertEqual(setobject('\U0001f40d'.encode(), value), 0)
+ self.assertIs(getattr(sys, '\U0001f40d'), value)
+ self.assertEqual(setobject('\U0001f40d'.encode(), NULL), 0)
+ self.assertFalse(hasattr(sys, '\U0001f40d'))
+ finally:
+ with contextlib.suppress(AttributeError):
+ delattr(sys, '\U0001f40d')
+
+ with self.assertRaises(UnicodeDecodeError):
+ setobject(b'\xff', value)
+ # CRASHES setobject(NULL, value)
+
@requires_limited_api
class TestHeapTypeRelative(unittest.TestCase):