[3.14] gh-144629: Add test for the PyFunction_GetAnnotations() function (GH-144630) (#144670)

gh-144629: Add test for the PyFunction_GetAnnotations() function (GH-144630)
(cherry picked from commit cc81707e40)

Co-authored-by: Nybblista <170842536+nybblista@users.noreply.github.com>
This commit is contained in:
Miss Islington (bot) 2026-02-10 16:05:25 +01:00 committed by GitHub
parent 616e611844
commit befa954efe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 26 additions and 1 deletions

View file

@ -307,10 +307,27 @@ def function_without_closure(): ...
_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()

View 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},
};