Index: telemetry/telemetry/story/expectations.py |
diff --git a/telemetry/telemetry/story/expectations.py b/telemetry/telemetry/story/expectations.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6e843f1e6000324dd266074c887517c549e09c33 |
--- /dev/null |
+++ b/telemetry/telemetry/story/expectations.py |
@@ -0,0 +1,121 @@ |
+# Copyright 2017 The Chromium 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 StoryExpectations(object): |
+ def __init__(self): |
+ self._disabled_platforms = [] |
+ self._expectations = {} |
+ self._frozen = False |
+ self.SetExpectations() |
+ self._Freeze() |
+ |
+ def SetExpectations(self): |
+ """ Sets the Expectations for test disabling |
+ |
+ Override in subclasses to disable tests.""" |
+ pass |
+ |
+ def _Freeze(self): |
+ self._frozen = True |
+ |
+ def DisableBenchmark(self, conditions, reason): |
nednguyen
2017/05/10 21:10:57
Add doc string for this. Also include example of h
rnephew (Reviews Here)
2017/05/10 21:28:32
Done.
|
+ assert reason |
+ assert not self._frozen, ('Cannot disable benchmark on a frozen ' |
+ 'StoryExpectation object.') |
+ for condition in conditions: |
+ assert issubclass(condition, _TestCondition) |
+ |
+ self._disabled_platforms.append((conditions, reason)) |
+ |
+ def IsBenchmarkDisabled(self, state): |
nednguyen
2017/05/10 21:10:57
Same
rnephew (Reviews Here)
2017/05/10 21:28:32
Done.
|
+ for conditions, reason in self._disabled_platforms: |
+ for condition in conditions: |
+ if condition.ShouldDisable(state): |
+ return True, reason |
+ return False, None |
+ |
+ def DisableStory(self, story_name, conditions, reason): |
nednguyen
2017/05/10 21:10:57
Ditto
rnephew (Reviews Here)
2017/05/10 21:28:32
Done.
|
+ assert reason |
+ assert len(story_name) < 30, 'Story name too long.' |
+ assert not self._frozen, ('Cannot disable stories on a frozen ' |
+ 'StoryExpectation object.') |
+ for condition in conditions: |
+ assert issubclass(condition, _TestCondition) |
+ if not self._expectations.get(story_name): |
+ self._expectations[story_name] = [] |
+ self._expectations[story_name].append((conditions, reason)) |
+ |
+ def IsStoryDisabled(self, story, state): |
nednguyen
2017/05/10 21:10:57
Ditto
rnephew (Reviews Here)
2017/05/10 21:28:32
Done.
|
+ for conditions, reason in self._expectations.get(story.display_name, []): |
+ for condition in conditions: |
+ if condition.ShouldDisable(state): |
+ return True, reason |
+ return False, None |
+ |
+ |
+class _TestCondition(object): |
+ @staticmethod |
+ def ShouldDisable(state): |
+ raise NotImplementedError |
+ |
+ |
+class AllTestCondition(_TestCondition): |
nednguyen
2017/05/10 21:10:57
let hide all these class with prefix "_" so users
rnephew (Reviews Here)
2017/05/10 21:28:32
Done.
|
+ @staticmethod |
+ def ShouldDisable(_): |
+ return True |
+ |
+ |
+class MacTestCondition(_TestCondition): |
+ @staticmethod |
+ def ShouldDisable(state): |
+ return state.platform.GetOSName() == 'mac' |
+ |
+ |
+class WinTestCondition(_TestCondition): |
+ @staticmethod |
+ def ShouldDisable(state): |
+ return state.platform.GetOSName() == 'win' |
+ |
+ |
+class LinuxTestCondition(_TestCondition): |
+ @staticmethod |
+ def ShouldDisable(state): |
+ return state.platform.GetOSName() == 'linux' |
+ |
+ |
+class AndroidTestCondition(_TestCondition): |
+ @staticmethod |
+ def ShouldDisable(state): |
+ return state.platform.GetOSName() == 'android' |
+ |
+ |
+class DesktopTestCondition(_TestCondition): |
+ @staticmethod |
+ def ShouldDisable(state): |
+ current_platform = state.platform.GetOSName() |
+ return (current_platform == 'mac' or current_platform == 'win' or |
+ current_platform == 'linux') |
+ |
+ |
+class MobileTestCondition(_TestCondition): |
+ @staticmethod |
+ def ShouldDisable(state): |
+ return state.platform.GetOSName() == 'android' |
+ |
+ |
+class NoBattOrTestCondition(_TestCondition): |
+ @staticmethod |
+ def ShouldDisable(state): |
+ return not state.platform.HasBattOrConnected() |
+ |
+ |
+ALL = AllTestCondition |
+ALL_MAC = MacTestCondition |
+ALL_WIN = WinTestCondition |
+ALL_LINUX = LinuxTestCondition |
+ALL_ANDROID = AndroidTestCondition |
+ALL_DESKTOP = DesktopTestCondition |
+ALL_MOBILE = MobileTestCondition |
+NO_BATTOR = NoBattOrTestCondition |