Title: [127478] trunk/Tools
Revision
127478
Author
[email protected]
Date
2012-09-04 11:45:35 -0700 (Tue, 04 Sep 2012)

Log Message

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.

Modified Paths

Diff

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')
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to