Issue #7376: When called with no arguments doctest was running a

self-test.  Because of a change to the way tracebacks are printed,
this self-test was failing.  The test is run (and passes) during normal
regression testing.  So instead of running the failing self-test this
patch makes doctest emit a usage message.  This is better behavior anyway
since passing in arguments is the real reason to run doctest as a command.

Bug discovery and initial patch by Florent Xicluna.
This commit is contained in:
R. David Murray 2009-12-20 16:46:06 +00:00
parent 97138117b2
commit 77e48ba993
2 changed files with 25 additions and 18 deletions

View File

@ -2660,27 +2660,31 @@ __test__ = {"_TestClass": _TestClass,
""",
}
def _test():
testfiles = [arg for arg in sys.argv[1:] if arg and arg[0] != '-']
if testfiles:
for filename in testfiles:
if filename.endswith(".py"):
# It is a module -- insert its dir into sys.path and try to
# import it. If it is part of a package, that possibly won't work
# because of package imports.
dirname, filename = os.path.split(filename)
sys.path.insert(0, dirname)
m = __import__(filename[:-3])
del sys.path[0]
failures, _ = testmod(m)
else:
failures, _ = testfile(filename, module_relative=False)
if failures:
return 1
else:
r = unittest.TextTestRunner()
r.run(DocTestSuite())
if not testfiles:
name = os.path.basename(sys.argv[0])
if '__loader__' in globals() and name.endswith('.py'): # python -m
name, _ = os.path.splitext(name)
print("usage: {0} [-v] file ...".format(name))
return 2
for filename in testfiles:
if filename.endswith(".py"):
# It is a module -- insert its dir into sys.path and try to
# import it. If it is part of a package, that possibly
# won't work because of package imports.
dirname, filename = os.path.split(filename)
sys.path.insert(0, dirname)
m = __import__(filename[:-3])
del sys.path[0]
failures, _ = testmod(m)
else:
failures, _ = testfile(filename, module_relative=False)
if failures:
return 1
return 0
if __name__ == "__main__":
sys.exit(_test())

View File

@ -49,6 +49,9 @@ Library
Tests
-----
- Issue #7376: instead of running a self-test (which was failing) when called
with no arguments, doctest.py now gives a usage message.
- Issue #7396: fix regrtest -s, which was broken by the -j enhancement.
- Issue #7498: test_multiprocessing now uses test_support.find_unused_port