Regression: Add ANSI colours to highlight test status
This patch adds a very basic pretty-printing of the test status (passed or failed) to highlight failing tests even more: green for passed, and red for failed. The printing only uses ANSI it the target output is a tty and supports ANSI colours. Hence, any regression scripts that are outputting to files or sending e-mails etc should still be fine.
This commit is contained in:
parent
b6aa6d55eb
commit
b9bc530ad2
3 changed files with 36 additions and 9 deletions
12
SConstruct
12
SConstruct
|
@ -120,6 +120,7 @@ extra_python_paths = [
|
||||||
sys.path[1:1] = extra_python_paths
|
sys.path[1:1] = extra_python_paths
|
||||||
|
|
||||||
from m5.util import compareVersions, readCommand
|
from m5.util import compareVersions, readCommand
|
||||||
|
from m5.util.terminal import get_termcap
|
||||||
|
|
||||||
help_texts = {
|
help_texts = {
|
||||||
"options" : "",
|
"options" : "",
|
||||||
|
@ -169,14 +170,7 @@ AddLocalOption('--update-ref', dest='update_ref', action='store_true',
|
||||||
AddLocalOption('--verbose', dest='verbose', action='store_true',
|
AddLocalOption('--verbose', dest='verbose', action='store_true',
|
||||||
help='Print full tool command lines')
|
help='Print full tool command lines')
|
||||||
|
|
||||||
use_colors = GetOption('use_colors')
|
termcap = get_termcap(GetOption('use_colors'))
|
||||||
if use_colors:
|
|
||||||
from m5.util.terminal import termcap
|
|
||||||
elif use_colors is None:
|
|
||||||
# option unspecified; default behavior is to use colors iff isatty
|
|
||||||
from m5.util.terminal import tty_termcap as termcap
|
|
||||||
else:
|
|
||||||
from m5.util.terminal import no_termcap as termcap
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
#
|
#
|
||||||
|
@ -462,6 +456,8 @@ class Transform(object):
|
||||||
|
|
||||||
Export('Transform')
|
Export('Transform')
|
||||||
|
|
||||||
|
# enable the regression script to use the termcap
|
||||||
|
main['TERMCAP'] = termcap
|
||||||
|
|
||||||
if GetOption('verbose'):
|
if GetOption('verbose'):
|
||||||
def MakeAction(action, string, *args, **kwargs):
|
def MakeAction(action, string, *args, **kwargs):
|
||||||
|
|
|
@ -93,6 +93,15 @@ if sys.stdout.isatty():
|
||||||
else:
|
else:
|
||||||
tty_termcap = no_termcap
|
tty_termcap = no_termcap
|
||||||
|
|
||||||
|
def get_termcap(use_colors = None):
|
||||||
|
if use_colors:
|
||||||
|
return termcap
|
||||||
|
elif use_colors is None:
|
||||||
|
# option unspecified; default behavior is to use colors iff isatty
|
||||||
|
return tty_termcap
|
||||||
|
else:
|
||||||
|
return no_termcap
|
||||||
|
|
||||||
def test_termcap(obj):
|
def test_termcap(obj):
|
||||||
for c_name in color_names:
|
for c_name in color_names:
|
||||||
c_str = getattr(obj, c_name)
|
c_str = getattr(obj, c_name)
|
||||||
|
|
|
@ -38,6 +38,9 @@ Import('env')
|
||||||
|
|
||||||
env['DIFFOUT'] = File('diff-out')
|
env['DIFFOUT'] = File('diff-out')
|
||||||
|
|
||||||
|
# get the termcap from the environment
|
||||||
|
termcap = env['TERMCAP']
|
||||||
|
|
||||||
# Dict that accumulates lists of tests by category (quick, medium, long)
|
# Dict that accumulates lists of tests by category (quick, medium, long)
|
||||||
env.Tests = {}
|
env.Tests = {}
|
||||||
|
|
||||||
|
@ -171,7 +174,26 @@ def run_test_string(target, source, env):
|
||||||
testAction = env.Action(run_test, run_test_string)
|
testAction = env.Action(run_test, run_test_string)
|
||||||
|
|
||||||
def print_test(target, source, env):
|
def print_test(target, source, env):
|
||||||
print '***** ' + contents(source[0])
|
# print the status with colours to make it easier to see what
|
||||||
|
# passed and what failed
|
||||||
|
line = contents(source[0])
|
||||||
|
|
||||||
|
# split the line to words and get the last one
|
||||||
|
words = line.split()
|
||||||
|
status = words[-1]
|
||||||
|
|
||||||
|
# if the test failed make it red, if it passed make it green, and
|
||||||
|
# skip the punctuation
|
||||||
|
if status == "FAILED!":
|
||||||
|
status = termcap.Red + status[:-1] + termcap.Normal + status[-1]
|
||||||
|
elif status == "passed.":
|
||||||
|
status = termcap.Green + status[:-1] + termcap.Normal + status[-1]
|
||||||
|
|
||||||
|
# put it back in the list and join with space
|
||||||
|
words[-1] = status
|
||||||
|
line = " ".join(words)
|
||||||
|
|
||||||
|
print '***** ' + line
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
printAction = env.Action(print_test, strfunction = None)
|
printAction = env.Action(print_test, strfunction = None)
|
||||||
|
|
Loading…
Reference in a new issue