]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-144629: Add test for the PyFunction_GetAnnotations() function (#144630)
authorNybblista <170842536+nybblista@users.noreply.github.com>
Tue, 10 Feb 2026 14:38:24 +0000 (17:38 +0300)
committerGitHub <noreply@github.com>
Tue, 10 Feb 2026 14:38:24 +0000 (14:38 +0000)
Lib/test/test_capi/test_function.py
Modules/_testcapi/function.c

index 9dca377e28ba42f7d669e45b924c73fb7e9d268e..c1a278e5d4da9160bdb901af7d8b9fdded7d6ed9 100644 (file)
@@ -307,10 +307,27 @@ class FunctionTest(unittest.TestCase):
             _testcapi.function_get_closure(function_without_closure), (1, 2))
         self.assertEqual(function_without_closure.__closure__, (1, 2))
 
+    def test_function_get_annotations(self):
+        # Test PyFunction_GetAnnotations()
+        def normal():
+            pass
+
+        def annofn(arg: int) -> str:
+            return f'arg = {arg}'
+
+        annotations = _testcapi.function_get_annotations(normal)
+        self.assertIsNone(annotations)
+
+        annotations = _testcapi.function_get_annotations(annofn)
+        self.assertIsInstance(annotations, dict)
+        self.assertEqual(annotations, annofn.__annotations__)
+
+        with self.assertRaises(SystemError):
+            _testcapi.function_get_annotations(None)
+
     # TODO: test PyFunction_New()
     # TODO: test PyFunction_NewWithQualName()
     # TODO: test PyFunction_SetVectorcall()
-    # TODO: test PyFunction_GetAnnotations()
     # TODO: test PyFunction_SetAnnotations()
     # TODO: test PyClassMethod_New()
     # TODO: test PyStaticMethod_New()
index ec1ba508df2ce917362d8e56bf13644c59fd7d53..40767adbd3f14a73824579a4565ddffc709a5d49 100644 (file)
@@ -123,6 +123,13 @@ function_set_closure(PyObject *self, PyObject *args)
 }
 
 
+static PyObject *
+function_get_annotations(PyObject *self, PyObject *func)
+{
+    return Py_XNewRef(PyFunction_GetAnnotations(func));
+}
+
+
 static PyMethodDef test_methods[] = {
     {"function_get_code", function_get_code, METH_O, NULL},
     {"function_get_globals", function_get_globals, METH_O, NULL},
@@ -133,6 +140,7 @@ static PyMethodDef test_methods[] = {
     {"function_set_kw_defaults", function_set_kw_defaults, METH_VARARGS, NULL},
     {"function_get_closure", function_get_closure, METH_O, NULL},
     {"function_set_closure", function_set_closure, METH_VARARGS, NULL},
+    {"function_get_annotations", function_get_annotations, METH_O, NULL},
     {NULL},
 };