mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
Issue #3158: doctest can now find doctests in functions and methods
written in C. As a part of this, a few doctests have been added to the builtins module (on hex(), oct(), and bin()), a doctest has been fixed (hopefully on all platforms) on float, and test_builtins now runs doctests in builtins.
This commit is contained in:
parent
091167c1ca
commit
a4b7a7548c
7 changed files with 65 additions and 28 deletions
|
@ -918,6 +918,8 @@ class DocTestFinder:
|
|||
return module is inspect.getmodule(object)
|
||||
elif inspect.isfunction(object):
|
||||
return module.__dict__ is object.__globals__
|
||||
elif inspect.ismethoddescriptor(object):
|
||||
return module.__name__ == object.__objclass__.__module__
|
||||
elif inspect.isclass(object):
|
||||
return module.__name__ == object.__module__
|
||||
elif hasattr(object, '__module__'):
|
||||
|
@ -950,7 +952,7 @@ class DocTestFinder:
|
|||
for valname, val in obj.__dict__.items():
|
||||
valname = '%s.%s' % (name, valname)
|
||||
# Recurse to functions & classes.
|
||||
if ((inspect.isfunction(val) or inspect.isclass(val)) and
|
||||
if ((inspect.isroutine(val) or inspect.isclass(val)) and
|
||||
self._from_module(module, val)):
|
||||
self._find(tests, val, valname, module, source_lines,
|
||||
globs, seen)
|
||||
|
@ -962,9 +964,8 @@ class DocTestFinder:
|
|||
raise ValueError("DocTestFinder.find: __test__ keys "
|
||||
"must be strings: %r" %
|
||||
(type(valname),))
|
||||
if not (inspect.isfunction(val) or inspect.isclass(val) or
|
||||
inspect.ismethod(val) or inspect.ismodule(val) or
|
||||
isinstance(val, str)):
|
||||
if not (inspect.isroutine(val) or inspect.isclass(val) or
|
||||
inspect.ismodule(val) or isinstance(val, str)):
|
||||
raise ValueError("DocTestFinder.find: __test__ values "
|
||||
"must be strings, functions, methods, "
|
||||
"classes, or modules: %r" %
|
||||
|
@ -983,7 +984,7 @@ class DocTestFinder:
|
|||
val = getattr(obj, valname).__func__
|
||||
|
||||
# Recurse to methods, properties, and nested classes.
|
||||
if ((inspect.isfunction(val) or inspect.isclass(val) or
|
||||
if ((inspect.isroutine(val) or inspect.isclass(val) or
|
||||
isinstance(val, property)) and
|
||||
self._from_module(module, val)):
|
||||
valname = '%s.%s' % (name, valname)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue