Modified: trunk/Tools/ChangeLog (127477 => 127478)
--- trunk/Tools/ChangeLog 2012-09-04 18:42:03 UTC (rev 127477)
+++ trunk/Tools/ChangeLog 2012-09-04 18:45:35 UTC (rev 127478)
@@ -1,3 +1,28 @@
+2012-09-04 Tony Chang <[email protected]>
+
+ Elide test names when running new-run-webkit-tests
+ https://bugs.webkit.org/show_bug.cgi?id=95626
+
+ Reviewed by Dirk Pranke.
+
+ When the test name exceeds the number of terminal columns, it leaves
+ text on the screen. Avoid this by eliding the test name when running
+ tests. This is similar to what ninja does when compiling.
+
+ * Scripts/webkitpy/layout_tests/views/metered_stream.py:
+ (MeteredStream):
+ (MeteredStream.number_of_columns): Helper method to get number of
+ terminal columns. Won't work on Win32 python, but meh.
+ * Scripts/webkitpy/layout_tests/views/printing.py:
+ (Printer._test_status_line): New method for eliding the text. Doesn't use \u2026
+ because stderr appears to be ascii only.
+ (Printer.print_started_test): Route through _test_status_line.
+ (Printer.print_finished_test): Route through _test_status_line.
+ (Printer._print_test_trace): Route through _test_status_line.
+ (Printer._print_baseline): Route through _test_status_line.
+ * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
+ (test_test_status_line): Test for _test_status_line.
+
2012-09-04 Martin Robinson <[email protected]>
[GTK] Print API missing documentation when generating gtkdoc
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/views/metered_stream.py (127477 => 127478)
--- trunk/Tools/Scripts/webkitpy/layout_tests/views/metered_stream.py 2012-09-04 18:42:03 UTC (rev 127477)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/views/metered_stream.py 2012-09-04 18:45:35 UTC (rev 127478)
@@ -32,7 +32,9 @@
import sys
import time
+from webkitpy.common.memoized import memoized
+
LOG_HANDLER_NAME = 'MeteredStreamLogHandler'
@@ -120,6 +122,21 @@
self._last_partial_line = ''
self._stream.flush()
+ @memoized
+ def number_of_columns(self):
+ if not self._isatty:
+ return sys.maxint
+ try:
+ import fcntl
+ import struct
+ import termios
+ packed = fcntl.ioctl(self._stream.fileno(), termios.TIOCGWINSZ, '\0' * 8)
+ _, columns, _, _ = struct.unpack('HHHH', packed)
+ return columns
+ except:
+ return sys.maxint
+
+
class _LogHandler(logging.Handler):
def __init__(self, meter):
logging.Handler.__init__(self)
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py (127477 => 127478)
--- trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py 2012-09-04 18:42:03 UTC (rev 127477)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py 2012-09-04 18:45:35 UTC (rev 127478)
@@ -324,6 +324,22 @@
self._print_quiet(summary)
self._print_quiet("")
+ def _test_status_line(self, test_name, suffix):
+ format_string = '[%d/%d] %s%s'
+ status_line = format_string % (self.num_completed, 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) + 2:
+ # We don't have enough space even if we elide, just show the test filename.
+ fs = self._port.host.filesystem
+ test_name = fs.split(test_name)[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_completed, self.num_tests, test_name, suffix)
+
def print_started_test(self, test_name):
self._running_tests.append(test_name)
if len(self._running_tests) > 1:
@@ -334,7 +350,7 @@
write = self._meter.write_update
else:
write = self._meter.write_throttled_update
- write('[%d/%d] %s%s' % (self.num_completed, self.num_tests, test_name, suffix))
+ write(self._test_status_line(test_name, suffix))
def print_finished_test(self, result, expected, exp_str, got_str):
self.num_completed += 1
@@ -346,7 +362,7 @@
suffix = ' ' + desc[1]
if not expected:
suffix += ' unexpectedly' + desc[2]
- self.writeln("[%d/%d] %s%s" % (self.num_completed, self.num_tests, test_name, suffix))
+ self.writeln(self._test_status_line(test_name, suffix))
elif self.num_completed == self.num_tests:
self._meter.write_update('')
else:
@@ -358,13 +374,13 @@
self._completed_tests.append([test_name, suffix])
for test_name, suffix in self._completed_tests:
- self._meter.write_throttled_update('[%d/%d] %s%s' % (self.num_completed, self.num_tests, test_name, suffix))
+ self._meter.write_throttled_update(self._test_status_line(test_name, suffix))
self._completed_tests = []
self._running_tests.remove(test_name)
def _print_test_trace(self, result, exp_str, got_str):
test_name = result.test_name
- self._print_default('[%d/%d] %s' % (self.num_completed, self.num_tests, test_name))
+ self._print_default(self._test_status_line(test_name, ''))
base = self._port.lookup_virtual_test_base(test_name)
if base:
@@ -388,8 +404,6 @@
relpath = '<none>'
self._print_default(' %s: %s' % (extension[1:], relpath))
- def _print_progress(self, result_summary, retrying, test_list):
- """Print progress through the tests as determined by --print."""
def _print_unexpected_results(self, unexpected_results):
# Prints to the buildbot stream
passes = {}
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/views/printing_unittest.py (127477 => 127478)
--- trunk/Tools/Scripts/webkitpy/layout_tests/views/printing_unittest.py 2012-09-04 18:42:03 UTC (rev 127477)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/views/printing_unittest.py 2012-09-04 18:45:35 UTC (rev 127478)
@@ -31,6 +31,7 @@
import optparse
import StringIO
+import sys
import time
import unittest
@@ -248,6 +249,32 @@
# buildbot is expecting.
pass
+ def test_test_status_line(self):
+ printer, _, _ = self.get_printer()
+ printer._meter.number_of_columns = lambda: 80
+ actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+ self.assertEquals(80, len(actual))
+ self.assertEquals(actual, '[0/0] fast/dom/HTMLFormElement/associa...after-index-assertion-fail1.html passed')
+
+ printer._meter.number_of_columns = lambda: 89
+ actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+ self.assertEquals(89, len(actual))
+ self.assertEquals(actual, '[0/0] fast/dom/HTMLFormElement/associated-...ents-after-index-assertion-fail1.html passed')
+
+ printer._meter.number_of_columns = lambda: sys.maxint
+ actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+ self.assertEquals(90, len(actual))
+ self.assertEquals(actual, '[0/0] fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html passed')
+
+ printer._meter.number_of_columns = lambda: 18
+ actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+ self.assertEquals(18, len(actual))
+ self.assertEquals(actual, '[0/0] f...l passed')
+
+ printer._meter.number_of_columns = lambda: 10
+ actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+ self.assertEquals(actual, '[0/0] associated-elements-after-index-assertion-fail1.html passed')
+
def test_details(self):
printer, err, _ = self.get_printer(['--details'])
result = self.get_result('passes/image.html')