From ff432e6f4ad8e4430ce984ec883a3d038e1c7ab9 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 6 Mar 2007 13:37:45 +0000 Subject: [PATCH] Patch #1663234: you can now run doctest on test files and modules using "python -m doctest [-v] filename ...". --- Doc/lib/libdoctest.tex | 25 +++++++++++++++++++++++++ Lib/doctest.py | 19 +++++++++++++++++-- Misc/NEWS | 3 +++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/Doc/lib/libdoctest.tex b/Doc/lib/libdoctest.tex index 957ecf48cc..40602360c9 100644 --- a/Doc/lib/libdoctest.tex +++ b/Doc/lib/libdoctest.tex @@ -201,6 +201,19 @@ prohibit it by passing \code{verbose=False}. In either of those cases, \code{sys.argv} is not examined by \function{testmod()} (so passing \programopt{-v} or not has no effect). +Since Python 2.6, there is also a command line shortcut for running +\function{testmod()}. You can instruct the Python interpreter to run +the doctest module directly from the standard library and pass the module +name(s) on the command line: + +\begin{verbatim} +python -m doctest -v example.py +\end{verbatim} + +This will import \file{example.py} as a standalone module and run +\function{testmod()} on it. Note that this may not work correctly if the +file is part of a package and imports other submodules from that package. + For more information on \function{testmod()}, see section~\ref{doctest-basic-api}. @@ -267,6 +280,18 @@ Like \function{testmod()}, \function{testfile()}'s verbosity can be set with the \programopt{-v} command-line switch or with the optional keyword argument \var{verbose}. +Since Python 2.6, there is also a command line shortcut for running +\function{testfile()}. You can instruct the Python interpreter to run +the doctest module directly from the standard library and pass the file +name(s) on the command line: + +\begin{verbatim} +python -m doctest -v example.txt +\end{verbatim} + +Because the file name does not end with \file{.py}, \module{doctest} infers +that it must be run with \function{testfile()}, not \function{testmod()}. + For more information on \function{testfile()}, see section~\ref{doctest-basic-api}. diff --git a/Lib/doctest.py b/Lib/doctest.py index 32d076aa7f..31339ed454 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -2630,8 +2630,23 @@ __test__ = {"_TestClass": _TestClass, } def _test(): - r = unittest.TextTestRunner() - r.run(DocTestSuite()) + testfiles = [arg for arg in sys.argv[1:] if arg and arg[0] != '-'] + if len(testfiles) > 0: + for filename in testfiles: + if filename.endswith(".py"): + # This 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] + testmod(m) + else: + testfile(filename, module_relative=False) + else: + r = unittest.TextTestRunner() + r.run(DocTestSuite()) if __name__ == "__main__": _test() diff --git a/Misc/NEWS b/Misc/NEWS index ed8cec403f..5ba25226a5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -141,6 +141,9 @@ Core and builtins Library ------- +- Patch #1663234: you can now run doctest on test files and modules + using "python -m doctest [-v] filename ...". + - Patch #1121142: Implement ZipFile.open. - Taught setup.py how to locate Berkeley DB on Macs using MacPorts. -- 2.50.1