#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", (PyCFunction)test_with_docstring, METH_VARARGS, docstring_empty}, {"docstring_no_signature", (PyCFunction)test_with_docstring, METH_VARARGS, docstring_no_signature}, {"docstring_no_signature_noargs", (PyCFunction)test_with_docstring, METH_NOARGS, docstring_no_signature}, {"docstring_no_signature_o", (PyCFunction)test_with_docstring, METH_O, docstring_no_signature}, {"docstring_with_invalid_signature", (PyCFunction)test_with_docstring, METH_VARARGS, docstring_with_invalid_signature}, {"docstring_with_invalid_signature2", (PyCFunction)test_with_docstring, METH_VARARGS, docstring_with_invalid_signature2}, {"docstring_with_signature", (PyCFunction)test_with_docstring, METH_VARARGS, docstring_with_signature}, {"docstring_with_signature_and_extra_newlines", (PyCFunction)test_with_docstring, METH_VARARGS, docstring_with_signature_and_extra_newlines}, {"docstring_with_signature_but_no_doc", (PyCFunction)test_with_docstring, METH_VARARGS, docstring_with_signature_but_no_doc}, {"docstring_with_signature_with_defaults", (PyCFunction)test_with_docstring, METH_VARARGS, docstring_with_signature_with_defaults}, {"no_docstring", (PyCFunction)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", (PyCFunction)test_with_docstring, METH_VARARGS, PyDoc_STR( "func_with_unrepresentable_signature($module, /, a, b=)\n" "--\n\n" "This docstring has a signature with unrepresentable default." )}, {NULL}, }; static PyMethodDef DocStringNoSignatureTest_methods[] = { {"meth_noargs", (PyCFunction)test_with_docstring, METH_NOARGS, docstring_no_signature}, {"meth_o", (PyCFunction)test_with_docstring, METH_O, docstring_no_signature}, {"meth_noargs_class", (PyCFunction)test_with_docstring, METH_NOARGS|METH_CLASS, docstring_no_signature}, {"meth_o_class", (PyCFunction)test_with_docstring, METH_O|METH_CLASS, docstring_no_signature}, {"meth_noargs_static", (PyCFunction)test_with_docstring, METH_NOARGS|METH_STATIC, docstring_no_signature}, {"meth_o_static", (PyCFunction)test_with_docstring, METH_O|METH_STATIC, docstring_no_signature}, {"meth_noargs_coexist", (PyCFunction)test_with_docstring, METH_NOARGS|METH_COEXIST, docstring_no_signature}, {"meth_o_coexist", (PyCFunction)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", (PyCFunction)test_with_docstring, METH_VARARGS, PyDoc_STR( "meth($self, /, a, b=)\n" "--\n\n" "This docstring has a signature with unrepresentable default." )}, {"classmeth", (PyCFunction)test_with_docstring, METH_VARARGS|METH_CLASS, PyDoc_STR( "classmeth($type, /, a, b=)\n" "--\n\n" "This docstring has a signature with unrepresentable default." )}, {"staticmeth", (PyCFunction)test_with_docstring, METH_VARARGS|METH_STATIC, PyDoc_STR( "staticmeth(a, b=)\n" "--\n\n" "This docstring has a signature with unrepresentable default." )}, {"with_default", (PyCFunction)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; }