Title: [133380] trunk/Tools
Revision
133380
Author
dpra...@chromium.org
Date
2012-11-02 17:48:53 -0700 (Fri, 02 Nov 2012)

Log Message

nrwt prints an awkward result message for missing results
https://bugs.webkit.org/show_bug.cgi?id=100915

Reviewed by Ojan Vafai.

Completely rework how we print out the description of
each tests's result - we now will print either "passed" or "failed",
followed by " unexpectedly" if we weren't expecting the result,
followed by a short description of each type of failure that happened
(in parentheses). Also reworked the description of each type of
failure slightly to be clearer.

Also rework the tests to make sure we have coverage of all of the
messages. Examples of the new output are posted as an attachment to
the bug.

* Scripts/webkitpy/layout_tests/models/test_expectations.py:
(TestExpectations):
* Scripts/webkitpy/layout_tests/models/test_failures.py:
(FailureTimeout.message):
(FailureMissingResult.message):
(FailureTextMismatch.message):
(FailureMissingImageHash.message):
(FailureMissingImage.message):
(FailureImageHashMismatch.message):
(FailureImageHashIncorrect.message):
(FailureReftestMismatch.message):
(FailureReftestMismatchDidNotOccur.message):
(FailureReftestNoImagesGenerated.message):
(FailureMissingAudio.message):
(FailureAudioMismatch.message):
(FailureEarlyExit.message):
* Scripts/webkitpy/layout_tests/port/test.py:
* Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
(MainTest.test_run_singly_actually_runs_tests):
(MainTest.test_missing_and_unexpected_results):
* Scripts/webkitpy/layout_tests/views/printing.py:
(Printer._print_result_summary_entry):
(Printer.print_finished_test):
(Printer._result_message):
(Printer._print_unexpected_results):
* Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
* Scripts/webkitpy/tool/commands/queues_unittest.py:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (133379 => 133380)


--- trunk/Tools/ChangeLog	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/ChangeLog	2012-11-03 00:48:53 UTC (rev 133380)
@@ -1,5 +1,51 @@
 2012-11-02  Dirk Pranke  <dpra...@chromium.org>
 
+        nrwt prints an awkward result message for missing results
+        https://bugs.webkit.org/show_bug.cgi?id=100915
+
+        Reviewed by Ojan Vafai.
+
+        Completely rework how we print out the description of
+        each tests's result - we now will print either "passed" or "failed",
+        followed by " unexpectedly" if we weren't expecting the result,
+        followed by a short description of each type of failure that happened
+        (in parentheses). Also reworked the description of each type of
+        failure slightly to be clearer.
+
+        Also rework the tests to make sure we have coverage of all of the
+        messages. Examples of the new output are posted as an attachment to
+        the bug.
+
+        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
+        (TestExpectations):
+        * Scripts/webkitpy/layout_tests/models/test_failures.py:
+        (FailureTimeout.message):
+        (FailureMissingResult.message):
+        (FailureTextMismatch.message):
+        (FailureMissingImageHash.message):
+        (FailureMissingImage.message):
+        (FailureImageHashMismatch.message):
+        (FailureImageHashIncorrect.message):
+        (FailureReftestMismatch.message):
+        (FailureReftestMismatchDidNotOccur.message):
+        (FailureReftestNoImagesGenerated.message):
+        (FailureMissingAudio.message):
+        (FailureAudioMismatch.message):
+        (FailureEarlyExit.message):
+        * Scripts/webkitpy/layout_tests/port/test.py:
+        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
+        (MainTest.test_run_singly_actually_runs_tests):
+        (MainTest.test_missing_and_unexpected_results):
+        * Scripts/webkitpy/layout_tests/views/printing.py:
+        (Printer._print_result_summary_entry):
+        (Printer.print_finished_test):
+        (Printer._result_message):
+        (Printer._print_unexpected_results):
+        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
+        * Scripts/webkitpy/tool/commands/queues_unittest.py:
+
+2012-11-02  Dirk Pranke  <dpra...@chromium.org>
+
         webkitpy: clean up logging in common.system.autoinstall
         https://bugs.webkit.org/show_bug.cgi?id=101090
 

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py (133379 => 133380)


--- trunk/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py	2012-11-03 00:48:53 UTC (rev 133380)
@@ -758,16 +758,16 @@
                     'missing': MISSING}
 
     # (aggregated by category, pass/fail/skip, type)
