doctest: minor PEP8 adjustments

This commit is contained in:
Georg Brandl 2014-09-22 10:47:08 +02:00
parent e748e23187
commit 9ae7c784b5

View File

@ -32,6 +32,7 @@ from sphinx.util.console import bold
blankline_re = re.compile(r'^\s*<BLANKLINE>', re.MULTILINE) blankline_re = re.compile(r'^\s*<BLANKLINE>', re.MULTILINE)
doctestopt_re = re.compile(r'#\s*doctest:.+$', re.MULTILINE) doctestopt_re = re.compile(r'#\s*doctest:.+$', re.MULTILINE)
# set up the necessary directives # set up the necessary directives
class TestDirective(Directive): class TestDirective(Directive):
@ -79,30 +80,35 @@ class TestDirective(Directive):
option_strings = self.options['options'].replace(',', ' ').split() option_strings = self.options['options'].replace(',', ' ').split()
for option in option_strings: for option in option_strings:
if (option[0] not in '+-' or option[1:] not in if (option[0] not in '+-' or option[1:] not in
doctest.OPTIONFLAGS_BY_NAME): doctest.OPTIONFLAGS_BY_NAME):
# XXX warn? # XXX warn?
continue continue
flag = doctest.OPTIONFLAGS_BY_NAME[option[1:]] flag = doctest.OPTIONFLAGS_BY_NAME[option[1:]]
node['options'][flag] = (option[0] == '+') node['options'][flag] = (option[0] == '+')
return [node] return [node]
class TestsetupDirective(TestDirective): class TestsetupDirective(TestDirective):
option_spec = {} option_spec = {}
class TestcleanupDirective(TestDirective): class TestcleanupDirective(TestDirective):
option_spec = {} option_spec = {}
class DoctestDirective(TestDirective): class DoctestDirective(TestDirective):
option_spec = { option_spec = {
'hide': directives.flag, 'hide': directives.flag,
'options': directives.unchanged, 'options': directives.unchanged,
} }
class TestcodeDirective(TestDirective): class TestcodeDirective(TestDirective):
option_spec = { option_spec = {
'hide': directives.flag, 'hide': directives.flag,
} }
class TestoutputDirective(TestDirective): class TestoutputDirective(TestDirective):
option_spec = { option_spec = {
'hide': directives.flag, 'hide': directives.flag,
@ -112,6 +118,7 @@ class TestoutputDirective(TestDirective):
parser = doctest.DocTestParser() parser = doctest.DocTestParser()
# helper classes # helper classes
class TestGroup(object): class TestGroup(object):
@ -196,7 +203,7 @@ class DocTestBuilder(Builder):
def init(self): def init(self):
# default options # default options
self.opt = doctest.DONT_ACCEPT_TRUE_FOR_1 | doctest.ELLIPSIS | \ self.opt = doctest.DONT_ACCEPT_TRUE_FOR_1 | doctest.ELLIPSIS | \
doctest.IGNORE_EXCEPTION_DETAIL doctest.IGNORE_EXCEPTION_DETAIL
# HACK HACK HACK # HACK HACK HACK
# doctest compiles its snippets with type 'single'. That is nice # doctest compiles its snippets with type 'single'. That is nice
@ -247,6 +254,10 @@ Results of doctest builder run on %s
# write executive summary # write executive summary
def s(v): def s(v):
return v != 1 and 's' or '' return v != 1 and 's' or ''
repl = (self.total_tries, s(self.total_tries),
self.total_failures, s(self.total_failures),
self.setup_failures, s(self.setup_failures),
self.cleanup_failures, s(self.cleanup_failures))
self._out(''' self._out('''
Doctest summary Doctest summary
=============== ===============
@ -254,10 +265,7 @@ Doctest summary
%5d failure%s in tests %5d failure%s in tests
%5d failure%s in setup code %5d failure%s in setup code
%5d failure%s in cleanup code %5d failure%s in cleanup code
''' % (self.total_tries, s(self.total_tries), ''' % repl)
self.total_failures, s(self.total_failures),
self.setup_failures, s(self.setup_failures),
self.cleanup_failures, s(self.cleanup_failures)))
self.outfile.close() self.outfile.close()
if self.total_failures or self.setup_failures or self.cleanup_failures: if self.total_failures or self.setup_failures or self.cleanup_failures:
@ -290,11 +298,11 @@ Doctest summary
def condition(node): def condition(node):
return (isinstance(node, (nodes.literal_block, nodes.comment)) return (isinstance(node, (nodes.literal_block, nodes.comment))
and 'testnodetype' in node) or \ and 'testnodetype' in node) or \
isinstance(node, nodes.doctest_block) isinstance(node, nodes.doctest_block)
else: else:
def condition(node): def condition(node):
return isinstance(node, (nodes.literal_block, nodes.comment)) \ return isinstance(node, (nodes.literal_block, nodes.comment)) \
and 'testnodetype' in node and 'testnodetype' in node
for node in doctree.traverse(condition): for node in doctree.traverse(condition):
source = 'test' in node and node['test'] or node.astext() source = 'test' in node and node['test'] or node.astext()
if not source: if not source:
@ -364,7 +372,7 @@ Doctest summary
filename, 0, None) filename, 0, None)
sim_doctest.globs = ns sim_doctest.globs = ns
old_f = runner.failures old_f = runner.failures
self.type = 'exec' # the snippet may contain multiple statements self.type = 'exec' # the snippet may contain multiple statements
runner.run(sim_doctest, out=self._warn_out, clear_globs=False) runner.run(sim_doctest, out=self._warn_out, clear_globs=False)
if runner.failures > old_f: if runner.failures > old_f:
return False return False
@ -394,7 +402,7 @@ Doctest summary
new_opt = code[0].options.copy() new_opt = code[0].options.copy()
new_opt.update(example.options) new_opt.update(example.options)
example.options = new_opt example.options = new_opt
self.type = 'single' # as for ordinary doctests self.type = 'single' # as for ordinary doctests
else: else:
# testcode and output separate # testcode and output separate
output = code[1] and code[1].code or '' output = code[1] and code[1].code or ''
@ -413,7 +421,7 @@ Doctest summary
options=options) options=options)
test = doctest.DocTest([example], {}, group.name, test = doctest.DocTest([example], {}, group.name,
filename, code[0].lineno, None) filename, code[0].lineno, None)
self.type = 'exec' # multiple statements again self.type = 'exec' # multiple statements again
# DocTest.__init__ copies the globs namespace, which we don't want # DocTest.__init__ copies the globs namespace, which we don't want
test.globs = ns test.globs = ns
# also don't clear the globs namespace after running the doctest # also don't clear the globs namespace after running the doctest