diff options
Diffstat (limited to 'Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py')
-rw-r--r-- | Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py | 77 |
1 files changed, 65 insertions, 12 deletions
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py index eb59d36..1fad772 100644 --- a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py +++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py @@ -60,11 +60,13 @@ def determine_result_type(failure_list): is_text_failure = FailureTextMismatch in failure_types is_image_failure = (FailureImageHashIncorrect in failure_types or FailureImageHashMismatch in failure_types) + is_reftest_failure = (FailureReftestMismatch in failure_types or + FailureReftestMismatchDidNotOccur in failure_types) if is_text_failure and is_image_failure: return test_expectations.IMAGE_PLUS_TEXT elif is_text_failure: return test_expectations.TEXT - elif is_image_failure: + elif is_image_failure or is_reftest_failure: return test_expectations.IMAGE else: raise ValueError("unclassifiable set of failures: " @@ -126,8 +128,8 @@ class TestFailure(object): return filename[:filename.rfind('.')] + modifier -class FailureWithType(TestFailure): - """Base class that produces standard HTML output based on the test type. +class ComparisonTestFailure(TestFailure): + """Base class that produces standard HTML output based on the result of the comparison test. Subclasses may commonly choose to override the ResultHtmlOutput, but still use the standard OutputLinks. @@ -177,11 +179,17 @@ class FailureTimeout(TestFailure): """Test timed out. We also want to restart DumpRenderTree if this happens.""" + def __init__(self, reference_filename=None): + self.reference_filename = reference_filename + @staticmethod def message(): return "Test timed out" def result_html_output(self, filename): + if self.reference_filename: + return "<strong>%s</strong> (occured in <a href=%s>expected html</a>)" % ( + self.message(), self.reference_filename) return "<strong>%s</strong>" % self.message() def should_kill_dump_render_tree(self): @@ -191,6 +199,9 @@ class FailureTimeout(TestFailure): class FailureCrash(TestFailure): """DumpRenderTree crashed.""" + def __init__(self, reference_filename=None): + self.reference_filename = reference_filename + @staticmethod def message(): return "DumpRenderTree crashed" @@ -198,14 +209,17 @@ class FailureCrash(TestFailure): def result_html_output(self, filename): # FIXME: create a link to the minidump file stack = self.relative_output_filename(filename, "-stack.txt") - return "<strong>%s</strong> <a href=%s>stack</a>" % (self.message(), - stack) + if self.reference_filename: + return "<strong>%s</strong> <a href=%s>stack</a> (occured in <a href=%s>expected html</a>)" % ( + self.message(), stack, self.reference_filename) + else: + return "<strong>%s</strong> <a href=%s>stack</a>" % (self.message(), stack) def should_kill_dump_render_tree(self): return True -class FailureMissingResult(FailureWithType): +class FailureMissingResult(ComparisonTestFailure): """Expected result was missing.""" OUT_FILENAMES = ("-actual.txt",) @@ -218,7 +232,7 @@ class FailureMissingResult(FailureWithType): self.output_links(filename, self.OUT_FILENAMES)) -class FailureTextMismatch(FailureWithType): +class FailureTextMismatch(ComparisonTestFailure): """Text diff output failed.""" # Filename suffixes used by ResultHtmlOutput. # FIXME: Why don't we use the constants from TestTypeBase here? @@ -230,7 +244,7 @@ class FailureTextMismatch(FailureWithType): return "Text diff mismatch" -class FailureMissingImageHash(FailureWithType): +class FailureMissingImageHash(ComparisonTestFailure): """Actual result hash was missing.""" # Chrome doesn't know to display a .checksum file as text, so don't bother # putting in a link to the actual result. @@ -243,7 +257,7 @@ class FailureMissingImageHash(FailureWithType): return "<strong>%s</strong>" % self.message() -class FailureMissingImage(FailureWithType): +class FailureMissingImage(ComparisonTestFailure): """Actual result image was missing.""" OUT_FILENAMES = ("-actual.png",) @@ -256,7 +270,7 @@ class FailureMissingImage(FailureWithType): self.output_links(filename, self.OUT_FILENAMES)) -class FailureImageHashMismatch(FailureWithType): +class FailureImageHashMismatch(ComparisonTestFailure): """Image hashes didn't match.""" OUT_FILENAMES = ("-actual.png", "-expected.png", "-diff.png") @@ -267,7 +281,7 @@ class FailureImageHashMismatch(FailureWithType): return "Image mismatch" -class FailureImageHashIncorrect(FailureWithType): +class FailureImageHashIncorrect(ComparisonTestFailure): """Actual result hash is incorrect.""" # Chrome doesn't know to display a .checksum file as text, so don't bother # putting in a link to the actual result. @@ -279,9 +293,48 @@ class FailureImageHashIncorrect(FailureWithType): def result_html_output(self, filename): return "<strong>%s</strong>" % self.message() + +class FailureReftestMismatch(ComparisonTestFailure): + """The result didn't match the reference rendering.""" + + OUT_FILENAMES = ("-expected.html", "-expected.png", "-actual.png", + "-diff.png",) + + @staticmethod + def message(): + return "Mismatch with reference" + + def output_links(self, filename, out_names): + links = [''] + uris = [self.relative_output_filename(filename, output_filename) + for output_filename in out_names] + for text, uri in zip(['-expected.html', 'expected', 'actual', 'diff'], uris): + links.append("<a href='%s'>%s</a>" % (uri, text)) + return ' '.join(links) + + +class FailureReftestMismatchDidNotOccur(ComparisonTestFailure): + """Unexpected match between the result and the reference rendering.""" + + OUT_FILENAMES = ("-expected-mismatch.html", "-actual.png",) + + @staticmethod + def message(): + return "Mismatch with the reference did not occur" + + def output_links(self, filename, out_names): + links = [''] + uris = [self.relative_output_filename(filename, output_filename) + for output_filename in out_names] + for text, uri in zip(['-expected-mismatch.html', 'image'], uris): + links.append("<a href='%s'>%s</a>" % (uri, text)) + return ' '.join(links) + + # Convenient collection of all failure classes for anything that might # need to enumerate over them all. ALL_FAILURE_CLASSES = (FailureTimeout, FailureCrash, FailureMissingResult, FailureTextMismatch, FailureMissingImageHash, FailureMissingImage, FailureImageHashMismatch, - FailureImageHashIncorrect) + FailureImageHashIncorrect, FailureReftestMismatch, + FailureReftestMismatchDidNotOccur) |