from io import StringIO
from collections import namedtuple
from urllib.request import urlopen, urlcleanup
+from test import support
from test.support import import_helper
from test.support import os_helper
from test.support.script_helper import (assert_python_ok,
self.assertEqual(self._get_summary_line(dict.__class_getitem__),
"__class_getitem__(object, /) method of builtins.type instance")
+ @support.cpython_only
def test_module_level_callable_unrepresentable_default(self):
- self.assertEqual(self._get_summary_line(getattr),
- "getattr(...)")
+ import _testcapi
+ builtin = _testcapi.func_with_unrepresentable_signature
+ self.assertEqual(self._get_summary_line(builtin),
+ "func_with_unrepresentable_signature(a, b=<x>)")
+ @support.cpython_only
def test_builtin_staticmethod_unrepresentable_default(self):
self.assertEqual(self._get_summary_line(str.maketrans),
"maketrans(x, y=<unrepresentable>, z=<unrepresentable>, /)")
+ import _testcapi
+ cls = _testcapi.DocStringUnrepresentableSignatureTest
+ self.assertEqual(self._get_summary_line(cls.staticmeth),
+ "staticmeth(a, b=<x>)")
+ @support.cpython_only
def test_unbound_builtin_method_unrepresentable_default(self):
self.assertEqual(self._get_summary_line(dict.pop),
"pop(self, key, default=<unrepresentable>, /)")
+ import _testcapi
+ cls = _testcapi.DocStringUnrepresentableSignatureTest
+ self.assertEqual(self._get_summary_line(cls.meth),
+ "meth(self, /, a, b=<x>)")
+ @support.cpython_only
def test_bound_builtin_method_unrepresentable_default(self):
self.assertEqual(self._get_summary_line({}.pop),
"pop(key, default=<unrepresentable>, /) "
"method of builtins.dict instance")
+ import _testcapi
+ obj = _testcapi.DocStringUnrepresentableSignatureTest()
+ self.assertEqual(self._get_summary_line(obj.meth),
+ "meth(a, b=<x>) "
+ "method of _testcapi.DocStringUnrepresentableSignatureTest instance")
+
+ @support.cpython_only
+ def test_unbound_builtin_classmethod_unrepresentable_default(self):
+ import _testcapi
+ cls = _testcapi.DocStringUnrepresentableSignatureTest
+ descr = cls.__dict__['classmeth']
+ self.assertEqual(self._get_summary_line(descr),
+ "classmeth(type, /, a, b=<x>)")
+
+ @support.cpython_only
+ def test_bound_builtin_classmethod_unrepresentable_default(self):
+ import _testcapi
+ cls = _testcapi.DocStringUnrepresentableSignatureTest
+ self.assertEqual(self._get_summary_line(cls.classmeth),
+ "classmeth(a, b=<x>) method of builtins.type instance")
def test_overridden_text_signature(self):
class C:
{"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=<x>)\n"
+ "--\n\n"
+ "This docstring has a signature with unrepresentable default."
+ )},
{NULL},
};
.tp_new = PyType_GenericNew,
};
+static PyMethodDef DocStringUnrepresentableSignatureTest_methods[] = {
+ {"meth",
+ (PyCFunction)test_with_docstring, METH_VARARGS,
+ PyDoc_STR(
+ "meth($self, /, a, b=<x>)\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=<x>)\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=<x>)\n"
+ "--\n\n"
+ "This docstring has a signature with unrepresentable default."
+ )},
+ {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_AddType(mod, &DocStringNoSignatureTest) < 0) {
return -1;
}
+ if (PyModule_AddType(mod, &DocStringUnrepresentableSignatureTest) < 0) {
+ return -1;
+ }
return 0;
}