From 2201e2bca66603a33d0341a11427f09872eddfcf Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 19 Nov 2020 10:20:46 +0100 Subject: [PATCH] mtest: improve colorization Instead of colorizing the whole status line, only colorize the word representing the outcome of the test (SKIP, OK, FAIL, etc.). This is less intrusive, so the patch also does the following changes: - colorize OK and EXPECTEDFAIL, respectively as green and yellow - colorize the summary of failures as well. Signed-off-by: Paolo Bonzini --- mesonbuild/mtest.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py index ad8ad624e..b8db80d89 100644 --- a/mesonbuild/mtest.py +++ b/mesonbuild/mtest.py @@ -188,6 +188,16 @@ class TestResult(enum.Enum): return self in {TestResult.FAIL, TestResult.TIMEOUT, TestResult.INTERRUPT, TestResult.UNEXPECTEDPASS, TestResult.ERROR} + def get_text(self, colorize: bool) -> str: + result_str = '{res:{reslen}}'.format(res=self.value, reslen=self.maxlen()) + if self.is_bad(): + decorator = mlog.red + elif self in (TestResult.SKIP, TestResult.EXPECTEDFAIL): + decorator = mlog.yellow + else: + decorator = mlog.green + return decorator(result_str).get_text(colorize) + class TAPParser: Plan = namedtuple('Plan', ['count', 'late', 'skipped', 'explanation']) @@ -967,23 +977,17 @@ class TestHarness: sys.exit('Unknown test result encountered: {}'.format(result.res)) def format(self, result: TestRun, colorize: bool) -> str: - result_str = '{num:{numlen}}/{testcount} {name:{name_max_len}} {res:{reslen}} {dur:.2f}s'.format( + result_str = '{num:{numlen}}/{testcount} {name:{name_max_len}} {res} {dur:.2f}s'.format( numlen=len(str(self.test_count)), num=result.num, testcount=self.test_count, name_max_len=self.name_max_len, name=result.name, - reslen=TestResult.maxlen(), - res=result.res.value, + res=result.res.get_text(colorize), dur=result.duration) if result.res is TestResult.FAIL: result_str += ' ' + returncode_to_status(result.returncode) - decorator = mlog.plain - if result.res.is_bad(): - decorator = mlog.red - elif result.res is TestResult.SKIP: - decorator = mlog.yellow - return decorator(result_str).get_text(colorize) + return result_str def print_stats(self, result: TestRun) -> None: if result.res.is_bad(): @@ -1009,7 +1013,7 @@ class TestHarness: if self.logfile: self.logfile.write("\nSummary of Failures:\n\n") for i, result in enumerate(self.collected_failures, 1): - print(self.format(result, False)) + print(self.format(result, mlog.colorize_console())) if self.logfile: self.logfile.write(self.format(result, False) + '\n')