]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch #1663234: you can now run doctest on test files and modules
authorGeorg Brandl <georg@python.org>
Tue, 6 Mar 2007 13:37:45 +0000 (13:37 +0000)
committerGeorg Brandl <georg@python.org>
Tue, 6 Mar 2007 13:37:45 +0000 (13:37 +0000)
using "python -m doctest [-v] filename ...".

Doc/lib/libdoctest.tex
Lib/doctest.py
Misc/NEWS

index 957ecf48cc0792f74312ceac7c6aa96d1921d725..40602360c955700ff06f794a7b2c4596b8fd00cb 100644 (file)
@@ -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}.
 
index 32d076aa7f357ecb13e29eeec0068a1e877de1ad..31339ed454b3772e4b87fd4928e1a35d8c250fe5 100644 (file)
@@ -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()
index ed8cec403fc008ffa50687cf697908704c355a77..5ba25226a556a09d828622ff0315de4704273426 100644 (file)
--- 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.