Changeset 127478 in webkit


Ignore:
Timestamp:
Sep 4, 2012 11:45:35 AM (12 years ago)
Author:
tony@chromium.org
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.

Location:
trunk/Tools
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r127475 r127478  
     12012-09-04  Tony Chang  <tony@chromium.org>
     2
     3        Elide test names when running new-run-webkit-tests
     4        https://bugs.webkit.org/show_bug.cgi?id=95626
     5
     6        Reviewed by Dirk Pranke.
     7
     8        When the test name exceeds the number of terminal columns, it leaves
     9        text on the screen. Avoid this by eliding the test name when running
     10        tests. This is similar to what ninja does when compiling.
     11
     12        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
     13        (MeteredStream):
     14        (MeteredStream.number_of_columns): Helper method to get number of
     15        terminal columns. Won't work on Win32 python, but meh.
     16        * Scripts/webkitpy/layout_tests/views/printing.py:
     17        (Printer._test_status_line): New method for eliding the text. Doesn't use \u2026
     18        because stderr appears to be ascii only.
     19        (Printer.print_started_test): Route through _test_status_line.
     20        (Printer.print_finished_test): Route through _test_status_line.
     21        (Printer._print_test_trace): Route through _test_status_line.
     22        (Printer._print_baseline): Route through _test_status_line.
     23        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
     24        (test_test_status_line): Test for _test_status_line.
     25
    1262012-09-04  Martin Robinson  <mrobinson@igalia.com>
    227
  • trunk/Tools/Scripts/webkitpy/layout_tests/views/metered_stream.py

    r121505 r127478  
    3232import sys
    3333import time
     34
     35from webkitpy.common.memoized import memoized
    3436
    3537
     
    121123            self._stream.flush()
    122124
     125    @memoized
     126    def number_of_columns(self):
     127        if not self._isatty:
     128            return sys.maxint
     129        try:
     130            import fcntl
     131            import struct
     132            import termios
     133            packed = fcntl.ioctl(self._stream.fileno(), termios.TIOCGWINSZ, '\0' * 8)
     134            _, columns, _, _ = struct.unpack('HHHH', packed)
     135            return columns
     136        except:
     137            return sys.maxint
     138
     139
    123140class _LogHandler(logging.Handler):
    124141    def __init__(self, meter):
  • trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py

    r125204 r127478  
    325325        self._print_quiet("")
    326326
     327    def _test_status_line(self, test_name, suffix):
     328        format_string = '[%d/%d] %s%s'
     329        status_line = format_string % (self.num_completed, self.num_tests, test_name, suffix)
     330        if len(status_line) > self._meter.number_of_columns():
     331            overflow_columns = len(status_line) - self._meter.number_of_columns()
     332            ellipsis = '...'
     333            if len(test_name) < overflow_columns + len(ellipsis) + 2:
     334                # We don't have enough space even if we elide, just show the test filename.
     335                fs = self._port.host.filesystem
     336                test_name = fs.split(test_name)[1]
     337            else:
     338                new_length = len(test_name) - overflow_columns - len(ellipsis)
     339                prefix = int(new_length / 2)
     340                test_name = test_name[:prefix] + ellipsis + test_name[-(new_length - prefix):]
     341        return format_string % (self.num_completed, self.num_tests, test_name, suffix)
     342
    327343    def print_started_test(self, test_name):
    328344        self._running_tests.append(test_name)
     
    335351        else:
    336352            write = self._meter.write_throttled_update
    337         write('[%d/%d] %s%s' % (self.num_completed, self.num_tests, test_name, suffix))
     353        write(self._test_status_line(test_name, suffix))
    338354
    339355    def print_finished_test(self, result, expected, exp_str, got_str):
     
    347363            if not expected:
    348364                suffix += ' unexpectedly' + desc[2]
    349             self.writeln("[%d/%d] %s%s" % (self.num_completed, self.num_tests, test_name, suffix))
     365            self.writeln(self._test_status_line(test_name, suffix))
    350366        elif self.num_completed == self.num_tests:
    351367            self._meter.write_update('')
     
    359375
    360376            for test_name, suffix in self._completed_tests:
    361                 self._meter.write_throttled_update('[%d/%d] %s%s' % (self.num_completed, self.num_tests, test_name, suffix))
     377                self._meter.write_throttled_update(self._test_status_line(test_name, suffix))
    362378            self._completed_tests = []
    363379        self._running_tests.remove(test_name)
     
    365381    def _print_test_trace(self, result, exp_str, got_str):
    366382        test_name = result.test_name
    367         self._print_default('[%d/%d] %s' % (self.num_completed, self.num_tests, test_name))
     383        self._print_default(self._test_status_line(test_name, ''))
    368384
    369385        base = self._port.lookup_virtual_test_base(test_name)
     
    389405        self._print_default('  %s: %s' % (extension[1:], relpath))
    390406
    391     def _print_progress(self, result_summary, retrying, test_list):
    392         """Print progress through the tests as determined by --print."""
    393407    def _print_unexpected_results(self, unexpected_results):
    394408        # Prints to the buildbot stream
  • trunk/Tools/Scripts/webkitpy/layout_tests/views/printing_unittest.py

    r125204 r127478  
    3232import optparse
    3333import StringIO
     34import sys
    3435import time
    3536import unittest
     
    249250        pass
    250251
     252    def test_test_status_line(self):
     253        printer, _, _ = self.get_printer()
     254        printer._meter.number_of_columns = lambda: 80
     255        actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
     256        self.assertEquals(80, len(actual))
     257        self.assertEquals(actual, '[0/0] fast/dom/HTMLFormElement/associa...after-index-assertion-fail1.html passed')
     258
     259        printer._meter.number_of_columns = lambda: 89
     260        actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
     261        self.assertEquals(89, len(actual))
     262        self.assertEquals(actual, '[0/0] fast/dom/HTMLFormElement/associated-...ents-after-index-assertion-fail1.html passed')
     263
     264        printer._meter.number_of_columns = lambda: sys.maxint
     265        actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
     266        self.assertEquals(90, len(actual))
     267        self.assertEquals(actual, '[0/0] fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html passed')
     268
     269        printer._meter.number_of_columns = lambda: 18
     270        actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
     271        self.assertEquals(18, len(actual))
     272        self.assertEquals(actual, '[0/0] f...l passed')
     273
     274        printer._meter.number_of_columns = lambda: 10
     275        actual = printer._test_status_line('fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
     276        self.assertEquals(actual, '[0/0] associated-elements-after-index-assertion-fail1.html passed')
     277
    251278    def test_details(self):
    252279        printer, err, _ = self.get_printer(['--details'])
Note: See TracChangeset for help on using the changeset viewer.