diff options
-rw-r--r-- | Lib/doctest.py | 3 | ||||
-rw-r--r-- | Lib/test/test_doctest.py | 19 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
3 files changed, 22 insertions, 2 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py index b227952..bb9f432 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -985,7 +985,8 @@ class DocTestFinder: for valname, val in obj.__dict__.items(): valname = '%s.%s' % (name, valname) # Recurse to functions & classes. - if ((inspect.isroutine(val) or inspect.isclass(val)) and + if ((inspect.isroutine(inspect.unwrap(val)) + or inspect.isclass(val)) and self._from_module(module, val)): self._find(tests, val, valname, module, source_lines, globs, seen) diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 4b8d0d2..95700a3 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -4,6 +4,7 @@ Test script for doctest. from test import support import doctest +import functools import os import sys @@ -434,7 +435,7 @@ We'll simulate a __file__ attr that ends in pyc: >>> tests = finder.find(sample_func) >>> print(tests) # doctest: +ELLIPSIS - [<DocTest sample_func from ...:18 (1 example)>] + [<DocTest sample_func from ...:19 (1 example)>] The exact name depends on how test_doctest was invoked, so allow for leading path components. @@ -2364,6 +2365,22 @@ def test_trailing_space_in_test(): foo \n """ +class Wrapper: + def __init__(self, func): + self.func = func + functools.update_wrapper(self, func) + + def __call__(self, *args, **kwargs): + self.func(*args, **kwargs) + +@Wrapper +def test_look_in_unwrapped(): + """ + Docstrings in wrapped functions must be detected as well. + + >>> 'one other test' + 'one other test' + """ def test_unittest_reportflags(): """Default unittest reporting flags can be set to control reporting @@ -194,6 +194,8 @@ Core and Builtins Library ------- +- Issue #21740: Support wrapped callables in pydoc. Patch by Claudiu Popa. + - Issue #23009: Make sure selectors.EpollSelecrtor.select() works when no FD is registered. |