mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
#310: support exception messages in the `testoutput
blocks of the
doctest
` extension.
Also add minimal test cases for the doctest extension.
This commit is contained in:
parent
c9201f282e
commit
f4da14806c
3
CHANGES
3
CHANGES
@ -1,6 +1,9 @@
|
|||||||
Release 0.6.4 (in development)
|
Release 0.6.4 (in development)
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
|
* #310: support exception messages in the ``testoutput`` blocks of
|
||||||
|
the ``doctest`` extension.
|
||||||
|
|
||||||
* #293: line blocks are styled properly in HTML output.
|
* #293: line blocks are styled properly in HTML output.
|
||||||
|
|
||||||
* #285: make the ``locale_dirs`` config value work again.
|
* #285: make the ``locale_dirs`` config value work again.
|
||||||
|
@ -87,10 +87,30 @@ names.
|
|||||||
* ``hide``, a flag option, hides the code block in other builders. By
|
* ``hide``, a flag option, hides the code block in other builders. By
|
||||||
default it is shown as a highlighted code block.
|
default it is shown as a highlighted code block.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Code in a ``testcode`` block is always executed all at once, no matter how
|
||||||
|
many statements it contains. Therefore, output will *not* be generated
|
||||||
|
for bare expressions -- use ``print``. Example::
|
||||||
|
|
||||||
|
.. testcode::
|
||||||
|
|
||||||
|
1+1 # this will give no output!
|
||||||
|
print 2+2 # this will give output
|
||||||
|
|
||||||
|
.. testoutput::
|
||||||
|
|
||||||
|
4
|
||||||
|
|
||||||
|
Also, please be aware that since the doctest module does not support
|
||||||
|
mixing regular output and an exception message in the same snippet, this
|
||||||
|
applies to testcode/testoutput as well.
|
||||||
|
|
||||||
|
|
||||||
.. directive:: .. testoutput:: [group]
|
.. directive:: .. testoutput:: [group]
|
||||||
|
|
||||||
The corresponding output for the last :dir:`testcode` block.
|
The corresponding output, or the exception message, for the last
|
||||||
|
:dir:`testcode` block.
|
||||||
|
|
||||||
This directive supports two options:
|
This directive supports two options:
|
||||||
|
|
||||||
@ -102,6 +122,10 @@ names.
|
|||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
|
.. testcode::
|
||||||
|
|
||||||
|
print 'Output text.'
|
||||||
|
|
||||||
.. testoutput::
|
.. testoutput::
|
||||||
:hide:
|
:hide:
|
||||||
:options: -ELLIPSIS, +NORMALIZE_WHITESPACE
|
:options: -ELLIPSIS, +NORMALIZE_WHITESPACE
|
||||||
@ -111,7 +135,7 @@ names.
|
|||||||
|
|
||||||
The following is an example for the usage of the directives. The test via
|
The following is an example for the usage of the directives. The test via
|
||||||
:dir:`doctest` and the test via :dir:`testcode` and :dir:`testoutput` are
|
:dir:`doctest` and the test via :dir:`testcode` and :dir:`testoutput` are
|
||||||
completely equivalent. ::
|
equivalent. ::
|
||||||
|
|
||||||
The parrot module
|
The parrot module
|
||||||
=================
|
=================
|
||||||
|
@ -355,7 +355,14 @@ Doctest summary
|
|||||||
options = code[1] and code[1].options or {}
|
options = code[1] and code[1].options or {}
|
||||||
# disable <BLANKLINE> processing as it is not needed
|
# disable <BLANKLINE> processing as it is not needed
|
||||||
options[doctest.DONT_ACCEPT_BLANKLINE] = True
|
options[doctest.DONT_ACCEPT_BLANKLINE] = True
|
||||||
|
# find out if we're testing an exception
|
||||||
|
m = parser._EXCEPTION_RE.match(output)
|
||||||
|
if m:
|
||||||
|
exc_msg = m.group('msg')
|
||||||
|
else:
|
||||||
|
exc_msg = None
|
||||||
example = doctest.Example(code[0].code, output,
|
example = doctest.Example(code[0].code, output,
|
||||||
|
exc_msg=exc_msg,
|
||||||
lineno=code[0].lineno,
|
lineno=code[0].lineno,
|
||||||
options=options)
|
options=options)
|
||||||
test = doctest.DocTest([example], {}, group.name,
|
test = doctest.DocTest([example], {}, group.name,
|
||||||
|
@ -6,7 +6,7 @@ sys.path.append(os.path.abspath('.'))
|
|||||||
|
|
||||||
extensions = ['ext', 'sphinx.ext.autodoc', 'sphinx.ext.jsmath',
|
extensions = ['ext', 'sphinx.ext.autodoc', 'sphinx.ext.jsmath',
|
||||||
'sphinx.ext.coverage', 'sphinx.ext.todo',
|
'sphinx.ext.coverage', 'sphinx.ext.todo',
|
||||||
'sphinx.ext.autosummary']
|
'sphinx.ext.autosummary', 'sphinx.ext.doctest']
|
||||||
|
|
||||||
jsmath_path = 'dummy.js'
|
jsmath_path = 'dummy.js'
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ Contents:
|
|||||||
math
|
math
|
||||||
autodoc
|
autodoc
|
||||||
autosummary
|
autosummary
|
||||||
|
doctest
|
||||||
|
|
||||||
Python <http://python.org/>
|
Python <http://python.org/>
|
||||||
|
|
||||||
|
120
tests/root/doctest.txt
Normal file
120
tests/root/doctest.txt
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
Testing the doctest extension
|
||||||
|
=============================
|
||||||
|
|
||||||
|
Simple doctest blocks
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
>>> 1+1
|
||||||
|
2
|
||||||
|
>>> 1/0
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ZeroDivisionError: integer division or modulo by zero
|
||||||
|
|
||||||
|
|
||||||
|
Special directives
|
||||||
|
------------------
|
||||||
|
|
||||||
|
* doctest
|
||||||
|
|
||||||
|
.. doctest::
|
||||||
|
|
||||||
|
>>> 1+1
|
||||||
|
2
|
||||||
|
>>> 1/0
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ZeroDivisionError: integer division or modulo by zero
|
||||||
|
|
||||||
|
* testcode/testoutput
|
||||||
|
|
||||||
|
.. testcode::
|
||||||
|
|
||||||
|
print 1+1
|
||||||
|
|
||||||
|
.. testoutput::
|
||||||
|
|
||||||
|
2
|
||||||
|
|
||||||
|
.. testcode::
|
||||||
|
|
||||||
|
1/0
|
||||||
|
|
||||||
|
.. testoutput::
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ZeroDivisionError: integer division or modulo by zero
|
||||||
|
|
||||||
|
* testsetup
|
||||||
|
|
||||||
|
.. testsetup:: *
|
||||||
|
|
||||||
|
from math import floor
|
||||||
|
|
||||||
|
.. doctest::
|
||||||
|
|
||||||
|
>>> floor(1.2)
|
||||||
|
1.0
|
||||||
|
|
||||||
|
.. testcode::
|
||||||
|
|
||||||
|
print floor(1.2)
|
||||||
|
|
||||||
|
.. testoutput::
|
||||||
|
|
||||||
|
1.0
|
||||||
|
|
||||||
|
>>> floor(1.2)
|
||||||
|
1.0
|
||||||
|
|
||||||
|
* options for testcode/testoutput blocks
|
||||||
|
|
||||||
|
.. testcode::
|
||||||
|
:hide:
|
||||||
|
|
||||||
|
print 'Output text.'
|
||||||
|
|
||||||
|
.. testoutput::
|
||||||
|
:hide:
|
||||||
|
:options: +NORMALIZE_WHITESPACE
|
||||||
|
|
||||||
|
Output text.
|
||||||
|
|
||||||
|
* grouping
|
||||||
|
|
||||||
|
.. testsetup:: group1
|
||||||
|
|
||||||
|
from math import ceil
|
||||||
|
|
||||||
|
``ceil`` is now known in "group1", but not in others.
|
||||||
|
|
||||||
|
.. doctest:: group1
|
||||||
|
|
||||||
|
>>> ceil(0.8)
|
||||||
|
1.0
|
||||||
|
|
||||||
|
.. doctest:: group2
|
||||||
|
|
||||||
|
>>> ceil(0.8)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
NameError: name 'ceil' is not defined
|
||||||
|
|
||||||
|
Interleaving testcode/testoutput:
|
||||||
|
|
||||||
|
.. testcode:: group1
|
||||||
|
|
||||||
|
print ceil(0.8)
|
||||||
|
|
||||||
|
.. testcode:: group2
|
||||||
|
|
||||||
|
print floor(0.8)
|
||||||
|
|
||||||
|
.. testoutput:: group1
|
||||||
|
|
||||||
|
1.0
|
||||||
|
|
||||||
|
.. testoutput:: group2
|
||||||
|
|
||||||
|
0.0
|
24
tests/test_doctest.py
Normal file
24
tests/test_doctest.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
test_doctest
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Test the doctest extension.
|
||||||
|
|
||||||
|
:copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import StringIO
|
||||||
|
|
||||||
|
from util import *
|
||||||
|
|
||||||
|
status = StringIO.StringIO()
|
||||||
|
|
||||||
|
@with_app(buildername='doctest', status=status)
|
||||||
|
def test_build(app):
|
||||||
|
app.builder.build_all()
|
||||||
|
if app.statuscode != 0:
|
||||||
|
print >>sys.stderr, status.getvalue()
|
||||||
|
assert False, 'failures in doctests'
|
Loading…
Reference in New Issue
Block a user