| # 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 |