summaryrefslogtreecommitdiffstats
path: root/Lib/doctest.py
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2013-06-23 18:24:13 (GMT)
committerR David Murray <rdmurray@bitdance.com>2013-06-23 18:24:13 (GMT)
commit5707d508e1b589045ce1062da3497ad9653f1cf6 (patch)
treebc2ba43038f5011301e09cf2e78c213f2b3e6114 /Lib/doctest.py
parentc00fffb659bc69666ba05025057e762cf24e76b0 (diff)
downloadcpython-5707d508e1b589045ce1062da3497ad9653f1cf6.zip
cpython-5707d508e1b589045ce1062da3497ad9653f1cf6.tar.gz
cpython-5707d508e1b589045ce1062da3497ad9653f1cf6.tar.bz2
#11390: convert doctest CLI to argparse and add -o and -f options.
This provides a way to specify arbitrary doctest options when using the CLI interface to process test files, just as one can when calling testmod or testfile programmatically.
Diffstat (limited to 'Lib/doctest.py')
-rw-r--r--Lib/doctest.py37
1 files changed, 28 insertions, 9 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 1b8a9d4..1d4d329 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -93,6 +93,7 @@ __all__ = [
]
import __future__
+import argparse
import difflib
import inspect
import linecache
@@ -2708,13 +2709,30 @@ __test__ = {"_TestClass": _TestClass,
def _test():
- testfiles = [arg for arg in sys.argv[1:] if arg and arg[0] != '-']
- if not testfiles:
- name = os.path.basename(sys.argv[0])
- if '__loader__' in globals(): # python -m
- name, _ = os.path.splitext(name)
- print("usage: {0} [-v] file ...".format(name))
- return 2
+ parser = argparse.ArgumentParser(description="doctest runner")
+ parser.add_argument('-v', '--verbose', action='store_true', default=False,
+ help='print very verbose output for all tests')
+ parser.add_argument('-o', '--option', action='append',
+ choices=OPTIONFLAGS_BY_NAME.keys(), default=[],
+ help=('specify a doctest option flag to apply'
+ ' to the test run; may be specified more'
+ ' than once to apply multiple options'))
+ parser.add_argument('-f', '--fail-fast', action='store_true',
+ help=('stop running tests after first failure (this'
+ ' is a shorthand for -o FAIL_FAST, and is'
+ ' in addition to any other -o options)'))
+ parser.add_argument('file', nargs='+',
+ help='file containing the tests to run')
+ args = parser.parse_args()
+ testfiles = args.file
+ # Verbose used to be handled by the "inspect argv" magic in DocTestRunner,
+ # but since we are using argparse we are passing it manually now.
+ verbose = args.verbose
+ options = 0
+ for option in args.option:
+ options |= OPTIONFLAGS_BY_NAME[option]
+ if args.fail_fast:
+ options |= FAIL_FAST
for filename in testfiles:
if filename.endswith(".py"):
# It is a module -- insert its dir into sys.path and try to
@@ -2724,9 +2742,10 @@ def _test():
sys.path.insert(0, dirname)
m = __import__(filename[:-3])
del sys.path[0]
- failures, _ = testmod(m)
+ failures, _ = testmod(m, verbose=verbose, optionflags=options)
else:
- failures, _ = testfile(filename, module_relative=False)
+ failures, _ = testfile(filename, module_relative=False,
+ verbose=verbose, optionflags=options)
if failures:
return 1
return 0