summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/doctest.py3
-rw-r--r--Lib/test/test_doctest.py19
-rw-r--r--Misc/NEWS2
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
diff --git a/Misc/NEWS b/Misc/NEWS
index d7c9a49..9ca0f1f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.