-    EXPECTATION_DESCRIPTIONS = {SKIP: ('skipped', 'skipped', ''),
-                                PASS: ('passes', 'passed', ''),
-                                FAIL: ('failures', 'failed', ''),
-                                IMAGE: ('image-only failures', 'failed', ' (image diff)'),
-                                TEXT: ('text-only failures', 'failed', ' (text diff)'),
-                                IMAGE_PLUS_TEXT: ('image and text failures', 'failed', ' (image and text diff)'),
-                                AUDIO: ('audio failures', 'failed', ' (audio diff)'),
-                                CRASH: ('crashes', 'crashed', ''),
-                                TIMEOUT: ('timeouts', 'timed out', ''),
-                                MISSING: ('no expected results found', 'no expected result found', '')}
+    EXPECTATION_DESCRIPTIONS = {SKIP: 'skipped',
+                                PASS: 'passes',
+                                FAIL: 'failures',
+                                IMAGE: 'image-only failures',
+                                TEXT: 'text-only failures',
+                                IMAGE_PLUS_TEXT: 'image and text failures',
+                                AUDIO: 'audio failures',
+                                CRASH: 'crashes',
+                                TIMEOUT: 'timeouts',
+                                MISSING: 'missing results'}
 
     EXPECTATION_ORDER = (PASS, CRASH, TIMEOUT, MISSING, FAIL, IMAGE, SKIP)
 

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py (133379 => 133380)


--- trunk/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py	2012-11-03 00:48:53 UTC (rev 133380)
@@ -110,20 +110,18 @@
 
 
 class FailureTimeout(TestFailure):
-    """Test timed out.  We also want to restart DumpRenderTree if this happens."""
     def __init__(self, is_reftest=False):
         super(FailureTimeout, self).__init__()
         self.is_reftest = is_reftest
 
     def message(self):
-        return "Test timed out"
+        return "test timed out"
 
     def driver_needs_restart(self):
         return True
 
 
 class FailureCrash(TestFailure):
-    """DumpRenderTree/WebKitTestRunner crashed."""
     def __init__(self, is_reftest=False, process_name='DumpRenderTree', pid=None):
         super(FailureCrash, self).__init__()
         self.process_name = process_name
@@ -132,7 +130,7 @@
 
     def message(self):
         if self.pid:
-            return "%s (pid %d) crashed" % (self.process_name, self.pid)
+            return "%s crashed [pid=%d]" % (self.process_name, self.pid)
         return self.process_name + " crashed"
 
     def driver_needs_restart(self):
@@ -140,101 +138,79 @@
 
 
 class FailureMissingResult(TestFailure):
-    """Expected result was missing."""
-
     def message(self):
-        return "No expected results found"
+        return "-expected.txt was missing"
 
 
 class FailureTextMismatch(TestFailure):
-    """Text diff output failed."""
-
     def message(self):
-        return "Text diff mismatch"
+        return "text diff"
 
-
 class FailureMissingImageHash(TestFailure):
-    """Actual result hash was missing."""
-
     def message(self):
-        return "No expected image hash found"
+        return "-expected.png was missing an embedded checksum"
 
 
 class FailureMissingImage(TestFailure):
-    """Actual result image was missing."""
-
     def message(self):
-        return "No expected image found"
+        return "-expected.png was missing"
 
 
 class FailureImageHashMismatch(TestFailure):
-    """Image hashes didn't match."""
     def __init__(self, diff_percent=0):
         super(FailureImageHashMismatch, self).__init__()
         self.diff_percent = diff_percent
 
     def message(self):
-        return "Image mismatch"
+        return "image diff"
 
 
 class FailureImageHashIncorrect(TestFailure):
-    """Actual result hash is incorrect."""
-
     def message(self):
-        return "Images match, expected image hash incorrect. "
+        return "-expected.png embedded checksum is incorrect"
 
 
 class FailureReftestMismatch(TestFailure):
-    """The result didn't match the reference rendering."""
-
     def __init__(self, reference_filename=None):
         super(FailureReftestMismatch, self).__init__()
         self.reference_filename = reference_filename
         self.diff_percent = None
 
     def message(self):
-        return "Mismatch with reference"
+        return "reference mismatch"
 
 
 class FailureReftestMismatchDidNotOccur(TestFailure):
-    """Unexpected match between the result and the reference rendering."""
-
     def __init__(self, reference_filename=None):
         super(FailureReftestMismatchDidNotOccur, self).__init__()
         self.reference_filename = reference_filename
 
     def message(self):
-        return "Mismatch with the reference did not occur"
+        return "reference mismatch didn't happen"
 
 
 class FailureReftestNoImagesGenerated(TestFailure):
