1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5from telemetry.value import failure
6from telemetry.value import skip
7
8
9class PageRun(object):
10  def __init__(self, page):
11    self._page = page
12    self._values = []
13
14  def AddValue(self, value):
15    self._values.append(value)
16
17  def ClearValues(self):
18    self._values = []
19
20  @property
21  def page(self):
22    return self._page
23
24  @property
25  def values(self):
26    """The values that correspond to this page run."""
27    return self._values
28
29  @property
30  def ok(self):
31    """Whether the current run is still ok.
32
33    To be precise: returns true if there is neither FailureValue nor
34    SkipValue in self.values.
35    """
36    return not self.skipped and not self.failed
37
38  @property
39  def skipped(self):
40    """Whether the current run is being skipped.
41
42    To be precise: returns true if there is any SkipValue in self.values.
43    """
44    return any(isinstance(v, skip.SkipValue) for v in self.values)
45
46  @property
47  def failed(self):
48    """Whether the current run failed.
49
50    To be precise: returns true if there is a FailureValue but not
51    SkipValue in self.values.
52    """
53    return not self.skipped and any(
54        isinstance(v, failure.FailureValue) for v in self.values)
55