mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
In DocFileTest:
- Fixed bug in handling of absolute paths. - If run from an interactive session, make paths relative to the directory containing sys.argv[0] (since __main__ doesn't have a __file__ attribute).
This commit is contained in:
parent
c9f53b4905
commit
0273f5b6b2
2 changed files with 46 additions and 6 deletions
|
@ -2312,10 +2312,27 @@ class DocFileCase(DocTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def DocFileTest(path, package=None, globs=None, **options):
|
def DocFileTest(path, package=None, globs=None, **options):
|
||||||
package = _normalize_module(package)
|
|
||||||
name = path.split('/')[-1]
|
name = path.split('/')[-1]
|
||||||
dir = os.path.split(package.__file__)[0]
|
|
||||||
path = os.path.join(dir, *(path.split('/')))
|
# Interpret relative paths as relative to the given package's
|
||||||
|
# directory (or the current module, if no package is specified).
|
||||||
|
if not os.path.isabs(path):
|
||||||
|
package = _normalize_module(package)
|
||||||
|
if hasattr(package, '__file__'):
|
||||||
|
# A normal package/module.
|
||||||
|
dir = os.path.split(package.__file__)[0]
|
||||||
|
path = os.path.join(dir, *(path.split('/')))
|
||||||
|
elif package.__name__ == '__main__':
|
||||||
|
# An interactive session.
|
||||||
|
if sys.argv[0] != '':
|
||||||
|
dir = os.path.split(sys.argv[0])[0]
|
||||||
|
path = os.path.join(dir, *(path.split('/')))
|
||||||
|
else:
|
||||||
|
# A module w/o __file__ (this includes builtins)
|
||||||
|
raise ValueError("Can't resolve paths relative to " +
|
||||||
|
"the module %s (it has" % package +
|
||||||
|
"no __file__)")
|
||||||
|
|
||||||
doc = open(path).read()
|
doc = open(path).read()
|
||||||
|
|
||||||
if globs is None:
|
if globs is None:
|
||||||
|
|
|
@ -1812,14 +1812,37 @@ def test_DocFileSuite():
|
||||||
>>> suite.run(unittest.TestResult())
|
>>> suite.run(unittest.TestResult())
|
||||||
<unittest.TestResult run=2 errors=0 failures=2>
|
<unittest.TestResult run=2 errors=0 failures=2>
|
||||||
|
|
||||||
Note that '/' should be used as a path separator. It will be
|
'/' should be used as a path separator. It will be converted
|
||||||
converted to a native separator at run time:
|
to a native separator at run time:
|
||||||
|
|
||||||
|
|
||||||
>>> suite = doctest.DocFileSuite('../test/test_doctest.txt')
|
>>> suite = doctest.DocFileSuite('../test/test_doctest.txt')
|
||||||
>>> suite.run(unittest.TestResult())
|
>>> suite.run(unittest.TestResult())
|
||||||
<unittest.TestResult run=1 errors=0 failures=1>
|
<unittest.TestResult run=1 errors=0 failures=1>
|
||||||
|
|
||||||
|
If DocFileSuite is used from an interactive session, then files
|
||||||
|
are resolved relative to the directory of sys.argv[0]:
|
||||||
|
|
||||||
|
>>> import new, os.path, test.test_doctest
|
||||||
|
>>> save_argv = sys.argv
|
||||||
|
>>> sys.argv = [test.test_doctest.__file__]
|
||||||
|
>>> suite = doctest.DocFileSuite('test_doctest.txt',
|
||||||
|
... package=new.module('__main__'))
|
||||||
|
>>> sys.argv = save_argv
|
||||||
|
|
||||||
|
Absolute paths may also be used; they should use the native
|
||||||
|
path separator (*not* '/').
|
||||||
|
|
||||||
|
>>> # Get the absolute path of the test package.
|
||||||
|
>>> test_doctest_path = os.path.abspath(test.test_doctest.__file__)
|
||||||
|
>>> test_pkg_path = os.path.split(test_doctest_path)[0]
|
||||||
|
|
||||||
|
>>> # Use it to find the absolute path of test_doctest.txt.
|
||||||
|
>>> test_file = os.path.join(test_pkg_path, 'test_doctest.txt')
|
||||||
|
|
||||||
|
>>> suite = doctest.DocFileSuite(test_file)
|
||||||
|
>>> suite.run(unittest.TestResult())
|
||||||
|
<unittest.TestResult run=1 errors=0 failures=1>
|
||||||
|
|
||||||
You can specify initial global variables:
|
You can specify initial global variables:
|
||||||
|
|
||||||
>>> suite = doctest.DocFileSuite('test_doctest.txt',
|
>>> suite = doctest.DocFileSuite('test_doctest.txt',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue