aboutsummaryrefslogtreecommitdiff
path: root/bestflags/mock_task.py
diff options
context:
space:
mode:
Diffstat (limited to 'bestflags/mock_task.py')
-rw-r--r--bestflags/mock_task.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/bestflags/mock_task.py b/bestflags/mock_task.py
new file mode 100644
index 00000000..6de2b35c
--- /dev/null
+++ b/bestflags/mock_task.py
@@ -0,0 +1,92 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""This module defines the common mock tasks used by various unit tests.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+# Pick an integer at random.
+POISONPILL = 975
+
+
+class MockTask(object):
+ """This class emulates an actual task.
+
+ It does not do the actual work, but simply returns the result as given when
+ this task is constructed.
+ """
+
+ def __init__(self, stage, identifier, cost=0):
+ """Set up the results for this task.
+
+ Args:
+ stage: the stage of this test is in.
+ identifier: the identifier of this task.
+ cost: the mock cost of this task.
+
+ The _cost field stored the cost. Once this task is performed, i.e., by
+ calling the work method or by setting the result from other task, the
+ _cost field will have this cost. The stage field verifies that the module
+ being tested and the unitest are in the same stage. If the unitest does
+ not care about cost of this task, the cost parameter should be leaved
+ blank.
+ """
+
+ self._identifier = identifier
+ self._cost = cost
+ self._stage = stage
+
+ # Indicate that this method has not been performed yet.
+ self._performed = False
+
+ def __eq__(self, other):
+ if isinstance(other, MockTask):
+ return (self._identifier == other.GetIdentifier(self._stage) and
+ self._cost == other.GetResult(self._stage))
+ return False
+
+ def GetIdentifier(self, stage):
+ assert stage == self._stage
+ return self._identifier
+
+ def SetResult(self, stage, cost):
+ assert stage == self._stage
+ self._cost = cost
+ self._performed = True
+
+ def Work(self, stage):
+ assert stage == self._stage
+ self._performed = True
+
+ def GetResult(self, stage):
+ assert stage == self._stage
+ return self._cost
+
+ def Done(self, stage):
+ """Indicates whether the task has been performed."""
+
+ assert stage == self._stage
+ return self._performed
+
+ def LogSteeringCost(self):
+ pass
+
+
+class IdentifierMockTask(MockTask):
+ """This class defines the mock task that does not consider the cost.
+
+ The task instances will be inserted into a set. Therefore the hash and the
+ equal methods are overridden. The unittests that compares identities of the
+ tasks for equality can use this mock task instead of the base mock tack.
+ """
+
+ def __hash__(self):
+ return self._identifier
+
+ def __eq__(self, other):
+ if isinstance(other, MockTask):
+ return self._identifier == other.GetIdentifier(self._stage)
+ return False