| Index: Tools/Scripts/webkitpy/layout_tests/models/test_failures.py
|
| diff --git a/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py b/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py
|
| index 87cd1df723a522bfb23c6c28f8daccb96aa74070..2a1b87c15c3773e0513d2bd61bfcca9ed3ddc51b 100644
|
| --- a/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py
|
| +++ b/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py
|
| @@ -33,11 +33,14 @@ from webkitpy.layout_tests.models import test_expectations
|
|
|
| def is_reftest_failure(failure_list):
|
| failure_types = [type(f) for f in failure_list]
|
| - return set((FailureReftestMismatch, FailureReftestMismatchDidNotOccur, FailureReftestNoImagesGenerated)).intersection(failure_types)
|
| + return set((FailureReftestMismatch, FailureReftestMismatchDidNotOccur, FailureReftestNoImagesGenerated)).intersection(
|
| + failure_types)
|
|
|
| # FIXME: This is backwards. Each TestFailure subclass should know what
|
| # test_expectation type it corresponds too. Then this method just
|
| # collects them all from the failure list and returns the worst one.
|
| +
|
| +
|
| def determine_result_type(failure_list):
|
| """Takes a set of test_failures and returns which result type best fits
|
| the list of failures. "Best fits" means we use the worst type of failure.
|
| @@ -77,11 +80,12 @@ def determine_result_type(failure_list):
|
| elif is_audio_failure:
|
| return test_expectations.AUDIO
|
| else:
|
| - raise ValueError("unclassifiable set of failures: "
|
| + raise ValueError('unclassifiable set of failures: '
|
| + str(failure_types))
|
|
|
|
|
| class TestFailure(object):
|
| +
|
| """Abstract base class that defines the failure interface."""
|
|
|
| @staticmethod
|
| @@ -112,18 +116,20 @@ class TestFailure(object):
|
|
|
|
|
| class FailureTimeout(TestFailure):
|
| +
|
| 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):
|
| +
|
| def __init__(self, is_reftest=False, process_name='content_shell', pid=None):
|
| super(FailureCrash, self).__init__()
|
| self.process_name = process_name
|
| @@ -132,68 +138,78 @@ class FailureCrash(TestFailure):
|
|
|
| def message(self):
|
| if self.pid:
|
| - return "%s crashed [pid=%d]" % (self.process_name, self.pid)
|
| - return self.process_name + " crashed"
|
| + return '%s crashed [pid=%d]' % (self.process_name, self.pid)
|
| + return self.process_name + ' crashed'
|
|
|
| def driver_needs_restart(self):
|
| return True
|
|
|
|
|
| class FailureLeak(TestFailure):
|
| +
|
| def __init__(self, is_reftest=False, log=''):
|
| super(FailureLeak, self).__init__()
|
| self.is_reftest = is_reftest
|
| self.log = log
|
|
|
| def message(self):
|
| - return "leak detected: %s" % (self.log)
|
| + return 'leak detected: %s' % (self.log)
|
|
|
|
|
| class FailureMissingResult(TestFailure):
|
| +
|
| def message(self):
|
| - return "-expected.txt was missing"
|
| + return '-expected.txt was missing'
|
|
|
|
|
| class FailureTestHarnessAssertion(TestFailure):
|
| +
|
| def message(self):
|
| - return "asserts failed"
|
| + return 'asserts failed'
|
|
|
|
|
| class FailureTextMismatch(TestFailure):
|
| +
|
| def message(self):
|
| - return "text diff"
|
| + return 'text diff'
|
|
|
|
|
| class FailureMissingImageHash(TestFailure):
|
| +
|
| def message(self):
|
| - return "-expected.png was missing an embedded checksum"
|
| + return '-expected.png was missing an embedded checksum'
|
|
|
|
|
| class FailureMissingImage(TestFailure):
|
| +
|
| def message(self):
|
| - return "-expected.png was missing"
|
| + return '-expected.png was missing'
|
|
|
|
|
| class FailureImageHashMismatch(TestFailure):
|
| +
|
| def message(self):
|
| - return "image diff"
|
| + return 'image diff'
|
|
|
|
|
| class FailureImageHashIncorrect(TestFailure):
|
| +
|
| def message(self):
|
| - return "-expected.png embedded checksum is incorrect"
|
| + return '-expected.png embedded checksum is incorrect'
|
|
|
|
|
| class FailureReftestMismatch(TestFailure):
|
| +
|
| def __init__(self, reference_filename=None):
|
| super(FailureReftestMismatch, self).__init__()
|
| self.reference_filename = reference_filename
|
|
|
| def message(self):
|
| - return "reference mismatch"
|
| + return 'reference mismatch'
|
|
|
|
|
| class FailureReftestMismatchDidNotOccur(TestFailure):
|
| +
|
| def __init__(self, reference_filename=None):
|
| super(FailureReftestMismatchDidNotOccur, self).__init__()
|
| self.reference_filename = reference_filename
|
| @@ -203,6 +219,7 @@ class FailureReftestMismatchDidNotOccur(TestFailure):
|
|
|
|
|
| class FailureReftestNoImagesGenerated(TestFailure):
|
| +
|
| def __init__(self, reference_filename=None):
|
| super(FailureReftestNoImagesGenerated, self).__init__()
|
| self.reference_filename = reference_filename
|
| @@ -212,18 +229,21 @@ class FailureReftestNoImagesGenerated(TestFailure):
|
|
|
|
|
| class FailureMissingAudio(TestFailure):
|
| +
|
| def message(self):
|
| - return "expected audio result was missing"
|
| + return 'expected audio result was missing'
|
|
|
|
|
| class FailureAudioMismatch(TestFailure):
|
| +
|
| 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
|
|
|