diff options
Diffstat (limited to 'Tools/Scripts/webkitpy/test/printer.py')
-rw-r--r-- | Tools/Scripts/webkitpy/test/printer.py | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/Tools/Scripts/webkitpy/test/printer.py b/Tools/Scripts/webkitpy/test/printer.py index 0ec3035b3..b5bea3f9f 100644 --- a/Tools/Scripts/webkitpy/test/printer.py +++ b/Tools/Scripts/webkitpy/test/printer.py @@ -24,7 +24,7 @@ import logging import StringIO -from webkitpy.common.system import outputcapture +from webkitpy.common.system.systemhost import SystemHost from webkitpy.layout_tests.views.metered_stream import MeteredStream _log = logging.getLogger(__name__) @@ -36,7 +36,7 @@ class Printer(object): self.meter = None self.options = options self.num_tests = 0 - self.num_completed = 0 + self.num_started = 0 self.num_errors = 0 self.num_failures = 0 self.running_tests = [] @@ -57,7 +57,8 @@ class Printer(object): elif options.verbose == 2: log_level = logging.DEBUG - self.meter = MeteredStream(self.stream, (options.verbose == 2)) + self.meter = MeteredStream(self.stream, (options.verbose == 2), + number_of_columns=SystemHost().platform.terminal_width()) handler = logging.StreamHandler(self.stream) # We constrain the level on the handler rather than on the root @@ -102,6 +103,8 @@ class Printer(object): handler.addFilter(testing_filter) if self.options.pass_through: + # FIXME: Can't import at top of file, as outputcapture needs unittest2 + from webkitpy.common.system import outputcapture outputcapture.OutputCapture.stream_wrapper = _CaptureAndPassThroughStream def write_update(self, msg): @@ -141,7 +144,7 @@ class Printer(object): if self.options.timing: suffix += ' %.4fs' % test_time - self.num_completed += 1 + self.num_started += 1 if test_name == self.running_tests[0]: self.completed_tests.insert(0, [test_name, suffix, lines]) @@ -159,11 +162,23 @@ class Printer(object): self.completed_tests = [] def _test_line(self, test_name, suffix): - return '[%d/%d] %s%s' % (self.num_completed, self.num_tests, test_name, suffix) + format_string = '[%d/%d] %s%s' + status_line = format_string % (self.num_started, self.num_tests, test_name, suffix) + if len(status_line) > self.meter.number_of_columns(): + overflow_columns = len(status_line) - self.meter.number_of_columns() + ellipsis = '...' + if len(test_name) < overflow_columns + len(ellipsis) + 3: + # We don't have enough space even if we elide, just show the test method name. + test_name = test_name.split('.')[-1] + else: + new_length = len(test_name) - overflow_columns - len(ellipsis) + prefix = int(new_length / 2) + test_name = test_name[:prefix] + ellipsis + test_name[-(new_length - prefix):] + return format_string % (self.num_started, self.num_tests, test_name, suffix) def print_result(self, run_time): write = self.meter.writeln - write('Ran %d test%s in %.3fs' % (self.num_completed, self.num_completed != 1 and "s" or "", run_time)) + write('Ran %d test%s in %.3fs' % (self.num_started, self.num_started != 1 and "s" or "", run_time)) if self.num_failures or self.num_errors: write('FAILED (failures=%d, errors=%d)\n' % (self.num_failures, self.num_errors)) else: |