enable doctest plugin by default, add a --doctest-glob option and some documentation, regen plugin docs.
--HG-- branch : trunk
This commit is contained in:
parent
56a936993c
commit
eebeb1b257
|
@ -44,6 +44,9 @@ Changes between 1.X and 1.1.1
|
||||||
on by default (requires the 'figleaf' package though). Change
|
on by default (requires the 'figleaf' package though). Change
|
||||||
long command line options to be a bit shorter (see py.test -h).
|
long command line options to be a bit shorter (see py.test -h).
|
||||||
|
|
||||||
|
- change: pytest doctest plugin is now enabled by default and has a
|
||||||
|
new option --doctest-glob to set a pattern for file matches.
|
||||||
|
|
||||||
- robustify capturing to survive if custom pytest_runtest_setup
|
- robustify capturing to survive if custom pytest_runtest_setup
|
||||||
code failed and prevented the capturing setup code from running.
|
code failed and prevented the capturing setup code from running.
|
||||||
|
|
||||||
|
|
|
@ -10,20 +10,31 @@ collect and execute doctests from modules and test files.
|
||||||
Usage
|
Usage
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
By default all files matching the ``test_*.txt`` pattern will
|
By default all files matching the ``test*.txt`` pattern will
|
||||||
be run with the ``doctest`` module. If you issue::
|
be run through the python standard ``doctest`` module. Issue::
|
||||||
|
|
||||||
|
py.test --doctest-glob='*.rst'
|
||||||
|
|
||||||
|
to change the pattern. Additionally you can trigger running of
|
||||||
|
tests in all python modules (including regular python test modules)::
|
||||||
|
|
||||||
py.test --doctest-modules
|
py.test --doctest-modules
|
||||||
|
|
||||||
all python files in your projects will be doctest-run
|
You can also make these changes permanent in your project by
|
||||||
as well.
|
putting them into a conftest.py file like this::
|
||||||
|
|
||||||
|
# content of conftest.py
|
||||||
|
option_doctestmodules = True
|
||||||
|
option_doctestglob = "*.rst"
|
||||||
|
|
||||||
command line options
|
command line options
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
|
||||||
``--doctest-modules``
|
``--doctest-modules``
|
||||||
search all python files for doctests
|
run doctests in all .py modules
|
||||||
|
``--doctest-glob=pat``
|
||||||
|
doctests file matching pattern, default: test*.txt
|
||||||
|
|
||||||
Start improving this plugin in 30 seconds
|
Start improving this plugin in 30 seconds
|
||||||
=========================================
|
=========================================
|
||||||
|
|
|
@ -13,12 +13,12 @@ command line options
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
|
||||||
``-F``
|
``--figleaf``
|
||||||
trace python coverage with figleaf and write HTML for files below the current working dir
|
trace python coverage with figleaf and write HTML for files below the current working dir
|
||||||
``--figleaf-data=FIGLEAFDATA``
|
``--fig-data=dir``
|
||||||
path to coverage tracing file.
|
set tracing file, default: ".figleaf".
|
||||||
``--figleaf-html=FIGLEAFHTML``
|
``--fig-html=dir``
|
||||||
path to the coverage html dir.
|
set html reporting dir, default "html").
|
||||||
|
|
||||||
Start improving this plugin in 30 seconds
|
Start improving this plugin in 30 seconds
|
||||||
=========================================
|
=========================================
|
||||||
|
|
|
@ -32,6 +32,7 @@ hook specification sourcecode
|
||||||
|
|
||||||
def pytest_collect_directory(path, parent):
|
def pytest_collect_directory(path, parent):
|
||||||
""" return Collection node or None for the given path. """
|
""" return Collection node or None for the given path. """
|
||||||
|
pytest_collect_directory.firstresult = True
|
||||||
|
|
||||||
def pytest_collect_file(path, parent):
|
def pytest_collect_file(path, parent):
|
||||||
""" return Collection node or None for the given path. """
|
""" return Collection node or None for the given path. """
|
||||||
|
|
|
@ -9,7 +9,7 @@ from py.impl.test.outcome import Skipped
|
||||||
default_plugins = (
|
default_plugins = (
|
||||||
"default runner capture terminal mark skipping tmpdir monkeypatch "
|
"default runner capture terminal mark skipping tmpdir monkeypatch "
|
||||||
"recwarn pdb pastebin unittest helpconfig nose assertion genscript "
|
"recwarn pdb pastebin unittest helpconfig nose assertion genscript "
|
||||||
"logxml figleaf").split()
|
"logxml figleaf doctest").split()
|
||||||
|
|
||||||
def check_old_use(mod, modname):
|
def check_old_use(mod, modname):
|
||||||
clsname = modname[len('pytest_'):].capitalize() + "Plugin"
|
clsname = modname[len('pytest_'):].capitalize() + "Plugin"
|
||||||
|
|
|
@ -4,13 +4,22 @@ collect and execute doctests from modules and test files.
|
||||||
Usage
|
Usage
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
By default all files matching the ``test_*.txt`` pattern will
|
By default all files matching the ``test*.txt`` pattern will
|
||||||
be run with the ``doctest`` module. If you issue::
|
be run through the python standard ``doctest`` module. Issue::
|
||||||
|
|
||||||
|
py.test --doctest-glob='*.rst'
|
||||||
|
|
||||||
|
to change the pattern. Additionally you can trigger running of
|
||||||
|
tests in all python modules (including regular python test modules)::
|
||||||
|
|
||||||
py.test --doctest-modules
|
py.test --doctest-modules
|
||||||
|
|
||||||
all python files in your projects will be doctest-run
|
You can also make these changes permanent in your project by
|
||||||
as well.
|
putting them into a conftest.py file like this::
|
||||||
|
|
||||||
|
# content of conftest.py
|
||||||
|
option_doctestmodules = True
|
||||||
|
option_doctestglob = "*.rst"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import py
|
import py
|
||||||
|
@ -21,14 +30,19 @@ def pytest_addoption(parser):
|
||||||
group = parser.getgroup("general")
|
group = parser.getgroup("general")
|
||||||
group.addoption("--doctest-modules",
|
group.addoption("--doctest-modules",
|
||||||
action="store_true", default=False,
|
action="store_true", default=False,
|
||||||
help="search all python files for doctests",
|
help="run doctests in all .py modules",
|
||||||
dest="doctestmodules")
|
dest="doctestmodules")
|
||||||
|
group.addoption("--doctest-glob",
|
||||||
|
action="store", default="test*.txt", metavar="pat",
|
||||||
|
help="doctests file matching pattern, default: test*.txt",
|
||||||
|
dest="doctestglob")
|
||||||
|
|
||||||
def pytest_collect_file(path, parent):
|
def pytest_collect_file(path, parent):
|
||||||
|
config = parent.config
|
||||||
if path.ext == ".py":
|
if path.ext == ".py":
|
||||||
if parent.config.getvalue("doctestmodules"):
|
if config.getvalue("doctestmodules"):
|
||||||
return DoctestModule(path, parent)
|
return DoctestModule(path, parent)
|
||||||
if path.check(fnmatch="test_*.txt"):
|
elif path.check(fnmatch=config.getvalue("doctestglob")):
|
||||||
return DoctestTextfile(path, parent)
|
return DoctestTextfile(path, parent)
|
||||||
|
|
||||||
class ReprFailDoctest(TerminalRepr):
|
class ReprFailDoctest(TerminalRepr):
|
||||||
|
|
|
@ -17,7 +17,7 @@ def pytest_addoption(parser):
|
||||||
help='set tracing file, default: ".figleaf".')
|
help='set tracing file, default: ".figleaf".')
|
||||||
group.addoption('--fig-html', action='store', default='html',
|
group.addoption('--fig-html', action='store', default='html',
|
||||||
dest='figleafhtml', metavar="dir",
|
dest='figleafhtml', metavar="dir",
|
||||||
help='set html reporting dir, default "html").')
|
help='set html reporting dir, default "html".')
|
||||||
|
|
||||||
def pytest_configure(config):
|
def pytest_configure(config):
|
||||||
if config.getvalue("figleaf"):
|
if config.getvalue("figleaf"):
|
||||||
|
|
|
@ -14,14 +14,14 @@ class TestDoctests:
|
||||||
""")
|
""")
|
||||||
for x in (testdir.tmpdir, checkfile):
|
for x in (testdir.tmpdir, checkfile):
|
||||||
#print "checking that %s returns custom items" % (x,)
|
#print "checking that %s returns custom items" % (x,)
|
||||||
items, reprec = testdir.inline_genitems(x, '-p', 'doctest')
|
items, reprec = testdir.inline_genitems(x)
|
||||||
assert len(items) == 1
|
assert len(items) == 1
|
||||||
assert isinstance(items[0], DoctestTextfile)
|
assert isinstance(items[0], DoctestTextfile)
|
||||||
|
|
||||||
def test_collect_module(self, testdir):
|
def test_collect_module(self, testdir):
|
||||||
path = testdir.makepyfile(whatever="#")
|
path = testdir.makepyfile(whatever="#")
|
||||||
for p in (path, testdir.tmpdir):
|
for p in (path, testdir.tmpdir):
|
||||||
items, reprec = testdir.inline_genitems(p, '-p', 'doctest',
|
items, reprec = testdir.inline_genitems(p,
|
||||||
'--doctest-modules')
|
'--doctest-modules')
|
||||||
assert len(items) == 1
|
assert len(items) == 1
|
||||||
assert isinstance(items[0], DoctestModule)
|
assert isinstance(items[0], DoctestModule)
|
||||||
|
@ -32,7 +32,16 @@ class TestDoctests:
|
||||||
>>> x == 1
|
>>> x == 1
|
||||||
False
|
False
|
||||||
""")
|
""")
|
||||||
reprec = testdir.inline_run(p, '-p', 'doctest')
|
reprec = testdir.inline_run(p, )
|
||||||
|
reprec.assertoutcome(failed=1)
|
||||||
|
|
||||||
|
def test_new_pattern(self, testdir):
|
||||||
|
p = testdir.maketxtfile(xdoc ="""
|
||||||
|
>>> x = 1
|
||||||
|
>>> x == 1
|
||||||
|
False
|
||||||
|
""")
|
||||||
|
reprec = testdir.inline_run(p, "--doctest-glob=x*.txt")
|
||||||
reprec.assertoutcome(failed=1)
|
reprec.assertoutcome(failed=1)
|
||||||
|
|
||||||
def test_doctest_unexpected_exception(self, testdir):
|
def test_doctest_unexpected_exception(self, testdir):
|
||||||
|
@ -44,7 +53,7 @@ class TestDoctests:
|
||||||
>>> x
|
>>> x
|
||||||
2
|
2
|
||||||
""")
|
""")
|
||||||
reprec = testdir.inline_run(p, '-p', 'doctest')
|
reprec = testdir.inline_run(p)
|
||||||
call = reprec.getcall("pytest_runtest_logreport")
|
call = reprec.getcall("pytest_runtest_logreport")
|
||||||
assert call.report.failed
|
assert call.report.failed
|
||||||
assert call.report.longrepr
|
assert call.report.longrepr
|
||||||
|
@ -63,7 +72,7 @@ class TestDoctests:
|
||||||
|
|
||||||
'''
|
'''
|
||||||
""")
|
""")
|
||||||
reprec = testdir.inline_run(p, '-p', 'doctest', "--doctest-modules")
|
reprec = testdir.inline_run(p, "--doctest-modules")
|
||||||
reprec.assertoutcome(failed=1)
|
reprec.assertoutcome(failed=1)
|
||||||
|
|
||||||
def test_doctestmodule_external(self, testdir):
|
def test_doctestmodule_external(self, testdir):
|
||||||
|
@ -76,7 +85,7 @@ class TestDoctests:
|
||||||
2
|
2
|
||||||
'''
|
'''
|
||||||
""")
|
""")
|
||||||
result = testdir.runpytest(p, '-p', 'doctest', "--doctest-modules")
|
result = testdir.runpytest(p, "--doctest-modules")
|
||||||
result.stdout.fnmatch_lines([
|
result.stdout.fnmatch_lines([
|
||||||
'004 *>>> i = 0',
|
'004 *>>> i = 0',
|
||||||
'005 *>>> i + 1',
|
'005 *>>> i + 1',
|
||||||
|
@ -94,7 +103,7 @@ class TestDoctests:
|
||||||
>>> i + 1
|
>>> i + 1
|
||||||
2
|
2
|
||||||
""")
|
""")
|
||||||
result = testdir.runpytest(p, '-p', 'doctest')
|
result = testdir.runpytest(p)
|
||||||
result.stdout.fnmatch_lines([
|
result.stdout.fnmatch_lines([
|
||||||
'001 >>> i = 0',
|
'001 >>> i = 0',
|
||||||
'002 >>> i + 1',
|
'002 >>> i + 1',
|
||||||
|
|
Loading…
Reference in New Issue