summaryrefslogtreecommitdiff
path: root/testlib.py
diff options
context:
space:
mode:
authorEmile Anclin <emile.anclin@logilab.fr>2010-12-06 18:04:49 +0100
committerEmile Anclin <emile.anclin@logilab.fr>2010-12-06 18:04:49 +0100
commitead5397668f00d6e3ed57d2e87366ffdb58f38da (patch)
tree844d39bc6b2b40bc76e0523b16a4806697d4aa17 /testlib.py
parent1afe10bbe658165228b992e4307bc8e365059607 (diff)
downloadlogilab-common-ead5397668f00d6e3ed57d2e87366ffdb58f38da.tar.gz
fix: shouldn't remove color option
Diffstat (limited to 'testlib.py')
-rw-r--r--testlib.py43
1 files changed, 41 insertions, 2 deletions
diff --git a/testlib.py b/testlib.py
index 7fab1f6..99808e2 100644
--- a/testlib.py
+++ b/testlib.py
@@ -25,6 +25,7 @@ additional facilities.
Command line options:
-v verbose -- run tests in verbose mode with output to stdout
+ -q quiet -- don't print anything except if a test fails
-t testdir -- directory where the tests will be found
-x exclude -- add a test to exclude
-p profile -- profiled execution
@@ -217,8 +218,8 @@ def start_interactive_mode(result):
class SkipAwareTestResult(unittest._TextTestResult):
- def __init__(self, stream, descriptions, verbosity, exitfirst=False,
- pdbmode=False, cvg=None):
+ def __init__(self, stream, descriptions, verbosity,
+ exitfirst=False, pdbmode=False, cvg=None, colorize=False):
super(SkipAwareTestResult, self).__init__(stream,
descriptions, verbosity)
self.skipped = []
@@ -228,6 +229,7 @@ class SkipAwareTestResult(unittest._TextTestResult):
self.exitfirst = exitfirst
self.pdbmode = pdbmode
self.cvg = cvg
+ self.colorize = colorize
self.pdbclass = Debugger
self.verbose = verbosity > 1
@@ -247,6 +249,43 @@ class SkipAwareTestResult(unittest._TextTestResult):
for frameinfo in dropwhile(invalid, frames):
yield frameinfo
+ def _exc_info_to_string(self, err, test):
+ """Converts a sys.exc_info()-style tuple of values into a string.
+
+ This method is overridden here because we want to colorize
+ lines if --color is passed, and display local variables if
+ --verbose is passed
+ """
+ exctype, exc, tb = err
+ output = ['Traceback (most recent call last)']
+ frames = inspect.getinnerframes(tb)
+ colorize = self.colorize
+ frames = enumerate(self._iter_valid_frames(frames))
+ for index, (frame, filename, lineno, funcname, ctx, ctxindex) in frames:
+ filename = osp.abspath(filename)
+ if ctx is None: # pyc files or C extensions for instance
+ source = '<no source available>'
+ else:
+ source = ''.join(ctx)
+ if colorize:
+ filename = textutils.colorize_ansi(filename, 'magenta')
+ source = colorize_source(source)
+ output.append(' File "%s", line %s, in %s' % (filename, lineno, funcname))
+ output.append(' %s' % source.strip())
+ if self.verbose:
+ output.append('%r == %r' % (dir(frame), test.__module__))
+ output.append('')
+ output.append(' ' + ' local variables '.center(66, '-'))
+ for varname, value in sorted(frame.f_locals.items()):
+ output.append(' %s: %r' % (varname, value))
+ if varname == 'self': # special handy processing for self
+ for varname, value in sorted(vars(value).items()):
+ output.append(' self.%s: %r' % (varname, value))
+ output.append(' ' + '-' * 66)
+ output.append('')
+ output.append(''.join(traceback.format_exception_only(exctype, exc)))
+ return '\n'.join(output)
+
def addError(self, test, err):
"""err -> (exc_type, exc, tcbk)"""
exc_type, exc, _ = err