# 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