xref: /third_party/python/Doc/library/doctest.rst (revision 7db96d56)
17db96d56Sopenharmony_ci:mod:`doctest` --- Test interactive Python examples
27db96d56Sopenharmony_ci===================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: doctest
57db96d56Sopenharmony_ci   :synopsis: Test pieces of code within docstrings.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Tim Peters <tim@python.org>
87db96d56Sopenharmony_ci.. sectionauthor:: Tim Peters <tim@python.org>
97db96d56Sopenharmony_ci.. sectionauthor:: Moshe Zadka <moshez@debian.org>
107db96d56Sopenharmony_ci.. sectionauthor:: Edward Loper <edloper@users.sourceforge.net>
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci**Source code:** :source:`Lib/doctest.py`
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci--------------
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ciThe :mod:`doctest` module searches for pieces of text that look like interactive
177db96d56Sopenharmony_ciPython sessions, and then executes those sessions to verify that they work
187db96d56Sopenharmony_ciexactly as shown.  There are several common ways to use doctest:
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci* To check that a module's docstrings are up-to-date by verifying that all
217db96d56Sopenharmony_ci  interactive examples still work as documented.
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci* To perform regression testing by verifying that interactive examples from a
247db96d56Sopenharmony_ci  test file or a test object work as expected.
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci* To write tutorial documentation for a package, liberally illustrated with
277db96d56Sopenharmony_ci  input-output examples.  Depending on whether the examples or the expository text
287db96d56Sopenharmony_ci  are emphasized, this has the flavor of "literate testing" or "executable
297db96d56Sopenharmony_ci  documentation".
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ciHere's a complete but small example module::
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci   """
347db96d56Sopenharmony_ci   This is the "example" module.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci   The example module supplies one function, factorial().  For example,
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   >>> factorial(5)
397db96d56Sopenharmony_ci   120
407db96d56Sopenharmony_ci   """
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci   def factorial(n):
437db96d56Sopenharmony_ci       """Return the factorial of n, an exact integer >= 0.
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci       >>> [factorial(n) for n in range(6)]
467db96d56Sopenharmony_ci       [1, 1, 2, 6, 24, 120]
477db96d56Sopenharmony_ci       >>> factorial(30)
487db96d56Sopenharmony_ci       265252859812191058636308480000000
497db96d56Sopenharmony_ci       >>> factorial(-1)
507db96d56Sopenharmony_ci       Traceback (most recent call last):
517db96d56Sopenharmony_ci           ...
527db96d56Sopenharmony_ci       ValueError: n must be >= 0
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci       Factorials of floats are OK, but the float must be an exact integer:
557db96d56Sopenharmony_ci       >>> factorial(30.1)
567db96d56Sopenharmony_ci       Traceback (most recent call last):
577db96d56Sopenharmony_ci           ...
587db96d56Sopenharmony_ci       ValueError: n must be exact integer
597db96d56Sopenharmony_ci       >>> factorial(30.0)
607db96d56Sopenharmony_ci       265252859812191058636308480000000
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci       It must also not be ridiculously large:
637db96d56Sopenharmony_ci       >>> factorial(1e100)
647db96d56Sopenharmony_ci       Traceback (most recent call last):
657db96d56Sopenharmony_ci           ...
667db96d56Sopenharmony_ci       OverflowError: n too large
677db96d56Sopenharmony_ci       """
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci       import math
707db96d56Sopenharmony_ci       if not n >= 0:
717db96d56Sopenharmony_ci           raise ValueError("n must be >= 0")
727db96d56Sopenharmony_ci       if math.floor(n) != n:
737db96d56Sopenharmony_ci           raise ValueError("n must be exact integer")
747db96d56Sopenharmony_ci       if n+1 == n:  # catch a value like 1e300
757db96d56Sopenharmony_ci           raise OverflowError("n too large")
767db96d56Sopenharmony_ci       result = 1
777db96d56Sopenharmony_ci       factor = 2
787db96d56Sopenharmony_ci       while factor <= n:
797db96d56Sopenharmony_ci           result *= factor
807db96d56Sopenharmony_ci           factor += 1
817db96d56Sopenharmony_ci       return result
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci   if __name__ == "__main__":
857db96d56Sopenharmony_ci       import doctest
867db96d56Sopenharmony_ci       doctest.testmod()
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ciIf you run :file:`example.py` directly from the command line, :mod:`doctest`
897db96d56Sopenharmony_ciworks its magic:
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci.. code-block:: shell-session
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci   $ python example.py
947db96d56Sopenharmony_ci   $
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ciThere's no output!  That's normal, and it means all the examples worked.  Pass
977db96d56Sopenharmony_ci``-v`` to the script, and :mod:`doctest` prints a detailed log of what
987db96d56Sopenharmony_ciit's trying, and prints a summary at the end:
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci.. code-block:: shell-session
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci   $ python example.py -v
1037db96d56Sopenharmony_ci   Trying:
1047db96d56Sopenharmony_ci       factorial(5)
1057db96d56Sopenharmony_ci   Expecting:
1067db96d56Sopenharmony_ci       120
1077db96d56Sopenharmony_ci   ok
1087db96d56Sopenharmony_ci   Trying:
1097db96d56Sopenharmony_ci       [factorial(n) for n in range(6)]
1107db96d56Sopenharmony_ci   Expecting:
1117db96d56Sopenharmony_ci       [1, 1, 2, 6, 24, 120]
1127db96d56Sopenharmony_ci   ok
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ciAnd so on, eventually ending with:
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci.. code-block:: none
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci   Trying:
1197db96d56Sopenharmony_ci       factorial(1e100)
1207db96d56Sopenharmony_ci   Expecting:
1217db96d56Sopenharmony_ci       Traceback (most recent call last):
1227db96d56Sopenharmony_ci           ...
1237db96d56Sopenharmony_ci       OverflowError: n too large
1247db96d56Sopenharmony_ci   ok
1257db96d56Sopenharmony_ci   2 items passed all tests:
1267db96d56Sopenharmony_ci      1 tests in __main__
1277db96d56Sopenharmony_ci      8 tests in __main__.factorial
1287db96d56Sopenharmony_ci   9 tests in 2 items.
1297db96d56Sopenharmony_ci   9 passed and 0 failed.
1307db96d56Sopenharmony_ci   Test passed.
1317db96d56Sopenharmony_ci   $
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ciThat's all you need to know to start making productive use of :mod:`doctest`!
1347db96d56Sopenharmony_ciJump in.  The following sections provide full details.  Note that there are many
1357db96d56Sopenharmony_ciexamples of doctests in the standard Python test suite and libraries.
1367db96d56Sopenharmony_ciEspecially useful examples can be found in the standard test file
1377db96d56Sopenharmony_ci:file:`Lib/test/test_doctest.py`.
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci.. _doctest-simple-testmod:
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ciSimple Usage: Checking Examples in Docstrings
1437db96d56Sopenharmony_ci---------------------------------------------
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ciThe simplest way to start using doctest (but not necessarily the way you'll
1467db96d56Sopenharmony_cicontinue to do it) is to end each module :mod:`M` with::
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci   if __name__ == "__main__":
1497db96d56Sopenharmony_ci       import doctest
1507db96d56Sopenharmony_ci       doctest.testmod()
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci:mod:`doctest` then examines docstrings in module :mod:`M`.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ciRunning the module as a script causes the examples in the docstrings to get
1557db96d56Sopenharmony_ciexecuted and verified::
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci   python M.py
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ciThis won't display anything unless an example fails, in which case the failing
1607db96d56Sopenharmony_ciexample(s) and the cause(s) of the failure(s) are printed to stdout, and the
1617db96d56Sopenharmony_cifinal line of output is ``***Test Failed*** N failures.``, where *N* is the
1627db96d56Sopenharmony_cinumber of examples that failed.
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ciRun it with the ``-v`` switch instead::
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   python M.py -v
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ciand a detailed report of all examples tried is printed to standard output, along
1697db96d56Sopenharmony_ciwith assorted summaries at the end.
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ciYou can force verbose mode by passing ``verbose=True`` to :func:`testmod`, or
1727db96d56Sopenharmony_ciprohibit it by passing ``verbose=False``.  In either of those cases,
1737db96d56Sopenharmony_ci``sys.argv`` is not examined by :func:`testmod` (so passing ``-v`` or not
1747db96d56Sopenharmony_cihas no effect).
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ciThere is also a command line shortcut for running :func:`testmod`.  You can
1777db96d56Sopenharmony_ciinstruct the Python interpreter to run the doctest module directly from the
1787db96d56Sopenharmony_cistandard library and pass the module name(s) on the command line::
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci   python -m doctest -v example.py
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ciThis will import :file:`example.py` as a standalone module and run
1837db96d56Sopenharmony_ci:func:`testmod` on it.  Note that this may not work correctly if the file is
1847db96d56Sopenharmony_cipart of a package and imports other submodules from that package.
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ciFor more information on :func:`testmod`, see section :ref:`doctest-basic-api`.
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci.. _doctest-simple-testfile:
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ciSimple Usage: Checking Examples in a Text File
1927db96d56Sopenharmony_ci----------------------------------------------
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ciAnother simple application of doctest is testing interactive examples in a text
1957db96d56Sopenharmony_cifile.  This can be done with the :func:`testfile` function::
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci   import doctest
1987db96d56Sopenharmony_ci   doctest.testfile("example.txt")
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ciThat short script executes and verifies any interactive Python examples
2017db96d56Sopenharmony_cicontained in the file :file:`example.txt`.  The file content is treated as if it
2027db96d56Sopenharmony_ciwere a single giant docstring; the file doesn't need to contain a Python
2037db96d56Sopenharmony_ciprogram!   For example, perhaps :file:`example.txt` contains this:
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci.. code-block:: none
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci   The ``example`` module
2087db96d56Sopenharmony_ci   ======================
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci   Using ``factorial``
2117db96d56Sopenharmony_ci   -------------------
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci   This is an example text file in reStructuredText format.  First import
2147db96d56Sopenharmony_ci   ``factorial`` from the ``example`` module:
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci       >>> from example import factorial
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci   Now use it:
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci       >>> factorial(6)
2217db96d56Sopenharmony_ci       120
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ciRunning ``doctest.testfile("example.txt")`` then finds the error in this
2247db96d56Sopenharmony_cidocumentation::
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci   File "./example.txt", line 14, in example.txt
2277db96d56Sopenharmony_ci   Failed example:
2287db96d56Sopenharmony_ci       factorial(6)
2297db96d56Sopenharmony_ci   Expected:
2307db96d56Sopenharmony_ci       120
2317db96d56Sopenharmony_ci   Got:
2327db96d56Sopenharmony_ci       720
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ciAs with :func:`testmod`, :func:`testfile` won't display anything unless an
2357db96d56Sopenharmony_ciexample fails.  If an example does fail, then the failing example(s) and the
2367db96d56Sopenharmony_cicause(s) of the failure(s) are printed to stdout, using the same format as
2377db96d56Sopenharmony_ci:func:`testmod`.
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ciBy default, :func:`testfile` looks for files in the calling module's directory.
2407db96d56Sopenharmony_ciSee section :ref:`doctest-basic-api` for a description of the optional arguments
2417db96d56Sopenharmony_cithat can be used to tell it to look for files in other locations.
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ciLike :func:`testmod`, :func:`testfile`'s verbosity can be set with the
2447db96d56Sopenharmony_ci``-v`` command-line switch or with the optional keyword argument
2457db96d56Sopenharmony_ci*verbose*.
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ciThere is also a command line shortcut for running :func:`testfile`.  You can
2487db96d56Sopenharmony_ciinstruct the Python interpreter to run the doctest module directly from the
2497db96d56Sopenharmony_cistandard library and pass the file name(s) on the command line::
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci   python -m doctest -v example.txt
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ciBecause the file name does not end with :file:`.py`, :mod:`doctest` infers that
2547db96d56Sopenharmony_ciit must be run with :func:`testfile`, not :func:`testmod`.
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ciFor more information on :func:`testfile`, see section :ref:`doctest-basic-api`.
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci.. _doctest-how-it-works:
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ciHow It Works
2627db96d56Sopenharmony_ci------------
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ciThis section examines in detail how doctest works: which docstrings it looks at,
2657db96d56Sopenharmony_cihow it finds interactive examples, what execution context it uses, how it
2667db96d56Sopenharmony_cihandles exceptions, and how option flags can be used to control its behavior.
2677db96d56Sopenharmony_ciThis is the information that you need to know to write doctest examples; for
2687db96d56Sopenharmony_ciinformation about actually running doctest on these examples, see the following
2697db96d56Sopenharmony_cisections.
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci.. _doctest-which-docstrings:
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ciWhich Docstrings Are Examined?
2757db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ciThe module docstring, and all function, class and method docstrings are
2787db96d56Sopenharmony_cisearched.  Objects imported into the module are not searched.
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ciIn addition, if ``M.__test__`` exists and "is true", it must be a dict, and each
2817db96d56Sopenharmony_cientry maps a (string) name to a function object, class object, or string.
2827db96d56Sopenharmony_ciFunction and class object docstrings found from ``M.__test__`` are searched, and
2837db96d56Sopenharmony_cistrings are treated as if they were docstrings.  In output, a key ``K`` in
2847db96d56Sopenharmony_ci``M.__test__`` appears with name ::
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ci   <name of M>.__test__.K
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ciAny classes found are recursively searched similarly, to test docstrings in
2897db96d56Sopenharmony_citheir contained methods and nested classes.
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_ci.. _doctest-finding-examples:
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ciHow are Docstring Examples Recognized?
2957db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ciIn most cases a copy-and-paste of an interactive console session works fine,
2987db96d56Sopenharmony_cibut doctest isn't trying to do an exact emulation of any specific Python shell.
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci::
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_ci   >>> # comments are ignored
3037db96d56Sopenharmony_ci   >>> x = 12
3047db96d56Sopenharmony_ci   >>> x
3057db96d56Sopenharmony_ci   12
3067db96d56Sopenharmony_ci   >>> if x == 13:
3077db96d56Sopenharmony_ci   ...     print("yes")
3087db96d56Sopenharmony_ci   ... else:
3097db96d56Sopenharmony_ci   ...     print("no")
3107db96d56Sopenharmony_ci   ...     print("NO")
3117db96d56Sopenharmony_ci   ...     print("NO!!!")
3127db96d56Sopenharmony_ci   ...
3137db96d56Sopenharmony_ci   no
3147db96d56Sopenharmony_ci   NO
3157db96d56Sopenharmony_ci   NO!!!
3167db96d56Sopenharmony_ci   >>>
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci.. index::
3197db96d56Sopenharmony_ci   single: >>>; interpreter prompt
3207db96d56Sopenharmony_ci   single: ...; interpreter prompt
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ciAny expected output must immediately follow the final ``'>>> '`` or ``'... '``
3237db96d56Sopenharmony_ciline containing the code, and the expected output (if any) extends to the next
3247db96d56Sopenharmony_ci``'>>> '`` or all-whitespace line.
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ciThe fine print:
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ci* Expected output cannot contain an all-whitespace line, since such a line is
3297db96d56Sopenharmony_ci  taken to signal the end of expected output.  If expected output does contain a
3307db96d56Sopenharmony_ci  blank line, put ``<BLANKLINE>`` in your doctest example each place a blank line
3317db96d56Sopenharmony_ci  is expected.
3327db96d56Sopenharmony_ci
3337db96d56Sopenharmony_ci* All hard tab characters are expanded to spaces, using 8-column tab stops.
3347db96d56Sopenharmony_ci  Tabs in output generated by the tested code are not modified.  Because any
3357db96d56Sopenharmony_ci  hard tabs in the sample output *are* expanded, this means that if the code
3367db96d56Sopenharmony_ci  output includes hard tabs, the only way the doctest can pass is if the
3377db96d56Sopenharmony_ci  :const:`NORMALIZE_WHITESPACE` option or :ref:`directive <doctest-directives>`
3387db96d56Sopenharmony_ci  is in effect.
3397db96d56Sopenharmony_ci  Alternatively, the test can be rewritten to capture the output and compare it
3407db96d56Sopenharmony_ci  to an expected value as part of the test.  This handling of tabs in the
3417db96d56Sopenharmony_ci  source was arrived at through trial and error, and has proven to be the least
3427db96d56Sopenharmony_ci  error prone way of handling them.  It is possible to use a different
3437db96d56Sopenharmony_ci  algorithm for handling tabs by writing a custom :class:`DocTestParser` class.
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ci* Output to stdout is captured, but not output to stderr (exception tracebacks
3467db96d56Sopenharmony_ci  are captured via a different means).
3477db96d56Sopenharmony_ci
3487db96d56Sopenharmony_ci* If you continue a line via backslashing in an interactive session, or for any
3497db96d56Sopenharmony_ci  other reason use a backslash, you should use a raw docstring, which will
3507db96d56Sopenharmony_ci  preserve your backslashes exactly as you type them::
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci     >>> def f(x):
3537db96d56Sopenharmony_ci     ...     r'''Backslashes in a raw docstring: m\n'''
3547db96d56Sopenharmony_ci     >>> print(f.__doc__)
3557db96d56Sopenharmony_ci     Backslashes in a raw docstring: m\n
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci  Otherwise, the backslash will be interpreted as part of the string. For example,
3587db96d56Sopenharmony_ci  the ``\n`` above would be interpreted as a newline character.  Alternatively, you
3597db96d56Sopenharmony_ci  can double each backslash in the doctest version (and not use a raw string)::
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ci     >>> def f(x):
3627db96d56Sopenharmony_ci     ...     '''Backslashes in a raw docstring: m\\n'''
3637db96d56Sopenharmony_ci     >>> print(f.__doc__)
3647db96d56Sopenharmony_ci     Backslashes in a raw docstring: m\n
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci* The starting column doesn't matter::
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci     >>> assert "Easy!"
3697db96d56Sopenharmony_ci           >>> import math
3707db96d56Sopenharmony_ci               >>> math.floor(1.9)
3717db96d56Sopenharmony_ci               1
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ci  and as many leading whitespace characters are stripped from the expected output
3747db96d56Sopenharmony_ci  as appeared in the initial ``'>>> '`` line that started the example.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci.. _doctest-execution-context:
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ciWhat's the Execution Context?
3807db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ciBy default, each time :mod:`doctest` finds a docstring to test, it uses a
3837db96d56Sopenharmony_ci*shallow copy* of :mod:`M`'s globals, so that running tests doesn't change the
3847db96d56Sopenharmony_cimodule's real globals, and so that one test in :mod:`M` can't leave behind
3857db96d56Sopenharmony_cicrumbs that accidentally allow another test to work.  This means examples can
3867db96d56Sopenharmony_cifreely use any names defined at top-level in :mod:`M`, and names defined earlier
3877db96d56Sopenharmony_ciin the docstring being run. Examples cannot see names defined in other
3887db96d56Sopenharmony_cidocstrings.
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ciYou can force use of your own dict as the execution context by passing
3917db96d56Sopenharmony_ci``globs=your_dict`` to :func:`testmod` or :func:`testfile` instead.
3927db96d56Sopenharmony_ci
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci.. _doctest-exceptions:
3957db96d56Sopenharmony_ci
3967db96d56Sopenharmony_ciWhat About Exceptions?
3977db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^
3987db96d56Sopenharmony_ci
3997db96d56Sopenharmony_ciNo problem, provided that the traceback is the only output produced by the
4007db96d56Sopenharmony_ciexample:  just paste in the traceback. [#]_ Since tracebacks contain details
4017db96d56Sopenharmony_cithat are likely to change rapidly (for example, exact file paths and line
4027db96d56Sopenharmony_cinumbers), this is one case where doctest works hard to be flexible in what it
4037db96d56Sopenharmony_ciaccepts.
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ciSimple example::
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   >>> [1, 2, 3].remove(42)
4087db96d56Sopenharmony_ci   Traceback (most recent call last):
4097db96d56Sopenharmony_ci     File "<stdin>", line 1, in <module>
4107db96d56Sopenharmony_ci   ValueError: list.remove(x): x not in list
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ciThat doctest succeeds if :exc:`ValueError` is raised, with the ``list.remove(x):
4137db96d56Sopenharmony_cix not in list`` detail as shown.
4147db96d56Sopenharmony_ci
4157db96d56Sopenharmony_ciThe expected output for an exception must start with a traceback header, which
4167db96d56Sopenharmony_cimay be either of the following two lines, indented the same as the first line of
4177db96d56Sopenharmony_cithe example::
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_ci   Traceback (most recent call last):
4207db96d56Sopenharmony_ci   Traceback (innermost last):
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ciThe traceback header is followed by an optional traceback stack, whose contents
4237db96d56Sopenharmony_ciare ignored by doctest.  The traceback stack is typically omitted, or copied
4247db96d56Sopenharmony_civerbatim from an interactive session.
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ciThe traceback stack is followed by the most interesting part: the line(s)
4277db96d56Sopenharmony_cicontaining the exception type and detail.  This is usually the last line of a
4287db96d56Sopenharmony_citraceback, but can extend across multiple lines if the exception has a
4297db96d56Sopenharmony_cimulti-line detail::
4307db96d56Sopenharmony_ci
4317db96d56Sopenharmony_ci   >>> raise ValueError('multi\n    line\ndetail')
4327db96d56Sopenharmony_ci   Traceback (most recent call last):
4337db96d56Sopenharmony_ci     File "<stdin>", line 1, in <module>
4347db96d56Sopenharmony_ci   ValueError: multi
4357db96d56Sopenharmony_ci       line
4367db96d56Sopenharmony_ci   detail
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_ciThe last three lines (starting with :exc:`ValueError`) are compared against the
4397db96d56Sopenharmony_ciexception's type and detail, and the rest are ignored.
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ciBest practice is to omit the traceback stack, unless it adds significant
4427db96d56Sopenharmony_cidocumentation value to the example.  So the last example is probably better as::
4437db96d56Sopenharmony_ci
4447db96d56Sopenharmony_ci   >>> raise ValueError('multi\n    line\ndetail')
4457db96d56Sopenharmony_ci   Traceback (most recent call last):
4467db96d56Sopenharmony_ci       ...
4477db96d56Sopenharmony_ci   ValueError: multi
4487db96d56Sopenharmony_ci       line
4497db96d56Sopenharmony_ci   detail
4507db96d56Sopenharmony_ci
4517db96d56Sopenharmony_ciNote that tracebacks are treated very specially.  In particular, in the
4527db96d56Sopenharmony_cirewritten example, the use of ``...`` is independent of doctest's
4537db96d56Sopenharmony_ci:const:`ELLIPSIS` option.  The ellipsis in that example could be left out, or
4547db96d56Sopenharmony_cicould just as well be three (or three hundred) commas or digits, or an indented
4557db96d56Sopenharmony_citranscript of a Monty Python skit.
4567db96d56Sopenharmony_ci
4577db96d56Sopenharmony_ciSome details you should read once, but won't need to remember:
4587db96d56Sopenharmony_ci
4597db96d56Sopenharmony_ci* Doctest can't guess whether your expected output came from an exception
4607db96d56Sopenharmony_ci  traceback or from ordinary printing.  So, e.g., an example that expects
4617db96d56Sopenharmony_ci  ``ValueError: 42 is prime`` will pass whether :exc:`ValueError` is actually
4627db96d56Sopenharmony_ci  raised or if the example merely prints that traceback text.  In practice,
4637db96d56Sopenharmony_ci  ordinary output rarely begins with a traceback header line, so this doesn't
4647db96d56Sopenharmony_ci  create real problems.
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci* Each line of the traceback stack (if present) must be indented further than
4677db96d56Sopenharmony_ci  the first line of the example, *or* start with a non-alphanumeric character.
4687db96d56Sopenharmony_ci  The first line following the traceback header indented the same and starting
4697db96d56Sopenharmony_ci  with an alphanumeric is taken to be the start of the exception detail.  Of
4707db96d56Sopenharmony_ci  course this does the right thing for genuine tracebacks.
4717db96d56Sopenharmony_ci
4727db96d56Sopenharmony_ci* When the :const:`IGNORE_EXCEPTION_DETAIL` doctest option is specified,
4737db96d56Sopenharmony_ci  everything following the leftmost colon and any module information in the
4747db96d56Sopenharmony_ci  exception name is ignored.
4757db96d56Sopenharmony_ci
4767db96d56Sopenharmony_ci* The interactive shell omits the traceback header line for some
4777db96d56Sopenharmony_ci  :exc:`SyntaxError`\ s.  But doctest uses the traceback header line to
4787db96d56Sopenharmony_ci  distinguish exceptions from non-exceptions.  So in the rare case where you need
4797db96d56Sopenharmony_ci  to test a :exc:`SyntaxError` that omits the traceback header, you will need to
4807db96d56Sopenharmony_ci  manually add the traceback header line to your test example.
4817db96d56Sopenharmony_ci
4827db96d56Sopenharmony_ci.. index:: single: ^ (caret); marker
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci* For some exceptions, Python displays the position of the error using ``^``
4857db96d56Sopenharmony_ci  markers and tildes::
4867db96d56Sopenharmony_ci
4877db96d56Sopenharmony_ci     >>> 1 + None
4887db96d56Sopenharmony_ci       File "<stdin>", line 1
4897db96d56Sopenharmony_ci         1 + None
4907db96d56Sopenharmony_ci         ~~^~~~~~
4917db96d56Sopenharmony_ci     TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ci  Since the lines showing the position of the error come before the exception type
4947db96d56Sopenharmony_ci  and detail, they are not checked by doctest.  For example, the following test
4957db96d56Sopenharmony_ci  would pass, even though it puts the ``^`` marker in the wrong location::
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci     >>> 1 + None
4987db96d56Sopenharmony_ci       File "<stdin>", line 1
4997db96d56Sopenharmony_ci         1 + None
5007db96d56Sopenharmony_ci         ^~~~~~~~
5017db96d56Sopenharmony_ci     TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci
5047db96d56Sopenharmony_ci.. _option-flags-and-directives:
5057db96d56Sopenharmony_ci.. _doctest-options:
5067db96d56Sopenharmony_ci
5077db96d56Sopenharmony_ciOption Flags
5087db96d56Sopenharmony_ci^^^^^^^^^^^^
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_ciA number of option flags control various aspects of doctest's behavior.
5117db96d56Sopenharmony_ciSymbolic names for the flags are supplied as module constants, which can be
5127db96d56Sopenharmony_ci:ref:`bitwise ORed <bitwise>` together and passed to various functions.
5137db96d56Sopenharmony_ciThe names can also be used in :ref:`doctest directives <doctest-directives>`,
5147db96d56Sopenharmony_ciand may be passed to the doctest command line interface via the ``-o`` option.
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_ci.. versionadded:: 3.4
5177db96d56Sopenharmony_ci   The ``-o`` command line option.
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ciThe first group of options define test semantics, controlling aspects of how
5207db96d56Sopenharmony_cidoctest decides whether actual output matches an example's expected output:
5217db96d56Sopenharmony_ci
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci.. data:: DONT_ACCEPT_TRUE_FOR_1
5247db96d56Sopenharmony_ci
5257db96d56Sopenharmony_ci   By default, if an expected output block contains just ``1``, an actual output
5267db96d56Sopenharmony_ci   block containing just ``1`` or just ``True`` is considered to be a match, and
5277db96d56Sopenharmony_ci   similarly for ``0`` versus ``False``.  When :const:`DONT_ACCEPT_TRUE_FOR_1` is
5287db96d56Sopenharmony_ci   specified, neither substitution is allowed.  The default behavior caters to that
5297db96d56Sopenharmony_ci   Python changed the return type of many functions from integer to boolean;
5307db96d56Sopenharmony_ci   doctests expecting "little integer" output still work in these cases.  This
5317db96d56Sopenharmony_ci   option will probably go away, but not for several years.
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci
5347db96d56Sopenharmony_ci.. index:: single: <BLANKLINE>
5357db96d56Sopenharmony_ci.. data:: DONT_ACCEPT_BLANKLINE
5367db96d56Sopenharmony_ci
5377db96d56Sopenharmony_ci   By default, if an expected output block contains a line containing only the
5387db96d56Sopenharmony_ci   string ``<BLANKLINE>``, then that line will match a blank line in the actual
5397db96d56Sopenharmony_ci   output.  Because a genuinely blank line delimits the expected output, this is
5407db96d56Sopenharmony_ci   the only way to communicate that a blank line is expected.  When
5417db96d56Sopenharmony_ci   :const:`DONT_ACCEPT_BLANKLINE` is specified, this substitution is not allowed.
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci
5447db96d56Sopenharmony_ci.. data:: NORMALIZE_WHITESPACE
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ci   When specified, all sequences of whitespace (blanks and newlines) are treated as
5477db96d56Sopenharmony_ci   equal.  Any sequence of whitespace within the expected output will match any
5487db96d56Sopenharmony_ci   sequence of whitespace within the actual output. By default, whitespace must
5497db96d56Sopenharmony_ci   match exactly. :const:`NORMALIZE_WHITESPACE` is especially useful when a line of
5507db96d56Sopenharmony_ci   expected output is very long, and you want to wrap it across multiple lines in
5517db96d56Sopenharmony_ci   your source.
5527db96d56Sopenharmony_ci
5537db96d56Sopenharmony_ci
5547db96d56Sopenharmony_ci.. index:: single: ...; in doctests
5557db96d56Sopenharmony_ci.. data:: ELLIPSIS
5567db96d56Sopenharmony_ci
5577db96d56Sopenharmony_ci   When specified, an ellipsis marker (``...``) in the expected output can match
5587db96d56Sopenharmony_ci   any substring in the actual output.  This includes substrings that span line
5597db96d56Sopenharmony_ci   boundaries, and empty substrings, so it's best to keep usage of this simple.
5607db96d56Sopenharmony_ci   Complicated uses can lead to the same kinds of "oops, it matched too much!"
5617db96d56Sopenharmony_ci   surprises that ``.*`` is prone to in regular expressions.
5627db96d56Sopenharmony_ci
5637db96d56Sopenharmony_ci
5647db96d56Sopenharmony_ci.. data:: IGNORE_EXCEPTION_DETAIL
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci   When specified, doctests expecting exceptions pass so long as an exception
5677db96d56Sopenharmony_ci   of the expected type is raised, even if the details
5687db96d56Sopenharmony_ci   (message and fully qualified exception name) don't match.
5697db96d56Sopenharmony_ci
5707db96d56Sopenharmony_ci   For example, an example expecting ``ValueError: 42`` will pass if the actual
5717db96d56Sopenharmony_ci   exception raised is ``ValueError: 3*14``, but will fail if, say, a
5727db96d56Sopenharmony_ci   :exc:`TypeError` is raised instead.
5737db96d56Sopenharmony_ci   It will also ignore any fully qualified name included before the
5747db96d56Sopenharmony_ci   exception class, which can vary between implementations and versions
5757db96d56Sopenharmony_ci   of Python and the code/libraries in use.
5767db96d56Sopenharmony_ci   Hence, all three of these variations will work with the flag specified:
5777db96d56Sopenharmony_ci
5787db96d56Sopenharmony_ci   .. code-block:: pycon
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci      >>> raise Exception('message')
5817db96d56Sopenharmony_ci      Traceback (most recent call last):
5827db96d56Sopenharmony_ci      Exception: message
5837db96d56Sopenharmony_ci
5847db96d56Sopenharmony_ci      >>> raise Exception('message')
5857db96d56Sopenharmony_ci      Traceback (most recent call last):
5867db96d56Sopenharmony_ci      builtins.Exception: message
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci      >>> raise Exception('message')
5897db96d56Sopenharmony_ci      Traceback (most recent call last):
5907db96d56Sopenharmony_ci      __main__.Exception: message
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ci   Note that :const:`ELLIPSIS` can also be used to ignore the
5937db96d56Sopenharmony_ci   details of the exception message, but such a test may still fail based
5947db96d56Sopenharmony_ci   on whether the module name is present or matches exactly.
5957db96d56Sopenharmony_ci
5967db96d56Sopenharmony_ci   .. versionchanged:: 3.2
5977db96d56Sopenharmony_ci      :const:`IGNORE_EXCEPTION_DETAIL` now also ignores any information relating
5987db96d56Sopenharmony_ci      to the module containing the exception under test.
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci
6017db96d56Sopenharmony_ci.. data:: SKIP
6027db96d56Sopenharmony_ci
6037db96d56Sopenharmony_ci   When specified, do not run the example at all.  This can be useful in contexts
6047db96d56Sopenharmony_ci   where doctest examples serve as both documentation and test cases, and an
6057db96d56Sopenharmony_ci   example should be included for documentation purposes, but should not be
6067db96d56Sopenharmony_ci   checked.  E.g., the example's output might be random; or the example might
6077db96d56Sopenharmony_ci   depend on resources which would be unavailable to the test driver.
6087db96d56Sopenharmony_ci
6097db96d56Sopenharmony_ci   The SKIP flag can also be used for temporarily "commenting out" examples.
6107db96d56Sopenharmony_ci
6117db96d56Sopenharmony_ci
6127db96d56Sopenharmony_ci.. data:: COMPARISON_FLAGS
6137db96d56Sopenharmony_ci
6147db96d56Sopenharmony_ci   A bitmask or'ing together all the comparison flags above.
6157db96d56Sopenharmony_ci
6167db96d56Sopenharmony_ciThe second group of options controls how test failures are reported:
6177db96d56Sopenharmony_ci
6187db96d56Sopenharmony_ci
6197db96d56Sopenharmony_ci.. data:: REPORT_UDIFF
6207db96d56Sopenharmony_ci
6217db96d56Sopenharmony_ci   When specified, failures that involve multi-line expected and actual outputs are
6227db96d56Sopenharmony_ci   displayed using a unified diff.
6237db96d56Sopenharmony_ci
6247db96d56Sopenharmony_ci
6257db96d56Sopenharmony_ci.. data:: REPORT_CDIFF
6267db96d56Sopenharmony_ci
6277db96d56Sopenharmony_ci   When specified, failures that involve multi-line expected and actual outputs
6287db96d56Sopenharmony_ci   will be displayed using a context diff.
6297db96d56Sopenharmony_ci
6307db96d56Sopenharmony_ci
6317db96d56Sopenharmony_ci.. data:: REPORT_NDIFF
6327db96d56Sopenharmony_ci
6337db96d56Sopenharmony_ci   When specified, differences are computed by ``difflib.Differ``, using the same
6347db96d56Sopenharmony_ci   algorithm as the popular :file:`ndiff.py` utility. This is the only method that
6357db96d56Sopenharmony_ci   marks differences within lines as well as across lines.  For example, if a line
6367db96d56Sopenharmony_ci   of expected output contains digit ``1`` where actual output contains letter
6377db96d56Sopenharmony_ci   ``l``, a line is inserted with a caret marking the mismatching column positions.
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ci
6407db96d56Sopenharmony_ci.. data:: REPORT_ONLY_FIRST_FAILURE
6417db96d56Sopenharmony_ci
6427db96d56Sopenharmony_ci   When specified, display the first failing example in each doctest, but suppress
6437db96d56Sopenharmony_ci   output for all remaining examples.  This will prevent doctest from reporting
6447db96d56Sopenharmony_ci   correct examples that break because of earlier failures; but it might also hide
6457db96d56Sopenharmony_ci   incorrect examples that fail independently of the first failure.  When
6467db96d56Sopenharmony_ci   :const:`REPORT_ONLY_FIRST_FAILURE` is specified, the remaining examples are
6477db96d56Sopenharmony_ci   still run, and still count towards the total number of failures reported; only
6487db96d56Sopenharmony_ci   the output is suppressed.
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci
6517db96d56Sopenharmony_ci.. data:: FAIL_FAST
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci   When specified, exit after the first failing example and don't attempt to run
6547db96d56Sopenharmony_ci   the remaining examples. Thus, the number of failures reported will be at most
6557db96d56Sopenharmony_ci   1.  This flag may be useful during debugging, since examples after the first
6567db96d56Sopenharmony_ci   failure won't even produce debugging output.
6577db96d56Sopenharmony_ci
6587db96d56Sopenharmony_ci   The doctest command line accepts the option ``-f`` as a shorthand for ``-o
6597db96d56Sopenharmony_ci   FAIL_FAST``.
6607db96d56Sopenharmony_ci
6617db96d56Sopenharmony_ci   .. versionadded:: 3.4
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_ci
6647db96d56Sopenharmony_ci.. data:: REPORTING_FLAGS
6657db96d56Sopenharmony_ci
6667db96d56Sopenharmony_ci   A bitmask or'ing together all the reporting flags above.
6677db96d56Sopenharmony_ci
6687db96d56Sopenharmony_ci
6697db96d56Sopenharmony_ciThere is also a way to register new option flag names, though this isn't
6707db96d56Sopenharmony_ciuseful unless you intend to extend :mod:`doctest` internals via subclassing:
6717db96d56Sopenharmony_ci
6727db96d56Sopenharmony_ci
6737db96d56Sopenharmony_ci.. function:: register_optionflag(name)
6747db96d56Sopenharmony_ci
6757db96d56Sopenharmony_ci   Create a new option flag with a given name, and return the new flag's integer
6767db96d56Sopenharmony_ci   value.  :func:`register_optionflag` can be used when subclassing
6777db96d56Sopenharmony_ci   :class:`OutputChecker` or :class:`DocTestRunner` to create new options that are
6787db96d56Sopenharmony_ci   supported by your subclasses.  :func:`register_optionflag` should always be
6797db96d56Sopenharmony_ci   called using the following idiom::
6807db96d56Sopenharmony_ci
6817db96d56Sopenharmony_ci      MY_FLAG = register_optionflag('MY_FLAG')
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci
6847db96d56Sopenharmony_ci.. index::
6857db96d56Sopenharmony_ci   single: # (hash); in doctests
6867db96d56Sopenharmony_ci   single: + (plus); in doctests
6877db96d56Sopenharmony_ci   single: - (minus); in doctests
6887db96d56Sopenharmony_ci.. _doctest-directives:
6897db96d56Sopenharmony_ci
6907db96d56Sopenharmony_ciDirectives
6917db96d56Sopenharmony_ci^^^^^^^^^^
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ciDoctest directives may be used to modify the :ref:`option flags
6947db96d56Sopenharmony_ci<doctest-options>` for an individual example.  Doctest directives are
6957db96d56Sopenharmony_cispecial Python comments following an example's source code:
6967db96d56Sopenharmony_ci
6977db96d56Sopenharmony_ci.. productionlist:: doctest
6987db96d56Sopenharmony_ci   directive: "#" "doctest:" `directive_options`
6997db96d56Sopenharmony_ci   directive_options: `directive_option` ("," `directive_option`)*
7007db96d56Sopenharmony_ci   directive_option: `on_or_off` `directive_option_name`
7017db96d56Sopenharmony_ci   on_or_off: "+" | "-"
7027db96d56Sopenharmony_ci   directive_option_name: "DONT_ACCEPT_BLANKLINE" | "NORMALIZE_WHITESPACE" | ...
7037db96d56Sopenharmony_ci
7047db96d56Sopenharmony_ciWhitespace is not allowed between the ``+`` or ``-`` and the directive option
7057db96d56Sopenharmony_ciname.  The directive option name can be any of the option flag names explained
7067db96d56Sopenharmony_ciabove.
7077db96d56Sopenharmony_ci
7087db96d56Sopenharmony_ciAn example's doctest directives modify doctest's behavior for that single
7097db96d56Sopenharmony_ciexample.  Use ``+`` to enable the named behavior, or ``-`` to disable it.
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ciFor example, this test passes:
7127db96d56Sopenharmony_ci
7137db96d56Sopenharmony_ci.. doctest::
7147db96d56Sopenharmony_ci   :no-trim-doctest-flags:
7157db96d56Sopenharmony_ci
7167db96d56Sopenharmony_ci   >>> print(list(range(20)))  # doctest: +NORMALIZE_WHITESPACE
7177db96d56Sopenharmony_ci   [0,   1,  2,  3,  4,  5,  6,  7,  8,  9,
7187db96d56Sopenharmony_ci   10,  11, 12, 13, 14, 15, 16, 17, 18, 19]
7197db96d56Sopenharmony_ci
7207db96d56Sopenharmony_ciWithout the directive it would fail, both because the actual output doesn't have
7217db96d56Sopenharmony_citwo blanks before the single-digit list elements, and because the actual output
7227db96d56Sopenharmony_ciis on a single line.  This test also passes, and also requires a directive to do
7237db96d56Sopenharmony_ciso:
7247db96d56Sopenharmony_ci
7257db96d56Sopenharmony_ci.. doctest::
7267db96d56Sopenharmony_ci   :no-trim-doctest-flags:
7277db96d56Sopenharmony_ci
7287db96d56Sopenharmony_ci   >>> print(list(range(20)))  # doctest: +ELLIPSIS
7297db96d56Sopenharmony_ci   [0, 1, ..., 18, 19]
7307db96d56Sopenharmony_ci
7317db96d56Sopenharmony_ciMultiple directives can be used on a single physical line, separated by
7327db96d56Sopenharmony_cicommas:
7337db96d56Sopenharmony_ci
7347db96d56Sopenharmony_ci.. doctest::
7357db96d56Sopenharmony_ci   :no-trim-doctest-flags:
7367db96d56Sopenharmony_ci
7377db96d56Sopenharmony_ci   >>> print(list(range(20)))  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
7387db96d56Sopenharmony_ci   [0,    1, ...,   18,    19]
7397db96d56Sopenharmony_ci
7407db96d56Sopenharmony_ciIf multiple directive comments are used for a single example, then they are
7417db96d56Sopenharmony_cicombined:
7427db96d56Sopenharmony_ci
7437db96d56Sopenharmony_ci.. doctest::
7447db96d56Sopenharmony_ci   :no-trim-doctest-flags:
7457db96d56Sopenharmony_ci
7467db96d56Sopenharmony_ci   >>> print(list(range(20)))  # doctest: +ELLIPSIS
7477db96d56Sopenharmony_ci   ...                         # doctest: +NORMALIZE_WHITESPACE
7487db96d56Sopenharmony_ci   [0,    1, ...,   18,    19]
7497db96d56Sopenharmony_ci
7507db96d56Sopenharmony_ciAs the previous example shows, you can add ``...`` lines to your example
7517db96d56Sopenharmony_cicontaining only directives.  This can be useful when an example is too long for
7527db96d56Sopenharmony_cia directive to comfortably fit on the same line:
7537db96d56Sopenharmony_ci
7547db96d56Sopenharmony_ci.. doctest::
7557db96d56Sopenharmony_ci   :no-trim-doctest-flags:
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci   >>> print(list(range(5)) + list(range(10, 20)) + list(range(30, 40)))
7587db96d56Sopenharmony_ci   ... # doctest: +ELLIPSIS
7597db96d56Sopenharmony_ci   [0, ..., 4, 10, ..., 19, 30, ..., 39]
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ciNote that since all options are disabled by default, and directives apply only
7627db96d56Sopenharmony_cito the example they appear in, enabling options (via ``+`` in a directive) is
7637db96d56Sopenharmony_ciusually the only meaningful choice.  However, option flags can also be passed to
7647db96d56Sopenharmony_cifunctions that run doctests, establishing different defaults.  In such cases,
7657db96d56Sopenharmony_cidisabling an option via ``-`` in a directive can be useful.
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci
7687db96d56Sopenharmony_ci.. _doctest-warnings:
7697db96d56Sopenharmony_ci
7707db96d56Sopenharmony_ciWarnings
7717db96d56Sopenharmony_ci^^^^^^^^
7727db96d56Sopenharmony_ci
7737db96d56Sopenharmony_ci:mod:`doctest` is serious about requiring exact matches in expected output.  If
7747db96d56Sopenharmony_cieven a single character doesn't match, the test fails.  This will probably
7757db96d56Sopenharmony_cisurprise you a few times, as you learn exactly what Python does and doesn't
7767db96d56Sopenharmony_ciguarantee about output.  For example, when printing a set, Python doesn't
7777db96d56Sopenharmony_ciguarantee that the element is printed in any particular order, so a test like ::
7787db96d56Sopenharmony_ci
7797db96d56Sopenharmony_ci   >>> foo()
7807db96d56Sopenharmony_ci   {"Hermione", "Harry"}
7817db96d56Sopenharmony_ci
7827db96d56Sopenharmony_ciis vulnerable!  One workaround is to do ::
7837db96d56Sopenharmony_ci
7847db96d56Sopenharmony_ci   >>> foo() == {"Hermione", "Harry"}
7857db96d56Sopenharmony_ci   True
7867db96d56Sopenharmony_ci
7877db96d56Sopenharmony_ciinstead.  Another is to do ::
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci   >>> d = sorted(foo())
7907db96d56Sopenharmony_ci   >>> d
7917db96d56Sopenharmony_ci   ['Harry', 'Hermione']
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_ciThere are others, but you get the idea.
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ciAnother bad idea is to print things that embed an object address, like
7967db96d56Sopenharmony_ci
7977db96d56Sopenharmony_ci.. doctest::
7987db96d56Sopenharmony_ci
7997db96d56Sopenharmony_ci   >>> id(1.0)  # certain to fail some of the time  # doctest: +SKIP
8007db96d56Sopenharmony_ci   7948648
8017db96d56Sopenharmony_ci   >>> class C: pass
8027db96d56Sopenharmony_ci   >>> C()  # the default repr() for instances embeds an address   # doctest: +SKIP
8037db96d56Sopenharmony_ci   <C object at 0x00AC18F0>
8047db96d56Sopenharmony_ci
8057db96d56Sopenharmony_ciThe :const:`ELLIPSIS` directive gives a nice approach for the last example:
8067db96d56Sopenharmony_ci
8077db96d56Sopenharmony_ci.. doctest::
8087db96d56Sopenharmony_ci   :no-trim-doctest-flags:
8097db96d56Sopenharmony_ci
8107db96d56Sopenharmony_ci   >>> C()  # doctest: +ELLIPSIS
8117db96d56Sopenharmony_ci   <C object at 0x...>
8127db96d56Sopenharmony_ci
8137db96d56Sopenharmony_ciFloating-point numbers are also subject to small output variations across
8147db96d56Sopenharmony_ciplatforms, because Python defers to the platform C library for float formatting,
8157db96d56Sopenharmony_ciand C libraries vary widely in quality here. ::
8167db96d56Sopenharmony_ci
8177db96d56Sopenharmony_ci   >>> 1./7  # risky
8187db96d56Sopenharmony_ci   0.14285714285714285
8197db96d56Sopenharmony_ci   >>> print(1./7) # safer
8207db96d56Sopenharmony_ci   0.142857142857
8217db96d56Sopenharmony_ci   >>> print(round(1./7, 6)) # much safer
8227db96d56Sopenharmony_ci   0.142857
8237db96d56Sopenharmony_ci
8247db96d56Sopenharmony_ciNumbers of the form ``I/2.**J`` are safe across all platforms, and I often
8257db96d56Sopenharmony_cicontrive doctest examples to produce numbers of that form::
8267db96d56Sopenharmony_ci
8277db96d56Sopenharmony_ci   >>> 3./4  # utterly safe
8287db96d56Sopenharmony_ci   0.75
8297db96d56Sopenharmony_ci
8307db96d56Sopenharmony_ciSimple fractions are also easier for people to understand, and that makes for
8317db96d56Sopenharmony_cibetter documentation.
8327db96d56Sopenharmony_ci
8337db96d56Sopenharmony_ci
8347db96d56Sopenharmony_ci.. _doctest-basic-api:
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_ciBasic API
8377db96d56Sopenharmony_ci---------
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ciThe functions :func:`testmod` and :func:`testfile` provide a simple interface to
8407db96d56Sopenharmony_cidoctest that should be sufficient for most basic uses.  For a less formal
8417db96d56Sopenharmony_ciintroduction to these two functions, see sections :ref:`doctest-simple-testmod`
8427db96d56Sopenharmony_ciand :ref:`doctest-simple-testfile`.
8437db96d56Sopenharmony_ci
8447db96d56Sopenharmony_ci
8457db96d56Sopenharmony_ci.. function:: testfile(filename, module_relative=True, name=None, package=None, globs=None, verbose=None, report=True, optionflags=0, extraglobs=None, raise_on_error=False, parser=DocTestParser(), encoding=None)
8467db96d56Sopenharmony_ci
8477db96d56Sopenharmony_ci   All arguments except *filename* are optional, and should be specified in keyword
8487db96d56Sopenharmony_ci   form.
8497db96d56Sopenharmony_ci
8507db96d56Sopenharmony_ci   Test examples in the file named *filename*.  Return ``(failure_count,
8517db96d56Sopenharmony_ci   test_count)``.
8527db96d56Sopenharmony_ci
8537db96d56Sopenharmony_ci   Optional argument *module_relative* specifies how the filename should be
8547db96d56Sopenharmony_ci   interpreted:
8557db96d56Sopenharmony_ci
8567db96d56Sopenharmony_ci   * If *module_relative* is ``True`` (the default), then *filename* specifies an
8577db96d56Sopenharmony_ci     OS-independent module-relative path.  By default, this path is relative to the
8587db96d56Sopenharmony_ci     calling module's directory; but if the *package* argument is specified, then it
8597db96d56Sopenharmony_ci     is relative to that package.  To ensure OS-independence, *filename* should use
8607db96d56Sopenharmony_ci     ``/`` characters to separate path segments, and may not be an absolute path
8617db96d56Sopenharmony_ci     (i.e., it may not begin with ``/``).
8627db96d56Sopenharmony_ci
8637db96d56Sopenharmony_ci   * If *module_relative* is ``False``, then *filename* specifies an OS-specific
8647db96d56Sopenharmony_ci     path.  The path may be absolute or relative; relative paths are resolved with
8657db96d56Sopenharmony_ci     respect to the current working directory.
8667db96d56Sopenharmony_ci
8677db96d56Sopenharmony_ci   Optional argument *name* gives the name of the test; by default, or if ``None``,
8687db96d56Sopenharmony_ci   ``os.path.basename(filename)`` is used.
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ci   Optional argument *package* is a Python package or the name of a Python package
8717db96d56Sopenharmony_ci   whose directory should be used as the base directory for a module-relative
8727db96d56Sopenharmony_ci   filename.  If no package is specified, then the calling module's directory is
8737db96d56Sopenharmony_ci   used as the base directory for module-relative filenames.  It is an error to
8747db96d56Sopenharmony_ci   specify *package* if *module_relative* is ``False``.
8757db96d56Sopenharmony_ci
8767db96d56Sopenharmony_ci   Optional argument *globs* gives a dict to be used as the globals when executing
8777db96d56Sopenharmony_ci   examples.  A new shallow copy of this dict is created for the doctest, so its
8787db96d56Sopenharmony_ci   examples start with a clean slate. By default, or if ``None``, a new empty dict
8797db96d56Sopenharmony_ci   is used.
8807db96d56Sopenharmony_ci
8817db96d56Sopenharmony_ci   Optional argument *extraglobs* gives a dict merged into the globals used to
8827db96d56Sopenharmony_ci   execute examples.  This works like :meth:`dict.update`:  if *globs* and
8837db96d56Sopenharmony_ci   *extraglobs* have a common key, the associated value in *extraglobs* appears in
8847db96d56Sopenharmony_ci   the combined dict.  By default, or if ``None``, no extra globals are used.  This
8857db96d56Sopenharmony_ci   is an advanced feature that allows parameterization of doctests.  For example, a
8867db96d56Sopenharmony_ci   doctest can be written for a base class, using a generic name for the class,
8877db96d56Sopenharmony_ci   then reused to test any number of subclasses by passing an *extraglobs* dict
8887db96d56Sopenharmony_ci   mapping the generic name to the subclass to be tested.
8897db96d56Sopenharmony_ci
8907db96d56Sopenharmony_ci   Optional argument *verbose* prints lots of stuff if true, and prints only
8917db96d56Sopenharmony_ci   failures if false; by default, or if ``None``, it's true if and only if ``'-v'``
8927db96d56Sopenharmony_ci   is in ``sys.argv``.
8937db96d56Sopenharmony_ci
8947db96d56Sopenharmony_ci   Optional argument *report* prints a summary at the end when true, else prints
8957db96d56Sopenharmony_ci   nothing at the end.  In verbose mode, the summary is detailed, else the summary
8967db96d56Sopenharmony_ci   is very brief (in fact, empty if all tests passed).
8977db96d56Sopenharmony_ci
8987db96d56Sopenharmony_ci   Optional argument *optionflags* (default value 0) takes the
8997db96d56Sopenharmony_ci   :ref:`bitwise OR <bitwise>` of option flags.
9007db96d56Sopenharmony_ci   See section :ref:`doctest-options`.
9017db96d56Sopenharmony_ci
9027db96d56Sopenharmony_ci   Optional argument *raise_on_error* defaults to false.  If true, an exception is
9037db96d56Sopenharmony_ci   raised upon the first failure or unexpected exception in an example.  This
9047db96d56Sopenharmony_ci   allows failures to be post-mortem debugged. Default behavior is to continue
9057db96d56Sopenharmony_ci   running examples.
9067db96d56Sopenharmony_ci
9077db96d56Sopenharmony_ci   Optional argument *parser* specifies a :class:`DocTestParser` (or subclass) that
9087db96d56Sopenharmony_ci   should be used to extract tests from the files.  It defaults to a normal parser
9097db96d56Sopenharmony_ci   (i.e., ``DocTestParser()``).
9107db96d56Sopenharmony_ci
9117db96d56Sopenharmony_ci   Optional argument *encoding* specifies an encoding that should be used to
9127db96d56Sopenharmony_ci   convert the file to unicode.
9137db96d56Sopenharmony_ci
9147db96d56Sopenharmony_ci
9157db96d56Sopenharmony_ci.. function:: testmod(m=None, name=None, globs=None, verbose=None, report=True, optionflags=0, extraglobs=None, raise_on_error=False, exclude_empty=False)
9167db96d56Sopenharmony_ci
9177db96d56Sopenharmony_ci   All arguments are optional, and all except for *m* should be specified in
9187db96d56Sopenharmony_ci   keyword form.
9197db96d56Sopenharmony_ci
9207db96d56Sopenharmony_ci   Test examples in docstrings in functions and classes reachable from module *m*
9217db96d56Sopenharmony_ci   (or module :mod:`__main__` if *m* is not supplied or is ``None``), starting with
9227db96d56Sopenharmony_ci   ``m.__doc__``.
9237db96d56Sopenharmony_ci
9247db96d56Sopenharmony_ci   Also test examples reachable from dict ``m.__test__``, if it exists and is not
9257db96d56Sopenharmony_ci   ``None``.  ``m.__test__`` maps names (strings) to functions, classes and
9267db96d56Sopenharmony_ci   strings; function and class docstrings are searched for examples; strings are
9277db96d56Sopenharmony_ci   searched directly, as if they were docstrings.
9287db96d56Sopenharmony_ci
9297db96d56Sopenharmony_ci   Only docstrings attached to objects belonging to module *m* are searched.
9307db96d56Sopenharmony_ci
9317db96d56Sopenharmony_ci   Return ``(failure_count, test_count)``.
9327db96d56Sopenharmony_ci
9337db96d56Sopenharmony_ci   Optional argument *name* gives the name of the module; by default, or if
9347db96d56Sopenharmony_ci   ``None``, ``m.__name__`` is used.
9357db96d56Sopenharmony_ci
9367db96d56Sopenharmony_ci   Optional argument *exclude_empty* defaults to false.  If true, objects for which
9377db96d56Sopenharmony_ci   no doctests are found are excluded from consideration. The default is a backward
9387db96d56Sopenharmony_ci   compatibility hack, so that code still using :meth:`doctest.master.summarize` in
9397db96d56Sopenharmony_ci   conjunction with :func:`testmod` continues to get output for objects with no
9407db96d56Sopenharmony_ci   tests. The *exclude_empty* argument to the newer :class:`DocTestFinder`
9417db96d56Sopenharmony_ci   constructor defaults to true.
9427db96d56Sopenharmony_ci
9437db96d56Sopenharmony_ci   Optional arguments *extraglobs*, *verbose*, *report*, *optionflags*,
9447db96d56Sopenharmony_ci   *raise_on_error*, and *globs* are the same as for function :func:`testfile`
9457db96d56Sopenharmony_ci   above, except that *globs* defaults to ``m.__dict__``.
9467db96d56Sopenharmony_ci
9477db96d56Sopenharmony_ci
9487db96d56Sopenharmony_ci.. function:: run_docstring_examples(f, globs, verbose=False, name="NoName", compileflags=None, optionflags=0)
9497db96d56Sopenharmony_ci
9507db96d56Sopenharmony_ci   Test examples associated with object *f*; for example, *f* may be a string,
9517db96d56Sopenharmony_ci   a module, a function, or a class object.
9527db96d56Sopenharmony_ci
9537db96d56Sopenharmony_ci   A shallow copy of dictionary argument *globs* is used for the execution context.
9547db96d56Sopenharmony_ci
9557db96d56Sopenharmony_ci   Optional argument *name* is used in failure messages, and defaults to
9567db96d56Sopenharmony_ci   ``"NoName"``.
9577db96d56Sopenharmony_ci
9587db96d56Sopenharmony_ci   If optional argument *verbose* is true, output is generated even if there are no
9597db96d56Sopenharmony_ci   failures.  By default, output is generated only in case of an example failure.
9607db96d56Sopenharmony_ci
9617db96d56Sopenharmony_ci   Optional argument *compileflags* gives the set of flags that should be used by
9627db96d56Sopenharmony_ci   the Python compiler when running the examples.  By default, or if ``None``,
9637db96d56Sopenharmony_ci   flags are deduced corresponding to the set of future features found in *globs*.
9647db96d56Sopenharmony_ci
9657db96d56Sopenharmony_ci   Optional argument *optionflags* works as for function :func:`testfile` above.
9667db96d56Sopenharmony_ci
9677db96d56Sopenharmony_ci
9687db96d56Sopenharmony_ci.. _doctest-unittest-api:
9697db96d56Sopenharmony_ci
9707db96d56Sopenharmony_ciUnittest API
9717db96d56Sopenharmony_ci------------
9727db96d56Sopenharmony_ci
9737db96d56Sopenharmony_ciAs your collection of doctest'ed modules grows, you'll want a way to run all
9747db96d56Sopenharmony_citheir doctests systematically.  :mod:`doctest` provides two functions that can
9757db96d56Sopenharmony_cibe used to create :mod:`unittest` test suites from modules and text files
9767db96d56Sopenharmony_cicontaining doctests.  To integrate with :mod:`unittest` test discovery, include
9777db96d56Sopenharmony_cia :func:`load_tests` function in your test module::
9787db96d56Sopenharmony_ci
9797db96d56Sopenharmony_ci   import unittest
9807db96d56Sopenharmony_ci   import doctest
9817db96d56Sopenharmony_ci   import my_module_with_doctests
9827db96d56Sopenharmony_ci
9837db96d56Sopenharmony_ci   def load_tests(loader, tests, ignore):
9847db96d56Sopenharmony_ci       tests.addTests(doctest.DocTestSuite(my_module_with_doctests))
9857db96d56Sopenharmony_ci       return tests
9867db96d56Sopenharmony_ci
9877db96d56Sopenharmony_ciThere are two main functions for creating :class:`unittest.TestSuite` instances
9887db96d56Sopenharmony_cifrom text files and modules with doctests:
9897db96d56Sopenharmony_ci
9907db96d56Sopenharmony_ci
9917db96d56Sopenharmony_ci.. function:: DocFileSuite(*paths, module_relative=True, package=None, setUp=None, tearDown=None, globs=None, optionflags=0, parser=DocTestParser(), encoding=None)
9927db96d56Sopenharmony_ci
9937db96d56Sopenharmony_ci   Convert doctest tests from one or more text files to a
9947db96d56Sopenharmony_ci   :class:`unittest.TestSuite`.
9957db96d56Sopenharmony_ci
9967db96d56Sopenharmony_ci   The returned :class:`unittest.TestSuite` is to be run by the unittest framework
9977db96d56Sopenharmony_ci   and runs the interactive examples in each file.  If an example in any file
9987db96d56Sopenharmony_ci   fails, then the synthesized unit test fails, and a :exc:`failureException`
9997db96d56Sopenharmony_ci   exception is raised showing the name of the file containing the test and a
10007db96d56Sopenharmony_ci   (sometimes approximate) line number.
10017db96d56Sopenharmony_ci
10027db96d56Sopenharmony_ci   Pass one or more paths (as strings) to text files to be examined.
10037db96d56Sopenharmony_ci
10047db96d56Sopenharmony_ci   Options may be provided as keyword arguments:
10057db96d56Sopenharmony_ci
10067db96d56Sopenharmony_ci   Optional argument *module_relative* specifies how the filenames in *paths*
10077db96d56Sopenharmony_ci   should be interpreted:
10087db96d56Sopenharmony_ci
10097db96d56Sopenharmony_ci   * If *module_relative* is ``True`` (the default), then each filename in
10107db96d56Sopenharmony_ci     *paths* specifies an OS-independent module-relative path.  By default, this
10117db96d56Sopenharmony_ci     path is relative to the calling module's directory; but if the *package*
10127db96d56Sopenharmony_ci     argument is specified, then it is relative to that package.  To ensure
10137db96d56Sopenharmony_ci     OS-independence, each filename should use ``/`` characters to separate path
10147db96d56Sopenharmony_ci     segments, and may not be an absolute path (i.e., it may not begin with
10157db96d56Sopenharmony_ci     ``/``).
10167db96d56Sopenharmony_ci
10177db96d56Sopenharmony_ci   * If *module_relative* is ``False``, then each filename in *paths* specifies
10187db96d56Sopenharmony_ci     an OS-specific path.  The path may be absolute or relative; relative paths
10197db96d56Sopenharmony_ci     are resolved with respect to the current working directory.
10207db96d56Sopenharmony_ci
10217db96d56Sopenharmony_ci   Optional argument *package* is a Python package or the name of a Python
10227db96d56Sopenharmony_ci   package whose directory should be used as the base directory for
10237db96d56Sopenharmony_ci   module-relative filenames in *paths*.  If no package is specified, then the
10247db96d56Sopenharmony_ci   calling module's directory is used as the base directory for module-relative
10257db96d56Sopenharmony_ci   filenames.  It is an error to specify *package* if *module_relative* is
10267db96d56Sopenharmony_ci   ``False``.
10277db96d56Sopenharmony_ci
10287db96d56Sopenharmony_ci   Optional argument *setUp* specifies a set-up function for the test suite.
10297db96d56Sopenharmony_ci   This is called before running the tests in each file.  The *setUp* function
10307db96d56Sopenharmony_ci   will be passed a :class:`DocTest` object.  The setUp function can access the
10317db96d56Sopenharmony_ci   test globals as the *globs* attribute of the test passed.
10327db96d56Sopenharmony_ci
10337db96d56Sopenharmony_ci   Optional argument *tearDown* specifies a tear-down function for the test
10347db96d56Sopenharmony_ci   suite.  This is called after running the tests in each file.  The *tearDown*
10357db96d56Sopenharmony_ci   function will be passed a :class:`DocTest` object.  The setUp function can
10367db96d56Sopenharmony_ci   access the test globals as the *globs* attribute of the test passed.
10377db96d56Sopenharmony_ci
10387db96d56Sopenharmony_ci   Optional argument *globs* is a dictionary containing the initial global
10397db96d56Sopenharmony_ci   variables for the tests.  A new copy of this dictionary is created for each
10407db96d56Sopenharmony_ci   test.  By default, *globs* is a new empty dictionary.
10417db96d56Sopenharmony_ci
10427db96d56Sopenharmony_ci   Optional argument *optionflags* specifies the default doctest options for the
10437db96d56Sopenharmony_ci   tests, created by or-ing together individual option flags.  See section
10447db96d56Sopenharmony_ci   :ref:`doctest-options`. See function :func:`set_unittest_reportflags` below
10457db96d56Sopenharmony_ci   for a better way to set reporting options.
10467db96d56Sopenharmony_ci
10477db96d56Sopenharmony_ci   Optional argument *parser* specifies a :class:`DocTestParser` (or subclass)
10487db96d56Sopenharmony_ci   that should be used to extract tests from the files.  It defaults to a normal
10497db96d56Sopenharmony_ci   parser (i.e., ``DocTestParser()``).
10507db96d56Sopenharmony_ci
10517db96d56Sopenharmony_ci   Optional argument *encoding* specifies an encoding that should be used to
10527db96d56Sopenharmony_ci   convert the file to unicode.
10537db96d56Sopenharmony_ci
10547db96d56Sopenharmony_ci   The global ``__file__`` is added to the globals provided to doctests loaded
10557db96d56Sopenharmony_ci   from a text file using :func:`DocFileSuite`.
10567db96d56Sopenharmony_ci
10577db96d56Sopenharmony_ci
10587db96d56Sopenharmony_ci.. function:: DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None, setUp=None, tearDown=None, checker=None)
10597db96d56Sopenharmony_ci
10607db96d56Sopenharmony_ci   Convert doctest tests for a module to a :class:`unittest.TestSuite`.
10617db96d56Sopenharmony_ci
10627db96d56Sopenharmony_ci   The returned :class:`unittest.TestSuite` is to be run by the unittest framework
10637db96d56Sopenharmony_ci   and runs each doctest in the module.  If any of the doctests fail, then the
10647db96d56Sopenharmony_ci   synthesized unit test fails, and a :exc:`failureException` exception is raised
10657db96d56Sopenharmony_ci   showing the name of the file containing the test and a (sometimes approximate)
10667db96d56Sopenharmony_ci   line number.
10677db96d56Sopenharmony_ci
10687db96d56Sopenharmony_ci   Optional argument *module* provides the module to be tested.  It can be a module
10697db96d56Sopenharmony_ci   object or a (possibly dotted) module name.  If not specified, the module calling
10707db96d56Sopenharmony_ci   this function is used.
10717db96d56Sopenharmony_ci
10727db96d56Sopenharmony_ci   Optional argument *globs* is a dictionary containing the initial global
10737db96d56Sopenharmony_ci   variables for the tests.  A new copy of this dictionary is created for each
10747db96d56Sopenharmony_ci   test.  By default, *globs* is a new empty dictionary.
10757db96d56Sopenharmony_ci
10767db96d56Sopenharmony_ci   Optional argument *extraglobs* specifies an extra set of global variables, which
10777db96d56Sopenharmony_ci   is merged into *globs*.  By default, no extra globals are used.
10787db96d56Sopenharmony_ci
10797db96d56Sopenharmony_ci   Optional argument *test_finder* is the :class:`DocTestFinder` object (or a
10807db96d56Sopenharmony_ci   drop-in replacement) that is used to extract doctests from the module.
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_ci   Optional arguments *setUp*, *tearDown*, and *optionflags* are the same as for
10837db96d56Sopenharmony_ci   function :func:`DocFileSuite` above.
10847db96d56Sopenharmony_ci
10857db96d56Sopenharmony_ci   This function uses the same search technique as :func:`testmod`.
10867db96d56Sopenharmony_ci
10877db96d56Sopenharmony_ci   .. versionchanged:: 3.5
10887db96d56Sopenharmony_ci      :func:`DocTestSuite` returns an empty :class:`unittest.TestSuite` if *module*
10897db96d56Sopenharmony_ci      contains no docstrings instead of raising :exc:`ValueError`.
10907db96d56Sopenharmony_ci
10917db96d56Sopenharmony_ci
10927db96d56Sopenharmony_ciUnder the covers, :func:`DocTestSuite` creates a :class:`unittest.TestSuite` out
10937db96d56Sopenharmony_ciof :class:`doctest.DocTestCase` instances, and :class:`DocTestCase` is a
10947db96d56Sopenharmony_cisubclass of :class:`unittest.TestCase`. :class:`DocTestCase` isn't documented
10957db96d56Sopenharmony_cihere (it's an internal detail), but studying its code can answer questions about
10967db96d56Sopenharmony_cithe exact details of :mod:`unittest` integration.
10977db96d56Sopenharmony_ci
10987db96d56Sopenharmony_ciSimilarly, :func:`DocFileSuite` creates a :class:`unittest.TestSuite` out of
10997db96d56Sopenharmony_ci:class:`doctest.DocFileCase` instances, and :class:`DocFileCase` is a subclass
11007db96d56Sopenharmony_ciof :class:`DocTestCase`.
11017db96d56Sopenharmony_ci
11027db96d56Sopenharmony_ciSo both ways of creating a :class:`unittest.TestSuite` run instances of
11037db96d56Sopenharmony_ci:class:`DocTestCase`.  This is important for a subtle reason: when you run
11047db96d56Sopenharmony_ci:mod:`doctest` functions yourself, you can control the :mod:`doctest` options in
11057db96d56Sopenharmony_ciuse directly, by passing option flags to :mod:`doctest` functions.  However, if
11067db96d56Sopenharmony_ciyou're writing a :mod:`unittest` framework, :mod:`unittest` ultimately controls
11077db96d56Sopenharmony_ciwhen and how tests get run.  The framework author typically wants to control
11087db96d56Sopenharmony_ci:mod:`doctest` reporting options (perhaps, e.g., specified by command line
11097db96d56Sopenharmony_cioptions), but there's no way to pass options through :mod:`unittest` to
11107db96d56Sopenharmony_ci:mod:`doctest` test runners.
11117db96d56Sopenharmony_ci
11127db96d56Sopenharmony_ciFor this reason, :mod:`doctest` also supports a notion of :mod:`doctest`
11137db96d56Sopenharmony_cireporting flags specific to :mod:`unittest` support, via this function:
11147db96d56Sopenharmony_ci
11157db96d56Sopenharmony_ci
11167db96d56Sopenharmony_ci.. function:: set_unittest_reportflags(flags)
11177db96d56Sopenharmony_ci
11187db96d56Sopenharmony_ci   Set the :mod:`doctest` reporting flags to use.
11197db96d56Sopenharmony_ci
11207db96d56Sopenharmony_ci   Argument *flags* takes the :ref:`bitwise OR <bitwise>` of option flags.  See
11217db96d56Sopenharmony_ci   section :ref:`doctest-options`.  Only "reporting flags" can be used.
11227db96d56Sopenharmony_ci
11237db96d56Sopenharmony_ci   This is a module-global setting, and affects all future doctests run by module
11247db96d56Sopenharmony_ci   :mod:`unittest`:  the :meth:`runTest` method of :class:`DocTestCase` looks at
11257db96d56Sopenharmony_ci   the option flags specified for the test case when the :class:`DocTestCase`
11267db96d56Sopenharmony_ci   instance was constructed.  If no reporting flags were specified (which is the
11277db96d56Sopenharmony_ci   typical and expected case), :mod:`doctest`'s :mod:`unittest` reporting flags are
11287db96d56Sopenharmony_ci   :ref:`bitwise ORed <bitwise>` into the option flags, and the option flags
11297db96d56Sopenharmony_ci   so augmented are passed to the :class:`DocTestRunner` instance created to
11307db96d56Sopenharmony_ci   run the doctest.  If any reporting flags were specified when the
11317db96d56Sopenharmony_ci   :class:`DocTestCase` instance was constructed, :mod:`doctest`'s
11327db96d56Sopenharmony_ci   :mod:`unittest` reporting flags are ignored.
11337db96d56Sopenharmony_ci
11347db96d56Sopenharmony_ci   The value of the :mod:`unittest` reporting flags in effect before the function
11357db96d56Sopenharmony_ci   was called is returned by the function.
11367db96d56Sopenharmony_ci
11377db96d56Sopenharmony_ci
11387db96d56Sopenharmony_ci.. _doctest-advanced-api:
11397db96d56Sopenharmony_ci
11407db96d56Sopenharmony_ciAdvanced API
11417db96d56Sopenharmony_ci------------
11427db96d56Sopenharmony_ci
11437db96d56Sopenharmony_ciThe basic API is a simple wrapper that's intended to make doctest easy to use.
11447db96d56Sopenharmony_ciIt is fairly flexible, and should meet most users' needs; however, if you
11457db96d56Sopenharmony_cirequire more fine-grained control over testing, or wish to extend doctest's
11467db96d56Sopenharmony_cicapabilities, then you should use the advanced API.
11477db96d56Sopenharmony_ci
11487db96d56Sopenharmony_ciThe advanced API revolves around two container classes, which are used to store
11497db96d56Sopenharmony_cithe interactive examples extracted from doctest cases:
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_ci* :class:`Example`: A single Python :term:`statement`, paired with its expected
11527db96d56Sopenharmony_ci  output.
11537db96d56Sopenharmony_ci
11547db96d56Sopenharmony_ci* :class:`DocTest`: A collection of :class:`Example`\ s, typically extracted
11557db96d56Sopenharmony_ci  from a single docstring or text file.
11567db96d56Sopenharmony_ci
11577db96d56Sopenharmony_ciAdditional processing classes are defined to find, parse, and run, and check
11587db96d56Sopenharmony_cidoctest examples:
11597db96d56Sopenharmony_ci
11607db96d56Sopenharmony_ci* :class:`DocTestFinder`: Finds all docstrings in a given module, and uses a
11617db96d56Sopenharmony_ci  :class:`DocTestParser` to create a :class:`DocTest` from every docstring that
11627db96d56Sopenharmony_ci  contains interactive examples.
11637db96d56Sopenharmony_ci
11647db96d56Sopenharmony_ci* :class:`DocTestParser`: Creates a :class:`DocTest` object from a string (such
11657db96d56Sopenharmony_ci  as an object's docstring).
11667db96d56Sopenharmony_ci
11677db96d56Sopenharmony_ci* :class:`DocTestRunner`: Executes the examples in a :class:`DocTest`, and uses
11687db96d56Sopenharmony_ci  an :class:`OutputChecker` to verify their output.
11697db96d56Sopenharmony_ci
11707db96d56Sopenharmony_ci* :class:`OutputChecker`: Compares the actual output from a doctest example with
11717db96d56Sopenharmony_ci  the expected output, and decides whether they match.
11727db96d56Sopenharmony_ci
11737db96d56Sopenharmony_ciThe relationships among these processing classes are summarized in the following
11747db96d56Sopenharmony_cidiagram::
11757db96d56Sopenharmony_ci
11767db96d56Sopenharmony_ci                               list of:
11777db96d56Sopenharmony_ci   +------+                   +---------+
11787db96d56Sopenharmony_ci   |module| --DocTestFinder-> | DocTest | --DocTestRunner-> results
11797db96d56Sopenharmony_ci   +------+    |        ^     +---------+     |       ^    (printed)
11807db96d56Sopenharmony_ci               |        |     | Example |     |       |
11817db96d56Sopenharmony_ci               v        |     |   ...   |     v       |
11827db96d56Sopenharmony_ci              DocTestParser   | Example |   OutputChecker
11837db96d56Sopenharmony_ci                              +---------+
11847db96d56Sopenharmony_ci
11857db96d56Sopenharmony_ci
11867db96d56Sopenharmony_ci.. _doctest-doctest:
11877db96d56Sopenharmony_ci
11887db96d56Sopenharmony_ciDocTest Objects
11897db96d56Sopenharmony_ci^^^^^^^^^^^^^^^
11907db96d56Sopenharmony_ci
11917db96d56Sopenharmony_ci
11927db96d56Sopenharmony_ci.. class:: DocTest(examples, globs, name, filename, lineno, docstring)
11937db96d56Sopenharmony_ci
11947db96d56Sopenharmony_ci   A collection of doctest examples that should be run in a single namespace.  The
11957db96d56Sopenharmony_ci   constructor arguments are used to initialize the attributes of the same names.
11967db96d56Sopenharmony_ci
11977db96d56Sopenharmony_ci
11987db96d56Sopenharmony_ci   :class:`DocTest` defines the following attributes.  They are initialized by
11997db96d56Sopenharmony_ci   the constructor, and should not be modified directly.
12007db96d56Sopenharmony_ci
12017db96d56Sopenharmony_ci
12027db96d56Sopenharmony_ci   .. attribute:: examples
12037db96d56Sopenharmony_ci
12047db96d56Sopenharmony_ci      A list of :class:`Example` objects encoding the individual interactive Python
12057db96d56Sopenharmony_ci      examples that should be run by this test.
12067db96d56Sopenharmony_ci
12077db96d56Sopenharmony_ci
12087db96d56Sopenharmony_ci   .. attribute:: globs
12097db96d56Sopenharmony_ci
12107db96d56Sopenharmony_ci      The namespace (aka globals) that the examples should be run in. This is a
12117db96d56Sopenharmony_ci      dictionary mapping names to values.  Any changes to the namespace made by the
12127db96d56Sopenharmony_ci      examples (such as binding new variables) will be reflected in :attr:`globs`
12137db96d56Sopenharmony_ci      after the test is run.
12147db96d56Sopenharmony_ci
12157db96d56Sopenharmony_ci
12167db96d56Sopenharmony_ci   .. attribute:: name
12177db96d56Sopenharmony_ci
12187db96d56Sopenharmony_ci      A string name identifying the :class:`DocTest`.  Typically, this is the name
12197db96d56Sopenharmony_ci      of the object or file that the test was extracted from.
12207db96d56Sopenharmony_ci
12217db96d56Sopenharmony_ci
12227db96d56Sopenharmony_ci   .. attribute:: filename
12237db96d56Sopenharmony_ci
12247db96d56Sopenharmony_ci      The name of the file that this :class:`DocTest` was extracted from; or
12257db96d56Sopenharmony_ci      ``None`` if the filename is unknown, or if the :class:`DocTest` was not
12267db96d56Sopenharmony_ci      extracted from a file.
12277db96d56Sopenharmony_ci
12287db96d56Sopenharmony_ci
12297db96d56Sopenharmony_ci   .. attribute:: lineno
12307db96d56Sopenharmony_ci
12317db96d56Sopenharmony_ci      The line number within :attr:`filename` where this :class:`DocTest` begins, or
12327db96d56Sopenharmony_ci      ``None`` if the line number is unavailable.  This line number is zero-based
12337db96d56Sopenharmony_ci      with respect to the beginning of the file.
12347db96d56Sopenharmony_ci
12357db96d56Sopenharmony_ci
12367db96d56Sopenharmony_ci   .. attribute:: docstring
12377db96d56Sopenharmony_ci
12387db96d56Sopenharmony_ci      The string that the test was extracted from, or ``None`` if the string is
12397db96d56Sopenharmony_ci      unavailable, or if the test was not extracted from a string.
12407db96d56Sopenharmony_ci
12417db96d56Sopenharmony_ci
12427db96d56Sopenharmony_ci.. _doctest-example:
12437db96d56Sopenharmony_ci
12447db96d56Sopenharmony_ciExample Objects
12457db96d56Sopenharmony_ci^^^^^^^^^^^^^^^
12467db96d56Sopenharmony_ci
12477db96d56Sopenharmony_ci
12487db96d56Sopenharmony_ci.. class:: Example(source, want, exc_msg=None, lineno=0, indent=0, options=None)
12497db96d56Sopenharmony_ci
12507db96d56Sopenharmony_ci   A single interactive example, consisting of a Python statement and its expected
12517db96d56Sopenharmony_ci   output.  The constructor arguments are used to initialize the attributes of
12527db96d56Sopenharmony_ci   the same names.
12537db96d56Sopenharmony_ci
12547db96d56Sopenharmony_ci
12557db96d56Sopenharmony_ci   :class:`Example` defines the following attributes.  They are initialized by
12567db96d56Sopenharmony_ci   the constructor, and should not be modified directly.
12577db96d56Sopenharmony_ci
12587db96d56Sopenharmony_ci
12597db96d56Sopenharmony_ci   .. attribute:: source
12607db96d56Sopenharmony_ci
12617db96d56Sopenharmony_ci      A string containing the example's source code.  This source code consists of a
12627db96d56Sopenharmony_ci      single Python statement, and always ends with a newline; the constructor adds
12637db96d56Sopenharmony_ci      a newline when necessary.
12647db96d56Sopenharmony_ci
12657db96d56Sopenharmony_ci
12667db96d56Sopenharmony_ci   .. attribute:: want
12677db96d56Sopenharmony_ci
12687db96d56Sopenharmony_ci      The expected output from running the example's source code (either from
12697db96d56Sopenharmony_ci      stdout, or a traceback in case of exception).  :attr:`want` ends with a
12707db96d56Sopenharmony_ci      newline unless no output is expected, in which case it's an empty string.  The
12717db96d56Sopenharmony_ci      constructor adds a newline when necessary.
12727db96d56Sopenharmony_ci
12737db96d56Sopenharmony_ci
12747db96d56Sopenharmony_ci   .. attribute:: exc_msg
12757db96d56Sopenharmony_ci
12767db96d56Sopenharmony_ci      The exception message generated by the example, if the example is expected to
12777db96d56Sopenharmony_ci      generate an exception; or ``None`` if it is not expected to generate an
12787db96d56Sopenharmony_ci      exception.  This exception message is compared against the return value of
12797db96d56Sopenharmony_ci      :func:`traceback.format_exception_only`.  :attr:`exc_msg` ends with a newline
12807db96d56Sopenharmony_ci      unless it's ``None``.  The constructor adds a newline if needed.
12817db96d56Sopenharmony_ci
12827db96d56Sopenharmony_ci
12837db96d56Sopenharmony_ci   .. attribute:: lineno
12847db96d56Sopenharmony_ci
12857db96d56Sopenharmony_ci      The line number within the string containing this example where the example
12867db96d56Sopenharmony_ci      begins.  This line number is zero-based with respect to the beginning of the
12877db96d56Sopenharmony_ci      containing string.
12887db96d56Sopenharmony_ci
12897db96d56Sopenharmony_ci
12907db96d56Sopenharmony_ci   .. attribute:: indent
12917db96d56Sopenharmony_ci
12927db96d56Sopenharmony_ci      The example's indentation in the containing string, i.e., the number of space
12937db96d56Sopenharmony_ci      characters that precede the example's first prompt.
12947db96d56Sopenharmony_ci
12957db96d56Sopenharmony_ci
12967db96d56Sopenharmony_ci   .. attribute:: options
12977db96d56Sopenharmony_ci
12987db96d56Sopenharmony_ci      A dictionary mapping from option flags to ``True`` or ``False``, which is used
12997db96d56Sopenharmony_ci      to override default options for this example.  Any option flags not contained
13007db96d56Sopenharmony_ci      in this dictionary are left at their default value (as specified by the
13017db96d56Sopenharmony_ci      :class:`DocTestRunner`'s :attr:`optionflags`). By default, no options are set.
13027db96d56Sopenharmony_ci
13037db96d56Sopenharmony_ci
13047db96d56Sopenharmony_ci.. _doctest-doctestfinder:
13057db96d56Sopenharmony_ci
13067db96d56Sopenharmony_ciDocTestFinder objects
13077db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^
13087db96d56Sopenharmony_ci
13097db96d56Sopenharmony_ci
13107db96d56Sopenharmony_ci.. class:: DocTestFinder(verbose=False, parser=DocTestParser(), recurse=True, exclude_empty=True)
13117db96d56Sopenharmony_ci
13127db96d56Sopenharmony_ci   A processing class used to extract the :class:`DocTest`\ s that are relevant to
13137db96d56Sopenharmony_ci   a given object, from its docstring and the docstrings of its contained objects.
13147db96d56Sopenharmony_ci   :class:`DocTest`\ s can be extracted from modules, classes, functions,
13157db96d56Sopenharmony_ci   methods, staticmethods, classmethods, and properties.
13167db96d56Sopenharmony_ci
13177db96d56Sopenharmony_ci   The optional argument *verbose* can be used to display the objects searched by
13187db96d56Sopenharmony_ci   the finder.  It defaults to ``False`` (no output).
13197db96d56Sopenharmony_ci
13207db96d56Sopenharmony_ci   The optional argument *parser* specifies the :class:`DocTestParser` object (or a
13217db96d56Sopenharmony_ci   drop-in replacement) that is used to extract doctests from docstrings.
13227db96d56Sopenharmony_ci
13237db96d56Sopenharmony_ci   If the optional argument *recurse* is false, then :meth:`DocTestFinder.find`
13247db96d56Sopenharmony_ci   will only examine the given object, and not any contained objects.
13257db96d56Sopenharmony_ci
13267db96d56Sopenharmony_ci   If the optional argument *exclude_empty* is false, then
13277db96d56Sopenharmony_ci   :meth:`DocTestFinder.find` will include tests for objects with empty docstrings.
13287db96d56Sopenharmony_ci
13297db96d56Sopenharmony_ci
13307db96d56Sopenharmony_ci   :class:`DocTestFinder` defines the following method:
13317db96d56Sopenharmony_ci
13327db96d56Sopenharmony_ci
13337db96d56Sopenharmony_ci   .. method:: find(obj[, name][, module][, globs][, extraglobs])
13347db96d56Sopenharmony_ci
13357db96d56Sopenharmony_ci      Return a list of the :class:`DocTest`\ s that are defined by *obj*'s
13367db96d56Sopenharmony_ci      docstring, or by any of its contained objects' docstrings.
13377db96d56Sopenharmony_ci
13387db96d56Sopenharmony_ci      The optional argument *name* specifies the object's name; this name will be
13397db96d56Sopenharmony_ci      used to construct names for the returned :class:`DocTest`\ s.  If *name* is
13407db96d56Sopenharmony_ci      not specified, then ``obj.__name__`` is used.
13417db96d56Sopenharmony_ci
13427db96d56Sopenharmony_ci      The optional parameter *module* is the module that contains the given object.
13437db96d56Sopenharmony_ci      If the module is not specified or is ``None``, then the test finder will attempt
13447db96d56Sopenharmony_ci      to automatically determine the correct module.  The object's module is used:
13457db96d56Sopenharmony_ci
13467db96d56Sopenharmony_ci      * As a default namespace, if *globs* is not specified.
13477db96d56Sopenharmony_ci
13487db96d56Sopenharmony_ci      * To prevent the DocTestFinder from extracting DocTests from objects that are
13497db96d56Sopenharmony_ci        imported from other modules.  (Contained objects with modules other than
13507db96d56Sopenharmony_ci        *module* are ignored.)
13517db96d56Sopenharmony_ci
13527db96d56Sopenharmony_ci      * To find the name of the file containing the object.
13537db96d56Sopenharmony_ci
13547db96d56Sopenharmony_ci      * To help find the line number of the object within its file.
13557db96d56Sopenharmony_ci
13567db96d56Sopenharmony_ci      If *module* is ``False``, no attempt to find the module will be made.  This is
13577db96d56Sopenharmony_ci      obscure, of use mostly in testing doctest itself: if *module* is ``False``, or
13587db96d56Sopenharmony_ci      is ``None`` but cannot be found automatically, then all objects are considered
13597db96d56Sopenharmony_ci      to belong to the (non-existent) module, so all contained objects will
13607db96d56Sopenharmony_ci      (recursively) be searched for doctests.
13617db96d56Sopenharmony_ci
13627db96d56Sopenharmony_ci      The globals for each :class:`DocTest` is formed by combining *globs* and
13637db96d56Sopenharmony_ci      *extraglobs* (bindings in *extraglobs* override bindings in *globs*).  A new
13647db96d56Sopenharmony_ci      shallow copy of the globals dictionary is created for each :class:`DocTest`.
13657db96d56Sopenharmony_ci      If *globs* is not specified, then it defaults to the module's *__dict__*, if
13667db96d56Sopenharmony_ci      specified, or ``{}`` otherwise.  If *extraglobs* is not specified, then it
13677db96d56Sopenharmony_ci      defaults to ``{}``.
13687db96d56Sopenharmony_ci
13697db96d56Sopenharmony_ci
13707db96d56Sopenharmony_ci.. _doctest-doctestparser:
13717db96d56Sopenharmony_ci
13727db96d56Sopenharmony_ciDocTestParser objects
13737db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^
13747db96d56Sopenharmony_ci
13757db96d56Sopenharmony_ci
13767db96d56Sopenharmony_ci.. class:: DocTestParser()
13777db96d56Sopenharmony_ci
13787db96d56Sopenharmony_ci   A processing class used to extract interactive examples from a string, and use
13797db96d56Sopenharmony_ci   them to create a :class:`DocTest` object.
13807db96d56Sopenharmony_ci
13817db96d56Sopenharmony_ci
13827db96d56Sopenharmony_ci   :class:`DocTestParser` defines the following methods:
13837db96d56Sopenharmony_ci
13847db96d56Sopenharmony_ci
13857db96d56Sopenharmony_ci   .. method:: get_doctest(string, globs, name, filename, lineno)
13867db96d56Sopenharmony_ci
13877db96d56Sopenharmony_ci      Extract all doctest examples from the given string, and collect them into a
13887db96d56Sopenharmony_ci      :class:`DocTest` object.
13897db96d56Sopenharmony_ci
13907db96d56Sopenharmony_ci      *globs*, *name*, *filename*, and *lineno* are attributes for the new
13917db96d56Sopenharmony_ci      :class:`DocTest` object.  See the documentation for :class:`DocTest` for more
13927db96d56Sopenharmony_ci      information.
13937db96d56Sopenharmony_ci
13947db96d56Sopenharmony_ci
13957db96d56Sopenharmony_ci   .. method:: get_examples(string, name='<string>')
13967db96d56Sopenharmony_ci
13977db96d56Sopenharmony_ci      Extract all doctest examples from the given string, and return them as a list
13987db96d56Sopenharmony_ci      of :class:`Example` objects.  Line numbers are 0-based.  The optional argument
13997db96d56Sopenharmony_ci      *name* is a name identifying this string, and is only used for error messages.
14007db96d56Sopenharmony_ci
14017db96d56Sopenharmony_ci
14027db96d56Sopenharmony_ci   .. method:: parse(string, name='<string>')
14037db96d56Sopenharmony_ci
14047db96d56Sopenharmony_ci      Divide the given string into examples and intervening text, and return them as
14057db96d56Sopenharmony_ci      a list of alternating :class:`Example`\ s and strings. Line numbers for the
14067db96d56Sopenharmony_ci      :class:`Example`\ s are 0-based.  The optional argument *name* is a name
14077db96d56Sopenharmony_ci      identifying this string, and is only used for error messages.
14087db96d56Sopenharmony_ci
14097db96d56Sopenharmony_ci
14107db96d56Sopenharmony_ci.. _doctest-doctestrunner:
14117db96d56Sopenharmony_ci
14127db96d56Sopenharmony_ciDocTestRunner objects
14137db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^
14147db96d56Sopenharmony_ci
14157db96d56Sopenharmony_ci
14167db96d56Sopenharmony_ci.. class:: DocTestRunner(checker=None, verbose=None, optionflags=0)
14177db96d56Sopenharmony_ci
14187db96d56Sopenharmony_ci   A processing class used to execute and verify the interactive examples in a
14197db96d56Sopenharmony_ci   :class:`DocTest`.
14207db96d56Sopenharmony_ci
14217db96d56Sopenharmony_ci   The comparison between expected outputs and actual outputs is done by an
14227db96d56Sopenharmony_ci   :class:`OutputChecker`.  This comparison may be customized with a number of
14237db96d56Sopenharmony_ci   option flags; see section :ref:`doctest-options` for more information.  If the
14247db96d56Sopenharmony_ci   option flags are insufficient, then the comparison may also be customized by
14257db96d56Sopenharmony_ci   passing a subclass of :class:`OutputChecker` to the constructor.
14267db96d56Sopenharmony_ci
14277db96d56Sopenharmony_ci   The test runner's display output can be controlled in two ways. First, an output
14287db96d56Sopenharmony_ci   function can be passed to :meth:`TestRunner.run`; this function will be called
14297db96d56Sopenharmony_ci   with strings that should be displayed.  It defaults to ``sys.stdout.write``.  If
14307db96d56Sopenharmony_ci   capturing the output is not sufficient, then the display output can be also
14317db96d56Sopenharmony_ci   customized by subclassing DocTestRunner, and overriding the methods
14327db96d56Sopenharmony_ci   :meth:`report_start`, :meth:`report_success`,
14337db96d56Sopenharmony_ci   :meth:`report_unexpected_exception`, and :meth:`report_failure`.
14347db96d56Sopenharmony_ci
14357db96d56Sopenharmony_ci   The optional keyword argument *checker* specifies the :class:`OutputChecker`
14367db96d56Sopenharmony_ci   object (or drop-in replacement) that should be used to compare the expected
14377db96d56Sopenharmony_ci   outputs to the actual outputs of doctest examples.
14387db96d56Sopenharmony_ci
14397db96d56Sopenharmony_ci   The optional keyword argument *verbose* controls the :class:`DocTestRunner`'s
14407db96d56Sopenharmony_ci   verbosity.  If *verbose* is ``True``, then information is printed about each
14417db96d56Sopenharmony_ci   example, as it is run.  If *verbose* is ``False``, then only failures are
14427db96d56Sopenharmony_ci   printed.  If *verbose* is unspecified, or ``None``, then verbose output is used
14437db96d56Sopenharmony_ci   iff the command-line switch ``-v`` is used.
14447db96d56Sopenharmony_ci
14457db96d56Sopenharmony_ci   The optional keyword argument *optionflags* can be used to control how the test
14467db96d56Sopenharmony_ci   runner compares expected output to actual output, and how it displays failures.
14477db96d56Sopenharmony_ci   For more information, see section :ref:`doctest-options`.
14487db96d56Sopenharmony_ci
14497db96d56Sopenharmony_ci
14507db96d56Sopenharmony_ci   :class:`DocTestParser` defines the following methods:
14517db96d56Sopenharmony_ci
14527db96d56Sopenharmony_ci
14537db96d56Sopenharmony_ci   .. method:: report_start(out, test, example)
14547db96d56Sopenharmony_ci
14557db96d56Sopenharmony_ci      Report that the test runner is about to process the given example. This method
14567db96d56Sopenharmony_ci      is provided to allow subclasses of :class:`DocTestRunner` to customize their
14577db96d56Sopenharmony_ci      output; it should not be called directly.
14587db96d56Sopenharmony_ci
14597db96d56Sopenharmony_ci      *example* is the example about to be processed.  *test* is the test
14607db96d56Sopenharmony_ci      *containing example*.  *out* is the output function that was passed to
14617db96d56Sopenharmony_ci      :meth:`DocTestRunner.run`.
14627db96d56Sopenharmony_ci
14637db96d56Sopenharmony_ci
14647db96d56Sopenharmony_ci   .. method:: report_success(out, test, example, got)
14657db96d56Sopenharmony_ci
14667db96d56Sopenharmony_ci      Report that the given example ran successfully.  This method is provided to
14677db96d56Sopenharmony_ci      allow subclasses of :class:`DocTestRunner` to customize their output; it
14687db96d56Sopenharmony_ci      should not be called directly.
14697db96d56Sopenharmony_ci
14707db96d56Sopenharmony_ci      *example* is the example about to be processed.  *got* is the actual output
14717db96d56Sopenharmony_ci      from the example.  *test* is the test containing *example*.  *out* is the
14727db96d56Sopenharmony_ci      output function that was passed to :meth:`DocTestRunner.run`.
14737db96d56Sopenharmony_ci
14747db96d56Sopenharmony_ci
14757db96d56Sopenharmony_ci   .. method:: report_failure(out, test, example, got)
14767db96d56Sopenharmony_ci
14777db96d56Sopenharmony_ci      Report that the given example failed.  This method is provided to allow
14787db96d56Sopenharmony_ci      subclasses of :class:`DocTestRunner` to customize their output; it should not
14797db96d56Sopenharmony_ci      be called directly.
14807db96d56Sopenharmony_ci
14817db96d56Sopenharmony_ci      *example* is the example about to be processed.  *got* is the actual output
14827db96d56Sopenharmony_ci      from the example.  *test* is the test containing *example*.  *out* is the
14837db96d56Sopenharmony_ci      output function that was passed to :meth:`DocTestRunner.run`.
14847db96d56Sopenharmony_ci
14857db96d56Sopenharmony_ci
14867db96d56Sopenharmony_ci   .. method:: report_unexpected_exception(out, test, example, exc_info)
14877db96d56Sopenharmony_ci
14887db96d56Sopenharmony_ci      Report that the given example raised an unexpected exception. This method is
14897db96d56Sopenharmony_ci      provided to allow subclasses of :class:`DocTestRunner` to customize their
14907db96d56Sopenharmony_ci      output; it should not be called directly.
14917db96d56Sopenharmony_ci
14927db96d56Sopenharmony_ci      *example* is the example about to be processed. *exc_info* is a tuple
14937db96d56Sopenharmony_ci      containing information about the unexpected exception (as returned by
14947db96d56Sopenharmony_ci      :func:`sys.exc_info`). *test* is the test containing *example*.  *out* is the
14957db96d56Sopenharmony_ci      output function that was passed to :meth:`DocTestRunner.run`.
14967db96d56Sopenharmony_ci
14977db96d56Sopenharmony_ci
14987db96d56Sopenharmony_ci   .. method:: run(test, compileflags=None, out=None, clear_globs=True)
14997db96d56Sopenharmony_ci
15007db96d56Sopenharmony_ci      Run the examples in *test* (a :class:`DocTest` object), and display the
15017db96d56Sopenharmony_ci      results using the writer function *out*.
15027db96d56Sopenharmony_ci
15037db96d56Sopenharmony_ci      The examples are run in the namespace ``test.globs``.  If *clear_globs* is
15047db96d56Sopenharmony_ci      true (the default), then this namespace will be cleared after the test runs,
15057db96d56Sopenharmony_ci      to help with garbage collection. If you would like to examine the namespace
15067db96d56Sopenharmony_ci      after the test completes, then use *clear_globs=False*.
15077db96d56Sopenharmony_ci
15087db96d56Sopenharmony_ci      *compileflags* gives the set of flags that should be used by the Python
15097db96d56Sopenharmony_ci      compiler when running the examples.  If not specified, then it will default to
15107db96d56Sopenharmony_ci      the set of future-import flags that apply to *globs*.
15117db96d56Sopenharmony_ci
15127db96d56Sopenharmony_ci      The output of each example is checked using the :class:`DocTestRunner`'s
15137db96d56Sopenharmony_ci      output checker, and the results are formatted by the
15147db96d56Sopenharmony_ci      :meth:`DocTestRunner.report_\*` methods.
15157db96d56Sopenharmony_ci
15167db96d56Sopenharmony_ci
15177db96d56Sopenharmony_ci   .. method:: summarize(verbose=None)
15187db96d56Sopenharmony_ci
15197db96d56Sopenharmony_ci      Print a summary of all the test cases that have been run by this DocTestRunner,
15207db96d56Sopenharmony_ci      and return a :term:`named tuple` ``TestResults(failed, attempted)``.
15217db96d56Sopenharmony_ci
15227db96d56Sopenharmony_ci      The optional *verbose* argument controls how detailed the summary is.  If the
15237db96d56Sopenharmony_ci      verbosity is not specified, then the :class:`DocTestRunner`'s verbosity is
15247db96d56Sopenharmony_ci      used.
15257db96d56Sopenharmony_ci
15267db96d56Sopenharmony_ci.. _doctest-outputchecker:
15277db96d56Sopenharmony_ci
15287db96d56Sopenharmony_ciOutputChecker objects
15297db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^
15307db96d56Sopenharmony_ci
15317db96d56Sopenharmony_ci
15327db96d56Sopenharmony_ci.. class:: OutputChecker()
15337db96d56Sopenharmony_ci
15347db96d56Sopenharmony_ci   A class used to check the whether the actual output from a doctest example
15357db96d56Sopenharmony_ci   matches the expected output.  :class:`OutputChecker` defines two methods:
15367db96d56Sopenharmony_ci   :meth:`check_output`, which compares a given pair of outputs, and returns ``True``
15377db96d56Sopenharmony_ci   if they match; and :meth:`output_difference`, which returns a string describing
15387db96d56Sopenharmony_ci   the differences between two outputs.
15397db96d56Sopenharmony_ci
15407db96d56Sopenharmony_ci
15417db96d56Sopenharmony_ci   :class:`OutputChecker` defines the following methods:
15427db96d56Sopenharmony_ci
15437db96d56Sopenharmony_ci   .. method:: check_output(want, got, optionflags)
15447db96d56Sopenharmony_ci
15457db96d56Sopenharmony_ci      Return ``True`` iff the actual output from an example (*got*) matches the
15467db96d56Sopenharmony_ci      expected output (*want*).  These strings are always considered to match if
15477db96d56Sopenharmony_ci      they are identical; but depending on what option flags the test runner is
15487db96d56Sopenharmony_ci      using, several non-exact match types are also possible.  See section
15497db96d56Sopenharmony_ci      :ref:`doctest-options` for more information about option flags.
15507db96d56Sopenharmony_ci
15517db96d56Sopenharmony_ci
15527db96d56Sopenharmony_ci   .. method:: output_difference(example, got, optionflags)
15537db96d56Sopenharmony_ci
15547db96d56Sopenharmony_ci      Return a string describing the differences between the expected output for a
15557db96d56Sopenharmony_ci      given example (*example*) and the actual output (*got*).  *optionflags* is the
15567db96d56Sopenharmony_ci      set of option flags used to compare *want* and *got*.
15577db96d56Sopenharmony_ci
15587db96d56Sopenharmony_ci
15597db96d56Sopenharmony_ci.. _doctest-debugging:
15607db96d56Sopenharmony_ci
15617db96d56Sopenharmony_ciDebugging
15627db96d56Sopenharmony_ci---------
15637db96d56Sopenharmony_ci
15647db96d56Sopenharmony_ciDoctest provides several mechanisms for debugging doctest examples:
15657db96d56Sopenharmony_ci
15667db96d56Sopenharmony_ci* Several functions convert doctests to executable Python programs, which can be
15677db96d56Sopenharmony_ci  run under the Python debugger, :mod:`pdb`.
15687db96d56Sopenharmony_ci
15697db96d56Sopenharmony_ci* The :class:`DebugRunner` class is a subclass of :class:`DocTestRunner` that
15707db96d56Sopenharmony_ci  raises an exception for the first failing example, containing information about
15717db96d56Sopenharmony_ci  that example. This information can be used to perform post-mortem debugging on
15727db96d56Sopenharmony_ci  the example.
15737db96d56Sopenharmony_ci
15747db96d56Sopenharmony_ci* The :mod:`unittest` cases generated by :func:`DocTestSuite` support the
15757db96d56Sopenharmony_ci  :meth:`debug` method defined by :class:`unittest.TestCase`.
15767db96d56Sopenharmony_ci
15777db96d56Sopenharmony_ci* You can add a call to :func:`pdb.set_trace` in a doctest example, and you'll
15787db96d56Sopenharmony_ci  drop into the Python debugger when that line is executed.  Then you can inspect
15797db96d56Sopenharmony_ci  current values of variables, and so on.  For example, suppose :file:`a.py`
15807db96d56Sopenharmony_ci  contains just this module docstring::
15817db96d56Sopenharmony_ci
15827db96d56Sopenharmony_ci     """
15837db96d56Sopenharmony_ci     >>> def f(x):
15847db96d56Sopenharmony_ci     ...     g(x*2)
15857db96d56Sopenharmony_ci     >>> def g(x):
15867db96d56Sopenharmony_ci     ...     print(x+3)
15877db96d56Sopenharmony_ci     ...     import pdb; pdb.set_trace()
15887db96d56Sopenharmony_ci     >>> f(3)
15897db96d56Sopenharmony_ci     9
15907db96d56Sopenharmony_ci     """
15917db96d56Sopenharmony_ci
15927db96d56Sopenharmony_ci  Then an interactive Python session may look like this::
15937db96d56Sopenharmony_ci
15947db96d56Sopenharmony_ci     >>> import a, doctest
15957db96d56Sopenharmony_ci     >>> doctest.testmod(a)
15967db96d56Sopenharmony_ci     --Return--
15977db96d56Sopenharmony_ci     > <doctest a[1]>(3)g()->None
15987db96d56Sopenharmony_ci     -> import pdb; pdb.set_trace()
15997db96d56Sopenharmony_ci     (Pdb) list
16007db96d56Sopenharmony_ci       1     def g(x):
16017db96d56Sopenharmony_ci       2         print(x+3)
16027db96d56Sopenharmony_ci       3  ->     import pdb; pdb.set_trace()
16037db96d56Sopenharmony_ci     [EOF]
16047db96d56Sopenharmony_ci     (Pdb) p x
16057db96d56Sopenharmony_ci     6
16067db96d56Sopenharmony_ci     (Pdb) step
16077db96d56Sopenharmony_ci     --Return--
16087db96d56Sopenharmony_ci     > <doctest a[0]>(2)f()->None
16097db96d56Sopenharmony_ci     -> g(x*2)
16107db96d56Sopenharmony_ci     (Pdb) list
16117db96d56Sopenharmony_ci       1     def f(x):
16127db96d56Sopenharmony_ci       2  ->     g(x*2)
16137db96d56Sopenharmony_ci     [EOF]
16147db96d56Sopenharmony_ci     (Pdb) p x
16157db96d56Sopenharmony_ci     3
16167db96d56Sopenharmony_ci     (Pdb) step
16177db96d56Sopenharmony_ci     --Return--
16187db96d56Sopenharmony_ci     > <doctest a[2]>(1)?()->None
16197db96d56Sopenharmony_ci     -> f(3)
16207db96d56Sopenharmony_ci     (Pdb) cont
16217db96d56Sopenharmony_ci     (0, 3)
16227db96d56Sopenharmony_ci     >>>
16237db96d56Sopenharmony_ci
16247db96d56Sopenharmony_ci
16257db96d56Sopenharmony_ciFunctions that convert doctests to Python code, and possibly run the synthesized
16267db96d56Sopenharmony_cicode under the debugger:
16277db96d56Sopenharmony_ci
16287db96d56Sopenharmony_ci
16297db96d56Sopenharmony_ci.. function:: script_from_examples(s)
16307db96d56Sopenharmony_ci
16317db96d56Sopenharmony_ci   Convert text with examples to a script.
16327db96d56Sopenharmony_ci
16337db96d56Sopenharmony_ci   Argument *s* is a string containing doctest examples.  The string is converted
16347db96d56Sopenharmony_ci   to a Python script, where doctest examples in *s* are converted to regular code,
16357db96d56Sopenharmony_ci   and everything else is converted to Python comments.  The generated script is
16367db96d56Sopenharmony_ci   returned as a string. For example, ::
16377db96d56Sopenharmony_ci
16387db96d56Sopenharmony_ci      import doctest
16397db96d56Sopenharmony_ci      print(doctest.script_from_examples(r"""
16407db96d56Sopenharmony_ci          Set x and y to 1 and 2.
16417db96d56Sopenharmony_ci          >>> x, y = 1, 2
16427db96d56Sopenharmony_ci
16437db96d56Sopenharmony_ci          Print their sum:
16447db96d56Sopenharmony_ci          >>> print(x+y)
16457db96d56Sopenharmony_ci          3
16467db96d56Sopenharmony_ci      """))
16477db96d56Sopenharmony_ci
16487db96d56Sopenharmony_ci   displays::
16497db96d56Sopenharmony_ci
16507db96d56Sopenharmony_ci      # Set x and y to 1 and 2.
16517db96d56Sopenharmony_ci      x, y = 1, 2
16527db96d56Sopenharmony_ci      #
16537db96d56Sopenharmony_ci      # Print their sum:
16547db96d56Sopenharmony_ci      print(x+y)
16557db96d56Sopenharmony_ci      # Expected:
16567db96d56Sopenharmony_ci      ## 3
16577db96d56Sopenharmony_ci
16587db96d56Sopenharmony_ci   This function is used internally by other functions (see below), but can also be
16597db96d56Sopenharmony_ci   useful when you want to transform an interactive Python session into a Python
16607db96d56Sopenharmony_ci   script.
16617db96d56Sopenharmony_ci
16627db96d56Sopenharmony_ci
16637db96d56Sopenharmony_ci.. function:: testsource(module, name)
16647db96d56Sopenharmony_ci
16657db96d56Sopenharmony_ci   Convert the doctest for an object to a script.
16667db96d56Sopenharmony_ci
16677db96d56Sopenharmony_ci   Argument *module* is a module object, or dotted name of a module, containing the
16687db96d56Sopenharmony_ci   object whose doctests are of interest.  Argument *name* is the name (within the
16697db96d56Sopenharmony_ci   module) of the object with the doctests of interest.  The result is a string,
16707db96d56Sopenharmony_ci   containing the object's docstring converted to a Python script, as described for
16717db96d56Sopenharmony_ci   :func:`script_from_examples` above.  For example, if module :file:`a.py`
16727db96d56Sopenharmony_ci   contains a top-level function :func:`f`, then ::
16737db96d56Sopenharmony_ci
16747db96d56Sopenharmony_ci      import a, doctest
16757db96d56Sopenharmony_ci      print(doctest.testsource(a, "a.f"))
16767db96d56Sopenharmony_ci
16777db96d56Sopenharmony_ci   prints a script version of function :func:`f`'s docstring, with doctests
16787db96d56Sopenharmony_ci   converted to code, and the rest placed in comments.
16797db96d56Sopenharmony_ci
16807db96d56Sopenharmony_ci
16817db96d56Sopenharmony_ci.. function:: debug(module, name, pm=False)
16827db96d56Sopenharmony_ci
16837db96d56Sopenharmony_ci   Debug the doctests for an object.
16847db96d56Sopenharmony_ci
16857db96d56Sopenharmony_ci   The *module* and *name* arguments are the same as for function
16867db96d56Sopenharmony_ci   :func:`testsource` above.  The synthesized Python script for the named object's
16877db96d56Sopenharmony_ci   docstring is written to a temporary file, and then that file is run under the
16887db96d56Sopenharmony_ci   control of the Python debugger, :mod:`pdb`.
16897db96d56Sopenharmony_ci
16907db96d56Sopenharmony_ci   A shallow copy of ``module.__dict__`` is used for both local and global
16917db96d56Sopenharmony_ci   execution context.
16927db96d56Sopenharmony_ci
16937db96d56Sopenharmony_ci   Optional argument *pm* controls whether post-mortem debugging is used.  If *pm*
16947db96d56Sopenharmony_ci   has a true value, the script file is run directly, and the debugger gets
16957db96d56Sopenharmony_ci   involved only if the script terminates via raising an unhandled exception.  If
16967db96d56Sopenharmony_ci   it does, then post-mortem debugging is invoked, via :func:`pdb.post_mortem`,
16977db96d56Sopenharmony_ci   passing the traceback object from the unhandled exception.  If *pm* is not
16987db96d56Sopenharmony_ci   specified, or is false, the script is run under the debugger from the start, via
16997db96d56Sopenharmony_ci   passing an appropriate :func:`exec` call to :func:`pdb.run`.
17007db96d56Sopenharmony_ci
17017db96d56Sopenharmony_ci
17027db96d56Sopenharmony_ci.. function:: debug_src(src, pm=False, globs=None)
17037db96d56Sopenharmony_ci
17047db96d56Sopenharmony_ci   Debug the doctests in a string.
17057db96d56Sopenharmony_ci
17067db96d56Sopenharmony_ci   This is like function :func:`debug` above, except that a string containing
17077db96d56Sopenharmony_ci   doctest examples is specified directly, via the *src* argument.
17087db96d56Sopenharmony_ci
17097db96d56Sopenharmony_ci   Optional argument *pm* has the same meaning as in function :func:`debug` above.
17107db96d56Sopenharmony_ci
17117db96d56Sopenharmony_ci   Optional argument *globs* gives a dictionary to use as both local and global
17127db96d56Sopenharmony_ci   execution context.  If not specified, or ``None``, an empty dictionary is used.
17137db96d56Sopenharmony_ci   If specified, a shallow copy of the dictionary is used.
17147db96d56Sopenharmony_ci
17157db96d56Sopenharmony_ci
17167db96d56Sopenharmony_ciThe :class:`DebugRunner` class, and the special exceptions it may raise, are of
17177db96d56Sopenharmony_cimost interest to testing framework authors, and will only be sketched here.  See
17187db96d56Sopenharmony_cithe source code, and especially :class:`DebugRunner`'s docstring (which is a
17197db96d56Sopenharmony_cidoctest!) for more details:
17207db96d56Sopenharmony_ci
17217db96d56Sopenharmony_ci
17227db96d56Sopenharmony_ci.. class:: DebugRunner(checker=None, verbose=None, optionflags=0)
17237db96d56Sopenharmony_ci
17247db96d56Sopenharmony_ci   A subclass of :class:`DocTestRunner` that raises an exception as soon as a
17257db96d56Sopenharmony_ci   failure is encountered.  If an unexpected exception occurs, an
17267db96d56Sopenharmony_ci   :exc:`UnexpectedException` exception is raised, containing the test, the
17277db96d56Sopenharmony_ci   example, and the original exception.  If the output doesn't match, then a
17287db96d56Sopenharmony_ci   :exc:`DocTestFailure` exception is raised, containing the test, the example, and
17297db96d56Sopenharmony_ci   the actual output.
17307db96d56Sopenharmony_ci
17317db96d56Sopenharmony_ci   For information about the constructor parameters and methods, see the
17327db96d56Sopenharmony_ci   documentation for :class:`DocTestRunner` in section :ref:`doctest-advanced-api`.
17337db96d56Sopenharmony_ci
17347db96d56Sopenharmony_ciThere are two exceptions that may be raised by :class:`DebugRunner` instances:
17357db96d56Sopenharmony_ci
17367db96d56Sopenharmony_ci
17377db96d56Sopenharmony_ci.. exception:: DocTestFailure(test, example, got)
17387db96d56Sopenharmony_ci
17397db96d56Sopenharmony_ci   An exception raised by :class:`DocTestRunner` to signal that a doctest example's
17407db96d56Sopenharmony_ci   actual output did not match its expected output. The constructor arguments are
17417db96d56Sopenharmony_ci   used to initialize the attributes of the same names.
17427db96d56Sopenharmony_ci
17437db96d56Sopenharmony_ci:exc:`DocTestFailure` defines the following attributes:
17447db96d56Sopenharmony_ci
17457db96d56Sopenharmony_ci
17467db96d56Sopenharmony_ci.. attribute:: DocTestFailure.test
17477db96d56Sopenharmony_ci
17487db96d56Sopenharmony_ci   The :class:`DocTest` object that was being run when the example failed.
17497db96d56Sopenharmony_ci
17507db96d56Sopenharmony_ci
17517db96d56Sopenharmony_ci.. attribute:: DocTestFailure.example
17527db96d56Sopenharmony_ci
17537db96d56Sopenharmony_ci   The :class:`Example` that failed.
17547db96d56Sopenharmony_ci
17557db96d56Sopenharmony_ci
17567db96d56Sopenharmony_ci.. attribute:: DocTestFailure.got
17577db96d56Sopenharmony_ci
17587db96d56Sopenharmony_ci   The example's actual output.
17597db96d56Sopenharmony_ci
17607db96d56Sopenharmony_ci
17617db96d56Sopenharmony_ci.. exception:: UnexpectedException(test, example, exc_info)
17627db96d56Sopenharmony_ci
17637db96d56Sopenharmony_ci   An exception raised by :class:`DocTestRunner` to signal that a doctest
17647db96d56Sopenharmony_ci   example raised an unexpected exception.  The constructor arguments are used
17657db96d56Sopenharmony_ci   to initialize the attributes of the same names.
17667db96d56Sopenharmony_ci
17677db96d56Sopenharmony_ci:exc:`UnexpectedException` defines the following attributes:
17687db96d56Sopenharmony_ci
17697db96d56Sopenharmony_ci
17707db96d56Sopenharmony_ci.. attribute:: UnexpectedException.test
17717db96d56Sopenharmony_ci
17727db96d56Sopenharmony_ci   The :class:`DocTest` object that was being run when the example failed.
17737db96d56Sopenharmony_ci
17747db96d56Sopenharmony_ci
17757db96d56Sopenharmony_ci.. attribute:: UnexpectedException.example
17767db96d56Sopenharmony_ci
17777db96d56Sopenharmony_ci   The :class:`Example` that failed.
17787db96d56Sopenharmony_ci
17797db96d56Sopenharmony_ci
17807db96d56Sopenharmony_ci.. attribute:: UnexpectedException.exc_info
17817db96d56Sopenharmony_ci
17827db96d56Sopenharmony_ci   A tuple containing information about the unexpected exception, as returned by
17837db96d56Sopenharmony_ci   :func:`sys.exc_info`.
17847db96d56Sopenharmony_ci
17857db96d56Sopenharmony_ci
17867db96d56Sopenharmony_ci.. _doctest-soapbox:
17877db96d56Sopenharmony_ci
17887db96d56Sopenharmony_ciSoapbox
17897db96d56Sopenharmony_ci-------
17907db96d56Sopenharmony_ci
17917db96d56Sopenharmony_ciAs mentioned in the introduction, :mod:`doctest` has grown to have three primary
17927db96d56Sopenharmony_ciuses:
17937db96d56Sopenharmony_ci
17947db96d56Sopenharmony_ci#. Checking examples in docstrings.
17957db96d56Sopenharmony_ci
17967db96d56Sopenharmony_ci#. Regression testing.
17977db96d56Sopenharmony_ci
17987db96d56Sopenharmony_ci#. Executable documentation / literate testing.
17997db96d56Sopenharmony_ci
18007db96d56Sopenharmony_ciThese uses have different requirements, and it is important to distinguish them.
18017db96d56Sopenharmony_ciIn particular, filling your docstrings with obscure test cases makes for bad
18027db96d56Sopenharmony_cidocumentation.
18037db96d56Sopenharmony_ci
18047db96d56Sopenharmony_ciWhen writing a docstring, choose docstring examples with care. There's an art to
18057db96d56Sopenharmony_cithis that needs to be learned---it may not be natural at first.  Examples should
18067db96d56Sopenharmony_ciadd genuine value to the documentation.  A good example can often be worth many
18077db96d56Sopenharmony_ciwords. If done with care, the examples will be invaluable for your users, and
18087db96d56Sopenharmony_ciwill pay back the time it takes to collect them many times over as the years go
18097db96d56Sopenharmony_ciby and things change.  I'm still amazed at how often one of my :mod:`doctest`
18107db96d56Sopenharmony_ciexamples stops working after a "harmless" change.
18117db96d56Sopenharmony_ci
18127db96d56Sopenharmony_ciDoctest also makes an excellent tool for regression testing, especially if you
18137db96d56Sopenharmony_cidon't skimp on explanatory text.  By interleaving prose and examples, it becomes
18147db96d56Sopenharmony_cimuch easier to keep track of what's actually being tested, and why.  When a test
18157db96d56Sopenharmony_cifails, good prose can make it much easier to figure out what the problem is, and
18167db96d56Sopenharmony_cihow it should be fixed.  It's true that you could write extensive comments in
18177db96d56Sopenharmony_cicode-based testing, but few programmers do. Many have found that using doctest
18187db96d56Sopenharmony_ciapproaches instead leads to much clearer tests.  Perhaps this is simply because
18197db96d56Sopenharmony_cidoctest makes writing prose a little easier than writing code, while writing
18207db96d56Sopenharmony_cicomments in code is a little harder.  I think it goes deeper than just that:
18217db96d56Sopenharmony_cithe natural attitude when writing a doctest-based test is that you want to
18227db96d56Sopenharmony_ciexplain the fine points of your software, and illustrate them with examples.
18237db96d56Sopenharmony_ciThis in turn naturally leads to test files that start with the simplest
18247db96d56Sopenharmony_cifeatures, and logically progress to complications and edge cases.  A coherent
18257db96d56Sopenharmony_cinarrative is the result, instead of a collection of isolated functions that test
18267db96d56Sopenharmony_ciisolated bits of functionality seemingly at random.  It's a different attitude,
18277db96d56Sopenharmony_ciand produces different results, blurring the distinction between testing and
18287db96d56Sopenharmony_ciexplaining.
18297db96d56Sopenharmony_ci
18307db96d56Sopenharmony_ciRegression testing is best confined to dedicated objects or files.  There are
18317db96d56Sopenharmony_ciseveral options for organizing tests:
18327db96d56Sopenharmony_ci
18337db96d56Sopenharmony_ci* Write text files containing test cases as interactive examples, and test the
18347db96d56Sopenharmony_ci  files using :func:`testfile` or :func:`DocFileSuite`.  This is recommended,
18357db96d56Sopenharmony_ci  although is easiest to do for new projects, designed from the start to use
18367db96d56Sopenharmony_ci  doctest.
18377db96d56Sopenharmony_ci
18387db96d56Sopenharmony_ci* Define functions named ``_regrtest_topic`` that consist of single docstrings,
18397db96d56Sopenharmony_ci  containing test cases for the named topics.  These functions can be included in
18407db96d56Sopenharmony_ci  the same file as the module, or separated out into a separate test file.
18417db96d56Sopenharmony_ci
18427db96d56Sopenharmony_ci* Define a ``__test__`` dictionary mapping from regression test topics to
18437db96d56Sopenharmony_ci  docstrings containing test cases.
18447db96d56Sopenharmony_ci
18457db96d56Sopenharmony_ciWhen you have placed your tests in a module, the module can itself be the test
18467db96d56Sopenharmony_cirunner.  When a test fails, you can arrange for your test runner to re-run only
18477db96d56Sopenharmony_cithe failing doctest while you debug the problem.  Here is a minimal example of
18487db96d56Sopenharmony_cisuch a test runner::
18497db96d56Sopenharmony_ci
18507db96d56Sopenharmony_ci    if __name__ == '__main__':
18517db96d56Sopenharmony_ci        import doctest
18527db96d56Sopenharmony_ci        flags = doctest.REPORT_NDIFF|doctest.FAIL_FAST
18537db96d56Sopenharmony_ci        if len(sys.argv) > 1:
18547db96d56Sopenharmony_ci            name = sys.argv[1]
18557db96d56Sopenharmony_ci            if name in globals():
18567db96d56Sopenharmony_ci                obj = globals()[name]
18577db96d56Sopenharmony_ci            else:
18587db96d56Sopenharmony_ci                obj = __test__[name]
18597db96d56Sopenharmony_ci            doctest.run_docstring_examples(obj, globals(), name=name,
18607db96d56Sopenharmony_ci                                           optionflags=flags)
18617db96d56Sopenharmony_ci        else:
18627db96d56Sopenharmony_ci            fail, total = doctest.testmod(optionflags=flags)
18637db96d56Sopenharmony_ci            print("{} failures out of {} tests".format(fail, total))
18647db96d56Sopenharmony_ci
18657db96d56Sopenharmony_ci
18667db96d56Sopenharmony_ci.. rubric:: Footnotes
18677db96d56Sopenharmony_ci
18687db96d56Sopenharmony_ci.. [#] Examples containing both expected output and an exception are not supported.
18697db96d56Sopenharmony_ci   Trying to guess where one ends and the other begins is too error-prone, and that
18707db96d56Sopenharmony_ci   also makes for a confusing test.
1871