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:
Andreas Hansson 2012-04-14 05:44:27 -04:00
parent b6aa6d55eb
commit b9bc530ad2
3 changed files with 36 additions and 9 deletions

View file

@ -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):

View file

@ -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)

View file

@ -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)