mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Unittest - Readability and information improvements with test failures
This commit is contained in:
parent
e070500d26
commit
07cd033cbc
2 changed files with 30 additions and 11 deletions
|
@ -5,13 +5,18 @@ import signal
|
|||
class CommandError(Exception):
|
||||
def __init__(self, cmd, code, out, err, msg=None):
|
||||
if msg is None:
|
||||
msg_suffix = (
|
||||
"\n*** Start STDOUT ***\n{2}\n*** End STDOUT ***\n"
|
||||
"\n*** Start STDERR ***\n{3}\n*** End STDERR ***\n"
|
||||
)
|
||||
if code == signal.SIGABRT:
|
||||
self.msg = ("Command '{0}' was aborted, likely due to not "
|
||||
"finishing in due time. The exit code was "
|
||||
"'{1}':\nStdout: '{2}'\nStderr: '{3}'")
|
||||
"finishing in due time. The exit code was '{1}'.\n"
|
||||
) + msg_suffix
|
||||
else:
|
||||
self.msg = ("Command '{0}' finished with unexpected exit code "
|
||||
"'{1}':\nStdout: '{2}'\nStderr: '{3}'")
|
||||
self.msg = ("Command '{0}' finished with unexpected exit "
|
||||
"code '{1}'.\n"
|
||||
) + msg_suffix
|
||||
else:
|
||||
self.msg = msg
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
import sys
|
||||
import unittest
|
||||
import warnings
|
||||
import traceback
|
||||
|
||||
|
||||
class TAPTestResult(unittest.result.TestResult):
|
||||
|
@ -106,21 +107,34 @@ class TAPTestResult(unittest.result.TestResult):
|
|||
try:
|
||||
exception, msg, _ = err
|
||||
except (TypeError, ValueError):
|
||||
exception = ""
|
||||
exception_name = ""
|
||||
msg = err
|
||||
trace_msg = None
|
||||
else:
|
||||
exception = exception.__name__
|
||||
exception_name = exception.__name__
|
||||
msg = str(msg)
|
||||
|
||||
# Extract line where error happened for easier debugging
|
||||
_, _, tb = sys.exc_info()
|
||||
trace = traceback.extract_tb(tb)
|
||||
for t in trace:
|
||||
# t = (filename, line_number, function_name, raw_line)
|
||||
if t[2].startswith("test"):
|
||||
trace_msg = "on file {0} line {1} in {2}: '{3}'".format(*t)
|
||||
break
|
||||
|
||||
if status:
|
||||
if status == "SKIP":
|
||||
self.stream.writeln("skip {0} - {1}".format(self.testsRun,
|
||||
desc))
|
||||
self.stream.writeln("skip {0} - {1}".format(
|
||||
self.testsRun, desc))
|
||||
else:
|
||||
self.stream.writeln("not ok {0} - {1}".format(self.testsRun,
|
||||
desc))
|
||||
self.stream.writeln("# {0}: {1}".format(status, exception))
|
||||
self.stream.writeln("not ok {0} - {1}".format(
|
||||
self.testsRun, desc))
|
||||
self.stream.writeln("# {0}: {1} {2}:".format(
|
||||
status, exception_name, trace_msg))
|
||||
|
||||
padding = " " * (len(status) + 3)
|
||||
|
||||
for line in msg.splitlines():
|
||||
# Force displaying new-line characters as literal new lines
|
||||
line = line.replace("\\n", "\n# ")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue