| #include "parts.h" | |
| PyDoc_STRVAR(docstring_empty, | |
| "" | |
| ); | |
| PyDoc_STRVAR(docstring_no_signature, | |
| "This docstring has no signature." | |
| ); | |
| PyDoc_STRVAR(docstring_with_invalid_signature, | |
| "docstring_with_invalid_signature($module, /, boo)\n" | |
| "\n" | |
| "This docstring has an invalid signature." | |
| ); | |
| PyDoc_STRVAR(docstring_with_invalid_signature2, | |
| "docstring_with_invalid_signature2($module, /, boo)\n" | |
| "\n" | |
| "--\n" | |
| "\n" | |
| "This docstring also has an invalid signature." | |
| ); | |
| PyDoc_STRVAR(docstring_with_signature, | |
| "docstring_with_signature($module, /, sig)\n" | |
| "--\n" | |
| "\n" | |
| "This docstring has a valid signature." | |
| ); | |
| PyDoc_STRVAR(docstring_with_signature_but_no_doc, | |
| "docstring_with_signature_but_no_doc($module, /, sig)\n" | |
| "--\n" | |
| "\n" | |
| ); | |
| PyDoc_STRVAR(docstring_with_signature_and_extra_newlines, | |
| "docstring_with_signature_and_extra_newlines($module, /, parameter)\n" | |
| "--\n" | |
| "\n" | |
| "\n" | |
| "This docstring has a valid signature and some extra newlines." | |
| ); | |
| PyDoc_STRVAR(docstring_with_signature_with_defaults, | |
| "docstring_with_signature_with_defaults(module, s='avocado',\n" | |
| " b=b'bytes', d=3.14, i=35, n=None, t=True, f=False,\n" | |
| " local=the_number_three, sys=sys.maxsize,\n" | |
| " exp=sys.maxsize - 1)\n" | |
| "--\n" | |
| "\n" | |
| "\n" | |
| "\n" | |
| "This docstring has a valid signature with parameters,\n" | |
| "and the parameters take defaults of varying types." | |
| ); | |
| /* This is here to provide a docstring for test_descr. */ | |
| static PyObject * | |
| test_with_docstring(PyObject *self, PyObject *Py_UNUSED(ignored)) | |
| { | |
| Py_RETURN_NONE; | |
| } | |
| static PyMethodDef test_methods[] = { | |
| {"docstring_empty", | |
| test_with_docstring, METH_VARARGS, | |
| docstring_empty}, | |
| {"docstring_no_signature", | |
| test_with_docstring, METH_VARARGS, | |
| docstring_no_signature}, | |
| {"docstring_no_signature_noargs", | |
| test_with_docstring, METH_NOARGS, | |
| docstring_no_signature}, | |
| {"docstring_no_signature_o", | |
| test_with_docstring, METH_O, | |
| docstring_no_signature}, | |
| {"docstring_with_invalid_signature", | |
| test_with_docstring, METH_VARARGS, | |
| docstring_with_invalid_signature}, | |
| {"docstring_with_invalid_signature2", | |
| test_with_docstring, METH_VARARGS, | |
| docstring_with_invalid_signature2}, | |
| {"docstring_with_signature", | |
| test_with_docstring, METH_VARARGS, | |
| docstring_with_signature}, | |
| {"docstring_with_signature_and_extra_newlines", | |
| test_with_docstring, METH_VARARGS, | |
| docstring_with_signature_and_extra_newlines}, | |
| {"docstring_with_signature_but_no_doc", | |
| test_with_docstring, METH_VARARGS, | |
| docstring_with_signature_but_no_doc}, | |
| {"docstring_with_signature_with_defaults", | |
| test_with_docstring, METH_VARARGS, | |
| docstring_with_signature_with_defaults}, | |
| {"no_docstring", | |
| test_with_docstring, METH_VARARGS}, | |
| {"test_with_docstring", | |
| test_with_docstring, METH_VARARGS, | |
| PyDoc_STR("This is a pretty normal docstring.")}, | |
| {"func_with_unrepresentable_signature", | |
| test_with_docstring, METH_VARARGS, | |
| PyDoc_STR( | |
| "func_with_unrepresentable_signature($module, /, a, b=<x>)\n" | |
| "--\n\n" | |
| "This docstring has a signature with unrepresentable default." | |
| )}, | |
| {NULL}, | |
| }; | |
| static PyMethodDef DocStringNoSignatureTest_methods[] = { | |
| {"meth_noargs", | |
| test_with_docstring, METH_NOARGS, | |
| docstring_no_signature}, | |
| {"meth_o", | |
| test_with_docstring, METH_O, | |
| docstring_no_signature}, | |
| {"meth_noargs_class", | |
| test_with_docstring, METH_NOARGS|METH_CLASS, | |
| docstring_no_signature}, | |
| {"meth_o_class", | |
| test_with_docstring, METH_O|METH_CLASS, | |
| docstring_no_signature}, | |
| {"meth_noargs_static", | |
| test_with_docstring, METH_NOARGS|METH_STATIC, | |
| docstring_no_signature}, | |
| {"meth_o_static", | |
| test_with_docstring, METH_O|METH_STATIC, | |
| docstring_no_signature}, | |
| {"meth_noargs_coexist", | |
| test_with_docstring, METH_NOARGS|METH_COEXIST, | |
| docstring_no_signature}, | |
| {"meth_o_coexist", | |
| test_with_docstring, METH_O|METH_COEXIST, | |
| docstring_no_signature}, | |
| {NULL}, | |
| }; | |
| static PyTypeObject DocStringNoSignatureTest = { | |
| PyVarObject_HEAD_INIT(NULL, 0) | |
| .tp_name = "_testcapi.DocStringNoSignatureTest", | |
| .tp_basicsize = sizeof(PyObject), | |
| .tp_flags = Py_TPFLAGS_DEFAULT, | |
| .tp_methods = DocStringNoSignatureTest_methods, | |
| .tp_new = PyType_GenericNew, | |
| }; | |
| static PyMethodDef DocStringUnrepresentableSignatureTest_methods[] = { | |
| {"meth", | |
| test_with_docstring, METH_VARARGS, | |
| PyDoc_STR( | |
| "meth($self, /, a, b=<x>)\n" | |
| "--\n\n" | |
| "This docstring has a signature with unrepresentable default." | |
| )}, | |
| {"classmeth", | |
| test_with_docstring, METH_VARARGS|METH_CLASS, | |
| PyDoc_STR( | |
| "classmeth($type, /, a, b=<x>)\n" | |
| "--\n\n" | |
| "This docstring has a signature with unrepresentable default." | |
| )}, | |
| {"staticmeth", | |
| test_with_docstring, METH_VARARGS|METH_STATIC, | |
| PyDoc_STR( | |
| "staticmeth(a, b=<x>)\n" | |
| "--\n\n" | |
| "This docstring has a signature with unrepresentable default." | |
| )}, | |
| {"with_default", | |
| test_with_docstring, METH_VARARGS, | |
| PyDoc_STR( | |
| "with_default($self, /, x=ONE)\n" | |
| "--\n\n" | |
| "This instance method has a default parameter value from the module scope." | |
| )}, | |
| {NULL}, | |
| }; | |
| static PyTypeObject DocStringUnrepresentableSignatureTest = { | |
| PyVarObject_HEAD_INIT(NULL, 0) | |
| .tp_name = "_testcapi.DocStringUnrepresentableSignatureTest", | |
| .tp_basicsize = sizeof(PyObject), | |
| .tp_flags = Py_TPFLAGS_DEFAULT, | |
| .tp_methods = DocStringUnrepresentableSignatureTest_methods, | |
| .tp_new = PyType_GenericNew, | |
| }; | |
| int | |
| _PyTestCapi_Init_Docstring(PyObject *mod) | |
| { | |
| if (PyModule_AddFunctions(mod, test_methods) < 0) { | |
| return -1; | |
| } | |
| if (PyModule_AddType(mod, &DocStringNoSignatureTest) < 0) { | |
| return -1; | |
| } | |
| if (PyModule_AddType(mod, &DocStringUnrepresentableSignatureTest) < 0) { | |
| return -1; | |
| } | |
| if (PyModule_AddObject(mod, "ONE", PyLong_FromLong(1)) < 0) { | |
| return -1; | |
| } | |
| return 0; | |
| } |