| # Copyright 2018 the V8 project authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| class ResultBase(object): | |
| @property | |
| def is_skipped(self): | |
| return False | |
| @property | |
| def is_grouped(self): | |
| return False | |
| @property | |
| def is_rerun(self): | |
| return False | |
| class Result(ResultBase): | |
| """Result created by the output processor.""" | |
| def __init__(self, has_unexpected_output, output, cmd=None): | |
| self.has_unexpected_output = has_unexpected_output | |
| self.output = output | |
| self.cmd = cmd | |
| class GroupedResult(ResultBase): | |
| """Result consisting of multiple results. It can be used by processors that | |
| create multiple subtests for each test and want to pass all results back. | |
| """ | |
| @staticmethod | |
| def create(results): | |
| """Create grouped result from the list of results. It filters out skipped | |
| results. If all results are skipped results it returns skipped result. | |
| Args: | |
| results: list of pairs (test, result) | |
| """ | |
| results = [(t, r) for (t, r) in results if not r.is_skipped] | |
| if not results: | |
| return SKIPPED | |
| return GroupedResult(results) | |
| def __init__(self, results): | |
| self.results = results | |
| @property | |
| def is_grouped(self): | |
| return True | |
| class SkippedResult(ResultBase): | |
| """Result without any meaningful value. Used primarily to inform the test | |
| processor that it's test wasn't executed. | |
| """ | |
| @property | |
| def is_skipped(self): | |
| return True | |
| SKIPPED = SkippedResult() | |
| class RerunResult(Result): | |
| """Result generated from several reruns of the same test. It's a subclass of | |
| Result since the result of rerun is result of the last run. In addition to | |
| normal result it contains results of all reruns. | |
| """ | |
| @staticmethod | |
| def create(results): | |
| """Create RerunResult based on list of results. List cannot be empty. If it | |
| has only one element it's returned as a result. | |
| """ | |
| assert results | |
| if len(results) == 1: | |
| return results[0] | |
| return RerunResult(results) | |
| def __init__(self, results): | |
| """Has unexpected output and the output itself of the RerunResult equals to | |
| the last result in the passed list. | |
| """ | |
| assert results | |
| last = results[-1] | |
| super(RerunResult, self).__init__(last.has_unexpected_output, last.output, | |
| last.cmd) | |
| self.results = results | |
| @property | |
| def is_rerun(self): | |
| return True |