-    """Both the reftest and the -expected html file didn't generate pixel results."""
-
     def __init__(self, reference_filename=None):
         super(FailureReftestNoImagesGenerated, self).__init__()
         self.reference_filename = reference_filename
 
     def message(self):
-        return "Reftest didn't generate pixel results."
+        return "reference didn't generate pixel results."
 
 
 class FailureMissingAudio(TestFailure):
-    """Actual result image was missing."""
-
     def message(self):
-        return "No expected audio found"
+        return "expected audio result was missing"
 
 
 class FailureAudioMismatch(TestFailure):
-    """Audio files didn't match."""
-
     def message(self):
-        return "Audio mismatch"
+        return "audio mismatch"
 
 
 class FailureEarlyExit(TestFailure):
     def message(self):
-        return "Skipped due to early exit"
+        return "skipped due to early exit"
 
 
 # Convenient collection of all failure classes for anything that might

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/models/test_failures_unittest.py (133379 => 133380)


--- trunk/Tools/Scripts/webkitpy/layout_tests/models/test_failures_unittest.py	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/models/test_failures_unittest.py	2012-11-03 00:48:53 UTC (rev 133380)
@@ -70,4 +70,4 @@
 
     def test_crashes(self):
         self.assertEquals(FailureCrash().message(), 'DumpRenderTree crashed')
-        self.assertEquals(FailureCrash(process_name='foo', pid=1234).message(), 'foo (pid 1234) crashed')
+        self.assertEquals(FailureCrash(process_name='foo', pid=1234).message(), 'foo crashed [pid=1234]')

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/test.py (133379 => 133380)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/test.py	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/test.py	2012-11-03 00:48:53 UTC (rev 133380)
@@ -64,7 +64,6 @@
         self.actual_image = self.base + '\x8a' + '-png' + 'tEXtchecksum\x00' + self.actual_checksum
 
         self.expected_text = self.actual_text
-        self.expected_checksum = self.actual_checksum
         self.expected_image = self.actual_image
 
         self.actual_audio = None
@@ -117,16 +116,15 @@
               actual_audio=base64.b64encode('audio_fail-wav'), expected_audio='audio-wav',
               actual_text=None, expected_text=None,
               actual_image=None, expected_image=None,
-              actual_checksum=None, expected_checksum=None)
+              actual_checksum=None)
     tests.add('failures/expected/keyboard.html', keyboard=True)
     tests.add('failures/expected/missing_check.html',
-              expected_checksum=None,
-              expected_image=None)
+              expected_image='missing_check-png')
     tests.add('failures/expected/missing_image.html', expected_image=None)
     tests.add('failures/expected/missing_audio.html', expected_audio=None,
               actual_text=None, expected_text=None,
               actual_image=None, expected_image=None,
-              actual_checksum=None, expected_checksum=None)
+              actual_checksum=None)
     tests.add('failures/expected/missing_text.html', expected_text=None)
     tests.add('failures/expected/newlines_leading.html',
               expected_text="\nfoo\n", actual_text="foo\n")
@@ -138,6 +136,7 @@
     tests.add('failures/expected/skip_text.html', actual_text='text diff')
     tests.add('failures/flaky/text.html')
     tests.add('failures/unexpected/missing_text.html', expected_text=None)
+    tests.add('failures/unexpected/missing_check.html', expected_image='missing-check-png')
     tests.add('failures/unexpected/missing_image.html', expected_image=None)
     tests.add('failures/unexpected/missing_render_tree_dump.html', actual_text="""layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
@@ -152,12 +151,18 @@
               error="mock-std-error-output")
     tests.add('failures/unexpected/web-process-crash-with-stderr.html', web_process_crash=True,
               error="mock-std-error-output")
+    tests.add('failures/unexpected/pass.html')
+    tests.add('failures/unexpected/text-checksum.html',
+              actual_text='text-checksum_fail-txt',
+              actual_checksum='text-checksum_fail-checksum')
     tests.add('failures/unexpected/text-image-checksum.html',
               actual_text='text-image-checksum_fail-txt',
+              actual_image='text-image-checksum_fail-pngtEXtchecksum\x00checksum_fail',
               actual_checksum='text-image-checksum_fail-checksum')
     tests.add('failures/unexpected/checksum-with-matching-image.html',
               actual_checksum='text-image-checksum_fail-checksum')
     tests.add('failures/unexpected/skip_pass.html')
+    tests.add('failures/unexpected/text.html', actual_text='text_fail-txt')
     tests.add('failures/unexpected/timeout.html', timeout=True)
     tests.add('http/tests/passes/text.html')
     tests.add('http/tests/passes/image.html')
@@ -169,10 +174,9 @@
               actual_audio=base64.b64encode('audio-wav'), expected_audio='audio-wav',
               actual_text=None, expected_text=None,
               actual_image=None, expected_image=None,
-              actual_checksum=None, expected_checksum=None)
+              actual_checksum=None)
     tests.add('passes/platform_image.html')
     tests.add('passes/checksum_in_image.html',
-              expected_checksum=None,
               expected_image='tEXtchecksum\x00checksum_in_image-checksum')
     tests.add('passes/skipped/skip.html')
 
@@ -281,6 +285,7 @@
 Bug(test) failures/expected/hang.html [ WontFix ]
 Bug(test) failures/expected/keyboard.html [ WontFix ]
 Bug(test) failures/expected/exception.html [ WontFix ]
+Bug(test) failures/unexpected/pass.html [ Failure ]
 Bug(test) passes/skipped/skip.html [ Skip ]
 """)
 

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py (133379 => 133380)


--- trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py	2012-11-03 00:48:53 UTC (rev 133380)
@@ -176,7 +176,8 @@
 
 # Update this magic number if you add an unexpected test to webkitpy.layout_tests.port.test
 # FIXME: It's nice to have a routine in port/test.py that returns this number.
-unexpected_tests_count = 14
+unexpected_failures = 12
+unexpected_tests_count = unexpected_failures + 4
 
 
 class StreamTestingMixin(object):
@@ -502,7 +503,7 @@
 
     def test_run_singly_actually_runs_tests(self):
         res, _, _, _ = logging_run(['--run-singly', 'failures/unexpected'])
-        self.assertEquals(res, 10)
+        self.assertEquals(res, unexpected_failures)
 
     def test_single_file(self):
         # FIXME: We should consider replacing more of the get_tests_run()-style tests
@@ -567,7 +568,7 @@
         file_list = host.filesystem.written_files.keys()
         file_list.remove('/tmp/layout-test-results/tests_run0.txt')
         self.assertEquals(res, 1)
-        expected_token = '"unexpected":{"text-image-checksum.html":{"expected":"PASS","actual":"TEXT"},"missing_text.html":{"expected":"PASS","is_missing_text":true,"actual":"MISSING"}'
+        expected_token = '"unexpected":{"text-image-checksum.html":{"expected":"PASS","actual":"IMAGE+TEXT","image_diff_percent":1},"missing_text.html":{"expected":"PASS","is_missing_text":true,"actual":"MISSING"}'
         json_string = host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json')
         self.assertTrue(json_string.find(expected_token) != -1)
         self.assertTrue(json_string.find('"num_regressions":1') != -1)

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py (133379 => 133380)


--- trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py	2012-11-03 00:48:53 UTC (rev 133380)
@@ -299,7 +299,7 @@
             desc = TestExpectations.EXPECTATION_DESCRIPTIONS[result]
             if not_passing and len(results):
                 pct = len(results) * 100.0 / not_passing
-                self._print_for_bot("  %5d %-24s (%4.1f%%)" % (len(results), desc[0], pct))
+                self._print_for_bot("  %5d %-24s (%4.1f%%)" % (len(results), desc, pct))
 
     def _print_one_line_summary(self, total, expected, unexpected):
         incomplete = total - expected - unexpected
@@ -357,29 +357,34 @@
     def print_finished_test(self, result, expected, exp_str, got_str):
         self.num_completed += 1
         test_name = result.test_name
+
+        result_message = self._result_message(result.type, result.failures, expected, self._options.verbose)
+
         if self._options.details:
             self._print_test_trace(result, exp_str, got_str)
         elif (self._options.verbose and not self._options.debug_rwt_logging) or not expected:
-            desc = TestExpectations.EXPECTATION_DESCRIPTIONS[result.type]
-            suffix = ' ' + desc[1]
-            if not expected:
-                suffix += ' unexpectedly' + desc[2]
-            self.writeln(self._test_status_line(test_name, suffix))
+            self.writeln(self._test_status_line(test_name, result_message))
         elif self.num_completed == self.num_tests:
             self._meter.write_update('')
         else:
-            desc = TestExpectations.EXPECTATION_DESCRIPTIONS[result.type]
-            suffix = ' ' + desc[1]
             if test_name == self._running_tests[0]:
-                self._completed_tests.insert(0, [test_name, suffix])
+                self._completed_tests.insert(0, [test_name, result_message])
             else:
