mtest: move --print-errorlogs output during the test run

Print the (shortened) output of the failed tests as they happen.
If neither --verbose nor --print-errorlogs was specified, omit the
summary of failures, because it is pretty much the same as the earlier
output of "meson test".
pull/8200/head
Paolo Bonzini 4 years ago
parent 4d6a0cc174
commit bb9d8b5b80
  1. 31
      mesonbuild/mtest.py

@ -600,15 +600,21 @@ class ConsoleLogger(TestLogger):
self.running_tests.move_to_end(test, last=False) self.running_tests.move_to_end(test, last=False)
self.request_update() self.request_update()
def shorten_log(self, result: 'TestRun') -> str: def shorten_log(self, harness: 'TestHarness', result: 'TestRun') -> str:
if not harness.options.verbose and not harness.options.print_errorlogs:
return ''
log = result.get_log(mlog.colorize_console()) log = result.get_log(mlog.colorize_console())
if harness.options.verbose:
return log
lines = log.splitlines() lines = log.splitlines()
if len(lines) < 100: if len(lines) < 100:
return log return log
else: else:
return str(mlog.bold('Listing only the last 100 lines from a long log.\n')) + '\n'.join(lines[-100:]) return str(mlog.bold('Listing only the last 100 lines from a long log.\n')) + '\n'.join(lines[-100:])
def print_log(self, harness: 'TestHarness', result: 'TestRun', log: str) -> None: def print_log(self, harness: 'TestHarness', result: 'TestRun') -> None:
if not harness.options.verbose: if not harness.options.verbose:
cmdline = result.cmdline cmdline = result.cmdline
if not cmdline: if not cmdline:
@ -616,6 +622,7 @@ class ConsoleLogger(TestLogger):
return return
print(result.res.get_command_marker() + cmdline) print(result.res.get_command_marker() + cmdline)
log = self.shorten_log(harness, result)
if log: if log:
print(self.output_start) print(self.output_start)
print_safe(log, end='') print_safe(log, end='')
@ -637,10 +644,8 @@ class ConsoleLogger(TestLogger):
else: else:
print(harness.format(result, mlog.colorize_console(), max_left_width=self.max_left_width), print(harness.format(result, mlog.colorize_console(), max_left_width=self.max_left_width),
flush=True) flush=True)
if harness.options.verbose: if harness.options.verbose or result.res.is_bad():
self.print_log(harness, result, result.get_log(mlog.colorize_console())) self.print_log(harness, result)
elif result.res.is_bad():
self.print_log(harness, result, '')
self.request_update() self.request_update()
@ -650,18 +655,8 @@ class ConsoleLogger(TestLogger):
if self.progress_task: if self.progress_task:
await self.progress_task await self.progress_task
if harness.collected_failures: if harness.collected_failures and \
if harness.options.print_errorlogs: (harness.options.print_errorlogs or harness.options.verbose):
if len(harness.collected_failures) > 10:
print('\n\nThe output from 10 first failed tests:\n')
else:
print('\n\nThe output from the failed tests:\n')
for i, result in enumerate(harness.collected_failures, 1):
print(harness.format(result, mlog.colorize_console()))
self.print_log(result, self.shorten_log(result))
if i == 10:
break
print("\nSummary of Failures:\n") print("\nSummary of Failures:\n")
for i, result in enumerate(harness.collected_failures, 1): for i, result in enumerate(harness.collected_failures, 1):
print(harness.format(result, mlog.colorize_console())) print(harness.format(result, mlog.colorize_console()))

Loading…
Cancel
Save