Issue #6195: fix doctest to no longer try to read 'source' data from
binary files.
This commit is contained in:
parent
554290d920
commit
58641defe4
|
@ -812,20 +812,28 @@ class DocTestFinder:
|
|||
# DocTestFinder._find_lineno to find the line number for a
|
||||
# given object's docstring.
|
||||
try:
|
||||
file = inspect.getsourcefile(obj) or inspect.getfile(obj)
|
||||
if module is not None:
|
||||
# Supply the module globals in case the module was
|
||||
# originally loaded via a PEP 302 loader and
|
||||
# file is not a valid filesystem path
|
||||
source_lines = linecache.getlines(file, module.__dict__)
|
||||
else:
|
||||
# No access to a loader, so assume it's a normal
|
||||
# filesystem path
|
||||
source_lines = linecache.getlines(file)
|
||||
if not source_lines:
|
||||
source_lines = None
|
||||
file = inspect.getsourcefile(obj)
|
||||
except TypeError:
|
||||
source_lines = None
|
||||
else:
|
||||
if not file:
|
||||
# Check to see if it's one of our special internal "files"
|
||||
# (see __patched_linecache_getlines).
|
||||
file = inspect.getfile(obj)
|
||||
if not file[0]+file[-2:] == '<]>': file = None
|
||||
if file is None: source_lines = None
|
||||
else:
|
||||
if module is not None:
|
||||
# Supply the module globals in case the module was
|
||||
# originally loaded via a PEP 302 loader and
|
||||
# file is not a valid filesystem path
|
||||
source_lines = linecache.getlines(file, module.__dict__)
|
||||
else:
|
||||
# No access to a loader, so assume it's a normal
|
||||
# filesystem path
|
||||
source_lines = linecache.getlines(file)
|
||||
if not source_lines:
|
||||
source_lines = None
|
||||
|
||||
# Initialize globals, and merge in extraglobs.
|
||||
if globs is None:
|
||||
|
|
|
@ -2288,6 +2288,17 @@ using the optional keyword argument `encoding`:
|
|||
>>> doctest.master = None # Reset master.
|
||||
"""
|
||||
|
||||
def test_testmod(): r"""
|
||||
Tests for the testmod function. More might be useful, but for now we're just
|
||||
testing the case raised by Issue 6195, where trying to doctest a C module would
|
||||
fail with a UnicodeDecodeError because doctest tried to read the "source" lines
|
||||
out of the binary module.
|
||||
|
||||
>>> import unicodedata
|
||||
>>> doctest.testmod(unicodedata)
|
||||
TestResults(failed=0, attempted=0)
|
||||
"""
|
||||
|
||||
######################################################################
|
||||
## Main
|
||||
######################################################################
|
||||
|
|
Loading…
Reference in New Issue