summaryrefslogtreecommitdiffstats
path: root/Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py
diff options
context:
space:
mode:
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.py77
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)