| # 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 |