From 4581cfa326cf7d8b9d7888d4c0e96ee88950bcfa Mon Sep 17 00:00:00 2001
From: =?utf8?q?Martin=20v=2E=20L=C3=B6wis?= <martin@v.loewis.de>
Date: Fri, 22 Nov 2002 08:23:09 +0000
Subject: [PATCH] Patch #486438: Make module argument to testmod optional.

---
 Doc/lib/libdoctest.tex |  6 +++++-
 Lib/doctest.py         | 16 ++++++++++++----
 Misc/NEWS              |  3 +++
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/Doc/lib/libdoctest.tex b/Doc/lib/libdoctest.tex
index edd78a410c..9a795e949b 100644
--- a/Doc/lib/libdoctest.tex
+++ b/Doc/lib/libdoctest.tex
@@ -152,6 +152,10 @@ if __name__ == "__main__":
     _test()
 \end{verbatim}
 
+If you want to test the module as the main module, you don't need to
+pass M to \function{testmod}; in this case, it will test the current
+module.
+
 Then running the module as a script causes the examples in the docstrings
 to get executed and verified:
 
@@ -392,7 +396,7 @@ definition of \function{_test()} is
 \begin{verbatim}
 def _test():
     import doctest, sys
-    doctest.testmod(sys.modules["__main__"])
+    doctest.testmod()
 \end{verbatim}
 \end{enumerate}
 
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 5cbdd06a9e..c01606dca6 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1044,12 +1044,13 @@ see its docs for details.
 
 master = None
 
-def testmod(m, name=None, globs=None, verbose=None, isprivate=None,
+def testmod(m=None, name=None, globs=None, verbose=None, isprivate=None,
                report=1):
-    """m, name=None, globs=None, verbose=None, isprivate=None, report=1
+    """m=None, name=None, globs=None, verbose=None, isprivate=None, report=1
 
-    Test examples in docstrings in functions and classes reachable from
-    module m, starting with m.__doc__.  Private names are skipped.
+    Test examples in docstrings in functions and classes reachable
+    from module m (or the current module if m is not supplied), starting
+    with m.__doc__.  Private names are skipped.
 
     Also test examples reachable from dict m.__test__ if it exists and is
     not None.  m.__dict__ maps names to functions, classes and strings;
@@ -1090,6 +1091,13 @@ def testmod(m, name=None, globs=None, verbose=None, isprivate=None,
 
     global master
 
+    if m is None:
+        import sys
+        # DWA - m will still be None if this wasn't invoked from the command
+        # line, in which case the following TypeError is about as good an error
+        # as we should expect
+        m = sys.modules.get('__main__')
+
     if not _ismodule(m):
         raise TypeError("testmod: module required; " + `m`)
     if name is None:
diff --git a/Misc/NEWS b/Misc/NEWS
index 42cd918336..d29cccb01c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -389,6 +389,9 @@ Extension modules
 Library
 -------
 
+- doctest.testmod can now be called without argument, which means to
+  test the current module.
+
 - When cancelling a server that implemented threading with a keyboard
   interrupt, the server would shut down but not terminate (waiting on
   client threads). A new member variable, daemon_threads, was added to
-- 
2.40.0