15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from telemetry.value import failure
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from telemetry.value import skip
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class PageRun(object):
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def __init__(self, page):
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self._page = page
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self._values = []
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def AddValue(self, value):
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self._values.append(value)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def ClearValues(self):
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self._values = []
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  @property
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def page(self):
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return self._page
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  @property
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def values(self):
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    """The values that correspond to this page run."""
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return self._values
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  @property
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def ok(self):
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    """Whether the current run is still ok.
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    To be precise: returns true if there is neither FailureValue nor
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SkipValue in self.values.
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    """
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return not self.skipped and not self.failed
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  @property
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def skipped(self):
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    """Whether the current run is being skipped.
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    To be precise: returns true if there is any SkipValue in self.values.
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    """
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return any(isinstance(v, skip.SkipValue) for v in self.values)
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  @property
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def failed(self):
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    """Whether the current run failed.
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    To be precise: returns true if there is a FailureValue but not
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SkipValue in self.values.
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    """
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return not self.skipped and any(
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        isinstance(v, failure.FailureValue) for v in self.values)
55