From 2a5f9da56cbdecd487965e7e08988d5d2af28cae Mon Sep 17 00:00:00 2001
From: Ethan Furman <ethan@stoneleaf.us>
Date: Thu, 17 Sep 2015 22:20:41 -0700
Subject: Issue24756: clarify usage of run_docstring_examples()

---
 Doc/library/doctest.rst | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst
index 2e372de..ea6e1b5 100644
--- a/Doc/library/doctest.rst
+++ b/Doc/library/doctest.rst
@@ -914,15 +914,10 @@ and :ref:`doctest-simple-testfile`.
    above, except that *globs* defaults to ``m.__dict__``.
 
 
-There's also a function to run the doctests associated with a single object.
-This function is provided for backward compatibility.  There are no plans to
-deprecate it, but it's rarely useful:
-
-
 .. function:: run_docstring_examples(f, globs, verbose=False, name="NoName", compileflags=None, optionflags=0)
 
-   Test examples associated with object *f*; for example, *f* may be a module,
-   function, or class object.
+   Test examples associated with object *f*; for example, *f* may be a string,
+   a module, a function, or a class object.
 
    A shallow copy of dictionary argument *globs* is used for the execution context.
 
@@ -1821,6 +1816,27 @@ several options for organizing tests:
 * Define a ``__test__`` dictionary mapping from regression test topics to
   docstrings containing test cases.
 
+When you have placed your tests in a module, the module can itself be the test
+runner.  When a test fails, you can arrange for your test runner to re-run only
+the failing doctest while you debug the problem.  Here is a minimal example of
+such a test runner::
+
+    if __name__ == '__main__':
+        import doctest
+        flags = doctest.REPORT_NDIFF|doctest.FAIL_FAST
+        if len(sys.argv) > 1:
+            name = sys.argv[1]
+            if name in globals():
+                obj = globals()[name]
+            else:
+                obj = __test__[name]
+            doctest.run_docstring_examples(obj, globals(), name=name,
+                                           optionflags=flags)
+        else:
+            fail, total = doctest.testmod(optionflags=flags)
+            print("{} failures out of {} tests".format(fail, total))
+
+
 .. rubric:: Footnotes
 
 .. [#] Examples containing both expected output and an exception are not supported.
-- 
cgit v0.12

