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