summaryrefslogtreecommitdiffstats
path: root/Lib/unittest/runner.py
diff options
context:
space:
mode:
authorMichael Foord <fuzzyman@voidspace.org.uk>2010-02-10 14:25:12 (GMT)
committerMichael Foord <fuzzyman@voidspace.org.uk>2010-02-10 14:25:12 (GMT)
commitdb43b5a1f5a4b580b68fa0eef0d03d604d7f8805 (patch)
tree4e8a140ec095adedd3e61d3087f934f3f682f739 /Lib/unittest/runner.py
parent42fb6ab49128f14cd353ec86a177ddda6763812e (diff)
downloadcpython-db43b5a1f5a4b580b68fa0eef0d03d604d7f8805.zip
cpython-db43b5a1f5a4b580b68fa0eef0d03d604d7f8805.tar.gz
cpython-db43b5a1f5a4b580b68fa0eef0d03d604d7f8805.tar.bz2
Issue 7893 and Issue 7588
Diffstat (limited to 'Lib/unittest/runner.py')
-rw-r--r--Lib/unittest/runner.py32
1 files changed, 19 insertions, 13 deletions
diff --git a/Lib/unittest/runner.py b/Lib/unittest/runner.py
index 3afbc0e..cbec296 100644
--- a/Lib/unittest/runner.py
+++ b/Lib/unittest/runner.py
@@ -22,7 +22,7 @@ class _WritelnDecorator(object):
self.write('\n') # text-mode streams translate to \r\n if needed
-class _TextTestResult(result.TestResult):
+class TextTestResult(result.TestResult):
"""A test result class that can print formatted text results to a stream.
Used by TextTestRunner.
@@ -31,27 +31,28 @@ class _TextTestResult(result.TestResult):
separator2 = '-' * 70
def __init__(self, stream, descriptions, verbosity):
- super(_TextTestResult, self).__init__()
+ super(TextTestResult, self).__init__()
self.stream = stream
self.showAll = verbosity > 1
self.dots = verbosity == 1
self.descriptions = descriptions
def getDescription(self, test):
- if self.descriptions:
- return test.shortDescription() or str(test)
+ doc_first_line = test.shortDescription()
+ if self.descriptions and doc_first_line:
+ return '\n'.join((str(test), doc_first_line))
else:
return str(test)
def startTest(self, test):
- super(_TextTestResult, self).startTest(test)
+ super(TextTestResult, self).startTest(test)
if self.showAll:
self.stream.write(self.getDescription(test))
self.stream.write(" ... ")
self.stream.flush()
def addSuccess(self, test):
- super(_TextTestResult, self).addSuccess(test)
+ super(TextTestResult, self).addSuccess(test)
if self.showAll:
self.stream.writeln("ok")
elif self.dots:
@@ -59,7 +60,7 @@ class _TextTestResult(result.TestResult):
self.stream.flush()
def addError(self, test, err):
- super(_TextTestResult, self).addError(test, err)
+ super(TextTestResult, self).addError(test, err)
if self.showAll:
self.stream.writeln("ERROR")
elif self.dots:
@@ -67,7 +68,7 @@ class _TextTestResult(result.TestResult):
self.stream.flush()
def addFailure(self, test, err):
- super(_TextTestResult, self).addFailure(test, err)
+ super(TextTestResult, self).addFailure(test, err)
if self.showAll:
self.stream.writeln("FAIL")
elif self.dots:
@@ -75,7 +76,7 @@ class _TextTestResult(result.TestResult):
self.stream.flush()
def addSkip(self, test, reason):
- super(_TextTestResult, self).addSkip(test, reason)
+ super(TextTestResult, self).addSkip(test, reason)
if self.showAll:
self.stream.writeln("skipped {0!r}".format(reason))
elif self.dots:
@@ -83,7 +84,7 @@ class _TextTestResult(result.TestResult):
self.stream.flush()
def addExpectedFailure(self, test, err):
- super(_TextTestResult, self).addExpectedFailure(test, err)
+ super(TextTestResult, self).addExpectedFailure(test, err)
if self.showAll:
self.stream.writeln("expected failure")
elif self.dots:
@@ -91,7 +92,7 @@ class _TextTestResult(result.TestResult):
self.stream.flush()
def addUnexpectedSuccess(self, test):
- super(_TextTestResult, self).addUnexpectedSuccess(test)
+ super(TextTestResult, self).addUnexpectedSuccess(test)
if self.showAll:
self.stream.writeln("unexpected success")
elif self.dots:
@@ -118,13 +119,18 @@ class TextTestRunner(object):
It prints out the names of tests as they are run, errors as they
occur, and a summary of the results at the end of the test run.
"""
- def __init__(self, stream=sys.stderr, descriptions=1, verbosity=1):
+ resultclass = TextTestResult
+
+ def __init__(self, stream=sys.stderr, descriptions=True, verbosity=1,
+ resultclass=None):
self.stream = _WritelnDecorator(stream)
self.descriptions = descriptions
self.verbosity = verbosity
+ if resultclass is not None:
+ self.resultclass = resultclass
def _makeResult(self):
- return _TextTestResult(self.stream, self.descriptions, self.verbosity)
+ return self.resultclass(self.stream, self.descriptions, self.verbosity)
def run(self, test):
"Run the given test case or test suite."