Issue #20710: The pydoc summary line no longer displays the "self" parameter

for bound methods.  Previous to this change, it displayed "self" for methods
implemented in Python but not methods implemented in C; it is now both
internally consistent and consistent with inspect.Signature.
This commit is contained in:
Larry Hastings 2014-02-20 23:34:46 -08:00
parent 8c185ee12e
commit 24a882bb7b
3 changed files with 54 additions and 10 deletions

View file

@ -6,6 +6,7 @@ import difflib
import inspect
import pydoc
import keyword
import _pickle
import pkgutil
import re
import string
@ -699,12 +700,41 @@ class TestDescriptions(unittest.TestCase):
self.assertIsNone(pydoc.locate(name))
self.assertRaises(ImportError, pydoc.render_doc, name)
@staticmethod
def _get_summary_line(o):
text = pydoc.plain(pydoc.render_doc(o))
lines = text.split('\n')
assert len(lines) >= 2
return lines[2]
# these should include "self"
def test_unbound_python_method(self):
self.assertEqual(self._get_summary_line(textwrap.TextWrapper.wrap),
"wrap(self, text)")
@requires_docstrings
def test_builtin_signatures(self):
# test producing signatures from builtins
stat_sig = pydoc.render_doc(os.stat)
self.assertEqual(pydoc.plain(stat_sig).splitlines()[2],
'stat(path, *, dir_fd=None, follow_symlinks=True)')
def test_unbound_builtin_method(self):
self.assertEqual(self._get_summary_line(_pickle.Pickler.dump),
"dump(self, obj, /)")
# these no longer include "self"
def test_bound_python_method(self):
t = textwrap.TextWrapper()
self.assertEqual(self._get_summary_line(t.wrap),
"wrap(text) method of textwrap.TextWrapper instance")
@requires_docstrings
def test_bound_builtin_method(self):
s = StringIO()
p = _pickle.Pickler(s)
self.assertEqual(self._get_summary_line(p.dump),
"dump(obj, /) method of _pickle.Pickler instance")
# this should *never* include self!
@requires_docstrings
def test_module_level_callable(self):
self.assertEqual(self._get_summary_line(os.stat),
"stat(path, *, dir_fd=None, follow_symlinks=True)")
@unittest.skipUnless(threading, 'Threading required for this test.')