Merge pull request #14 in TM/task from ~UNODE/task:2.4.0 to 2.4.0
* commit '07cd033cbc6d54e1bee6b3044e17fef5ce87d236': Unittest - Readability and information improvements with test failures
This commit is contained in:
@@ -5,13 +5,18 @@ import signal
|
|||||||
class CommandError(Exception):
|
class CommandError(Exception):
|
||||||
def __init__(self, cmd, code, out, err, msg=None):
|
def __init__(self, cmd, code, out, err, msg=None):
|
||||||
if msg is 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:
|
if code == signal.SIGABRT:
|
||||||
self.msg = ("Command '{0}' was aborted, likely due to not "
|
self.msg = ("Command '{0}' was aborted, likely due to not "
|
||||||
"finishing in due time. The exit code was "
|
"finishing in due time. The exit code was '{1}'.\n"
|
||||||
"'{1}':\nStdout: '{2}'\nStderr: '{3}'")
|
) + msg_suffix
|
||||||
else:
|
else:
|
||||||
self.msg = ("Command '{0}' finished with unexpected exit code "
|
self.msg = ("Command '{0}' finished with unexpected exit "
|
||||||
"'{1}':\nStdout: '{2}'\nStderr: '{3}'")
|
"code '{1}'.\n"
|
||||||
|
) + msg_suffix
|
||||||
else:
|
else:
|
||||||
self.msg = msg
|
self.msg = msg
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
import warnings
|
import warnings
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
|
||||||
class TAPTestResult(unittest.result.TestResult):
|
class TAPTestResult(unittest.result.TestResult):
|
||||||
@@ -106,21 +107,34 @@ class TAPTestResult(unittest.result.TestResult):
|
|||||||
try:
|
try:
|
||||||
exception, msg, _ = err
|
exception, msg, _ = err
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
exception = ""
|
exception_name = ""
|
||||||
msg = err
|
msg = err
|
||||||
|
trace_msg = None
|
||||||
else:
|
else:
|
||||||
exception = exception.__name__
|
exception_name = exception.__name__
|
||||||
msg = str(msg)
|
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:
|
||||||
if status == "SKIP":
|
if status == "SKIP":
|
||||||
self.stream.writeln("skip {0} - {1}".format(self.testsRun,
|
self.stream.writeln("skip {0} - {1}".format(
|
||||||
desc))
|
self.testsRun, desc))
|
||||||
else:
|
else:
|
||||||
self.stream.writeln("not ok {0} - {1}".format(self.testsRun,
|
self.stream.writeln("not ok {0} - {1}".format(
|
||||||
desc))
|
self.testsRun, desc))
|
||||||
self.stream.writeln("# {0}: {1}".format(status, exception))
|
self.stream.writeln("# {0}: {1} {2}:".format(
|
||||||
|
status, exception_name, trace_msg))
|
||||||
|
|
||||||
padding = " " * (len(status) + 3)
|
padding = " " * (len(status) + 3)
|
||||||
|
|
||||||
for line in msg.splitlines():
|
for line in msg.splitlines():
|
||||||
# Force displaying new-line characters as literal new lines
|
# Force displaying new-line characters as literal new lines
|
||||||
line = line.replace("\\n", "\n# ")
|
line = line.replace("\\n", "\n# ")
|
||||||
|
|||||||
Reference in New Issue
Block a user