mtest: refactor common condition into a property of TestRun

For a test to be displayed to stdout without buffering, it has to be
1) in verbose mode 2) not executed in parallel with others
3) not parsed, i.e. not TAP or Rust.  Include these three
conditions in a new property of stdout and use it in the
three places where it matters: when printing the initial
and final delimiters of the output, and when deciding the
console mode to use.

Suggested-by: Jussi Pakkanen <jpakkane@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
pull/10004/head
Paolo Bonzini 3 years ago
parent c3f145ca2b
commit 02b739feae
  1. 14
      mesonbuild/mtest.py

@ -606,11 +606,9 @@ class ConsoleLogger(TestLogger):
max_left_width=self.max_left_width, max_left_width=self.max_left_width,
right=test.res.get_text(mlog.colorize_console()))) right=test.res.get_text(mlog.colorize_console())))
print(test.res.get_command_marker() + test.cmdline) print(test.res.get_command_marker() + test.cmdline)
if test.needs_parsing: if test.direct_stdout:
pass
elif not test.is_parallel:
print(self.output_start, flush=True) print(self.output_start, flush=True)
else: elif not test.needs_parsing:
print(flush=True) print(flush=True)
self.started_tests += 1 self.started_tests += 1
@ -665,7 +663,7 @@ class ConsoleLogger(TestLogger):
if not harness.options.quiet or not result.res.is_ok(): if not harness.options.quiet or not result.res.is_ok():
self.flush() self.flush()
if result.verbose and not result.is_parallel and result.cmdline and not result.needs_parsing: if result.cmdline and result.direct_stdout:
print(self.output_end) print(self.output_end)
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))
else: else:
@ -898,6 +896,10 @@ class TestRun:
self._num = TestRun.TEST_NUM self._num = TestRun.TEST_NUM
return self._num return self._num
@property
def direct_stdout(self) -> bool:
return self.verbose and not self.is_parallel and not self.needs_parsing
@property @property
def detail(self) -> str: def detail(self) -> str:
if self.res is TestResult.PENDING: if self.res is TestResult.PENDING:
@ -1340,7 +1342,7 @@ class SingleTestRunner:
if self.options.gdb: if self.options.gdb:
self.console_mode = ConsoleUser.GDB self.console_mode = ConsoleUser.GDB
elif self.runobj.verbose and not is_parallel and not self.runobj.needs_parsing: elif self.runobj.direct_stdout:
self.console_mode = ConsoleUser.STDOUT self.console_mode = ConsoleUser.STDOUT
else: else:
self.console_mode = ConsoleUser.LOGGER self.console_mode = ConsoleUser.LOGGER

Loading…
Cancel
Save