summaryrefslogtreecommitdiffstats
path: root/Lib/doctest.py
diff options
context:
space:
mode:
authorEdward Loper <edloper@gradient.cis.upenn.edu>2004-08-26 01:19:50 (GMT)
committerEdward Loper <edloper@gradient.cis.upenn.edu>2004-08-26 01:19:50 (GMT)
commitaacf0833886c30f900fe18db1367d887cc0d1172 (patch)
tree70d0b7a8b49702b132a93b4d6e8cc8078d1ab2fc /Lib/doctest.py
parent0e448073d6afed4806a8dbd3261057a681023993 (diff)
downloadcpython-aacf0833886c30f900fe18db1367d887cc0d1172.zip
cpython-aacf0833886c30f900fe18db1367d887cc0d1172.tar.gz
cpython-aacf0833886c30f900fe18db1367d887cc0d1172.tar.bz2
- Changed the output of report_start() and report_unexpected_exception()
to be more consistent with report_failure() - If `want` or `got` is empty, then print "Expected nothing\n" or "Got nothing\n" rather than "Expected:\n" or "Got:\n" - Got rid of _tag_msg
Diffstat (limited to 'Lib/doctest.py')
-rw-r--r--Lib/doctest.py60
1 files changed, 24 insertions, 36 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 2cd96ba..dfa1848 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -343,25 +343,13 @@ def _normalize_module(module, depth=2):
else:
raise TypeError("Expected a module, string, or None")
-def _tag_msg(tag, msg, indent=' '):
+def _indent(s, indent=4):
"""
- Return a string that displays a tag-and-message pair nicely,
- keeping the tag and its message on the same line when that
- makes sense. If the message is displayed on separate lines,
- then `indent` is added to the beginning of each line.
+ Add the given number of space characters to the beginning every
+ non-blank line in `s`, and return the result.
"""
- # If the message doesn't end in a newline, then add one.
- if msg[-1:] != '\n':
- msg += '\n'
- # If the message is short enough, and contains no internal
- # newlines, then display it on the same line as the tag.
- # Otherwise, display the tag on its own line.
- if (len(tag) + len(msg) < 75 and
- msg.find('\n', 0, len(msg)-1) == -1):
- return '%s: %s' % (tag, msg)
- else:
- msg = '\n'.join([indent+l for l in msg[:-1].split('\n')])
- return '%s:\n%s\n' % (tag, msg)
+ # This regexp matches the start of non-blank lines:
+ return re.sub('(?m)^(?!$)', indent*' ', s)
def _exception_traceback(exc_info):
"""
@@ -1273,8 +1261,12 @@ class DocTestRunner:
example. (Only displays a message if verbose=True)
"""
if self._verbose:
- out(_tag_msg("Trying", example.source) +
- _tag_msg("Expecting", example.want or "nothing"))
+ if example.want:
+ out('Trying:\n' + _indent(example.source) +
+ 'Expecting:\n' + _indent(example.want))
+ else:
+ out('Trying:\n' + _indent(example.source) +
+ 'Expecting nothing\n')
def report_success(self, out, test, example, got):
"""
@@ -1298,7 +1290,7 @@ class DocTestRunner:
Report that the given example raised an unexpected exception.
"""
out(self._failure_header(test, example) +
- _tag_msg("Exception raised", _exception_traceback(exc_info)))
+ 'Exception raised:\n' + _indent(_exception_traceback(exc_info)))
def _failure_header(self, test, example):
out = [self.DIVIDER]
@@ -1313,10 +1305,8 @@ class DocTestRunner:
out.append('Line %s, in %s' % (example.lineno+1, test.name))
out.append('Failed example:')
source = example.source
- if source.endswith('\n'):
- source = source[:-1]
- out.append(' ' + '\n '.join(source.split('\n')))
- return '\n'.join(out)+'\n'
+ out.append(_indent(source))
+ return '\n'.join(out)
#/////////////////////////////////////////////////////////////////
# DocTest Running
@@ -1612,10 +1602,8 @@ class OutputChecker:
Return a string describing the differences between the
expected output for an example (`want`) and the actual output
(`got`). `optionflags` is the set of option flags used to
- compare `want` and `got`. `indent` is the indentation of the
- original example.
+ compare `want` and `got`.
"""
-
# If <BLANKLINE>s are being used, then replace blank lines
# with <BLANKLINE> in the actual output string.
if not (optionflags & DONT_ACCEPT_BLANKLINE):
@@ -1645,18 +1633,18 @@ class OutputChecker:
assert 0, 'Bad diff option'
# Remove trailing whitespace on diff output.
diff = [line.rstrip() + '\n' for line in diff]
- return _tag_msg("Differences (" + kind + ")",
- ''.join(diff))
+ return 'Differences (%s):\n' % kind + _indent(''.join(diff))
# If we're not using diff, then simply list the expected
# output followed by the actual output.
- if want.endswith('\n'):
- want = want[:-1]
- want = ' ' + '\n '.join(want.split('\n'))
- if got.endswith('\n'):
- got = got[:-1]
- got = ' ' + '\n '.join(got.split('\n'))
- return "Expected:\n%s\nGot:\n%s\n" % (want, got)
+ if want and got:
+ return 'Expected:\n%sGot:\n%s' % (_indent(want), _indent(got))
+ elif want:
+ return 'Expected:\n%sGot nothing\n' % _indent(want)
+ elif got:
+ return 'Expected nothing\nGot:\n%s' % _indent(got)
+ else:
+ return 'Expected nothing\nGot nothing\n'
class DocTestFailure(Exception):
"""A DocTest example has failed in debugging mode.