-                self._completed_tests.append([test_name, suffix])
+                self._completed_tests.append([test_name, result_message])
 
-            for test_name, suffix in self._completed_tests:
-                self._meter.write_throttled_update(self._test_status_line(test_name, suffix))
+            for test_name, result_message in self._completed_tests:
+                self._meter.write_throttled_update(self._test_status_line(test_name, result_message))
             self._completed_tests = []
         self._running_tests.remove(test_name)
 
+    def _result_message(self, result_type, failures, expected, verbose):
+        exp_string = ' unexpectedly' if not expected else ''
+        if result_type == test_expectations.PASS:
+            return ' passed%s' % exp_string
+        else:
+            return ' failed%s (%s)' % (exp_string, ', '.join(failure.message() for failure in failures))
+
+
     def _print_test_trace(self, result, exp_str, got_str):
         test_name = result.test_name
         self._print_default(self._test_status_line(test_name, ''))
@@ -448,7 +453,7 @@
             descriptions = TestExpectations.EXPECTATION_DESCRIPTIONS
             for key, tests in flaky.iteritems():
                 result = TestExpectations.EXPECTATIONS[key.lower()]
-                self._print_for_bot("Unexpected flakiness: %s (%d)" % (descriptions[result][0], len(tests)))
+                self._print_for_bot("Unexpected flakiness: %s (%d)" % (descriptions[result], len(tests)))
                 tests.sort()
 
                 for test in tests:
@@ -466,10 +471,10 @@
             descriptions = TestExpectations.EXPECTATION_DESCRIPTIONS
             for key, tests in regressions.iteritems():
                 result = TestExpectations.EXPECTATIONS[key.lower()]
-                self._print_for_bot("Regressions: Unexpected %s : (%d)" % (descriptions[result][0], len(tests)))
+                self._print_for_bot("Regressions: Unexpected %s (%d)" % (descriptions[result], len(tests)))
                 tests.sort()
                 for test in tests:
-                    self._print_for_bot("  %s [ %s ] " % (test, TestExpectationParser._inverted_expectation_tokens[key]))
+                    self._print_for_bot("  %s [ %s ]" % (test, TestExpectationParser._inverted_expectation_tokens[key]))
                 self._print_for_bot("")
 
         if len(unexpected_results['tests']) and self._options.debug_rwt_logging:

Modified: trunk/Tools/Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py (133379 => 133380)


--- trunk/Tools/Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py	2012-11-03 00:48:53 UTC (rev 133380)
@@ -113,7 +113,7 @@
 foo/bar.html was authored by aba...@webkit.org.
 http://trac.webkit.org/browser/trunk/LayoutTests/foo/bar.html
 
-The dummy-queue just saw foo/bar.html flake (Text diff mismatch) while processing attachment 10000 on bug 50000.
+The dummy-queue just saw foo/bar.html flake (text diff) while processing attachment 10000 on bug 50000.
 Bot: mock-bot-id  Port: MockPort  Platform: MockPlatform 1.0
 
 The bots will update this with information from each new failure.

Modified: trunk/Tools/Scripts/webkitpy/tool/commands/queues_unittest.py (133379 => 133380)


--- trunk/Tools/Scripts/webkitpy/tool/commands/queues_unittest.py	2012-11-03 00:23:10 UTC (rev 133379)
+++ trunk/Tools/Scripts/webkitpy/tool/commands/queues_unittest.py	2012-11-03 00:48:53 UTC (rev 133380)
@@ -403,14 +403,14 @@
         queue = TestCommitQueue(MockTool())
         expected_stderr = """MOCK bug comment: bug_id=50002, cc=None
 --- Begin comment ---
-The commit-queue just saw foo/bar.html flake (Text diff mismatch) while processing attachment 10000 on bug 50000.
+The commit-queue just saw foo/bar.html flake (text diff) while processing attachment 10000 on bug 50000.
 Port: MockPort  Platform: MockPlatform 1.0
 --- End comment ---
 
 MOCK add_attachment_to_bug: bug_id=50002, description=Failure diff from bot filename=failure.diff mimetype=None
 MOCK bug comment: bug_id=50002, cc=None
 --- Begin comment ---
-The commit-queue just saw bar/baz.html flake (Text diff mismatch) while processing attachment 10000 on bug 50000.
+The commit-queue just saw bar/baz.html flake (text diff) while processing attachment 10000 on bug 50000.
 Port: MockPort  Platform: MockPlatform 1.0
 --- End comment ---
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to