mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
#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.
This commit is contained in:
parent
c00fffb659
commit
5707d508e1
5 changed files with 273 additions and 12 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue