2016-02-06 03:12:25 +01:00

59 lines
1.5 KiB
Python

"""
Load tests from doctests.
This plugin implements :func:`handleFile` to load doctests from text files
and python modules.
To disable loading doctests from text files, configure an empty extensions list:
.. code-block :: ini
[doctest]
extensions =
"""
import doctest
import os
from nose2.events import Plugin
from nose2 import util
__unittest = True
class DocTestLoader(Plugin):
configSection = 'doctest'
commandLineSwitch = (None, 'with-doctest',
'Load doctests from text files and modules')
def __init__(self):
self.extensions = self.config.as_list('extensions', ['.txt', '.rst'])
def handleFile(self, event):
"""Load doctests from text files and modules"""
path = event.path
_root, ext = os.path.splitext(path)
if ext in self.extensions:
suite = doctest.DocFileTest(path, module_relative=False)
event.extraTests.append(suite)
return
elif not util.valid_module_name(os.path.basename(path)):
return
name = util.name_from_path(path)
try:
module = util.module_from_name(name)
except Exception:
# XXX log warning here?
return
if hasattr(module, '__test__') and not module.__test__:
return
try:
suite = doctest.DocTestSuite(module)
except ValueError:
# doctest, very annoyingly, raises ValueError when
# a module has no tests.
return
event.extraTests.append(suite)