116d7a5204e347855b1c3a68c982c22f931a12866Yuheng Long# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 216d7a5204e347855b1c3a68c982c22f931a12866Yuheng Long# Use of this source code is governed by a BSD-style license that can be 316d7a5204e347855b1c3a68c982c22f931a12866Yuheng Long# found in the LICENSE file. 4a5712a2c71aa665dcca808963d152228890c8364Yuheng Long"""This module defines the common mock tasks used by various unit tests. 5a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 6a791546e80cede30d5325bec834b35b99b7e7bfeYuheng LongPart of the Chrome build flags optimization. 7a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long""" 8a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 9a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long__author__ = 'yuhenglong@google.com (Yuheng Long)' 10a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 11a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long# Pick an integer at random. 12a791546e80cede30d5325bec834b35b99b7e7bfeYuheng LongPOISONPILL = 975 13a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 14a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 15a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Longclass MockTask(object): 16a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long """This class emulates an actual task. 17a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 18a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long It does not do the actual work, but simply returns the result as given when 19a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long this task is constructed. 20a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long """ 21a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 22a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long def __init__(self, stage, identifier, cost=0): 23a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long """Set up the results for this task. 24a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 25a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long Args: 26a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long stage: the stage of this test is in. 27a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long identifier: the identifier of this task. 28a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long cost: the mock cost of this task. 29a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 3025cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long The _cost field stored the cost. Once this task is performed, i.e., by 3125cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long calling the work method or by setting the result from other task, the 3225cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long _cost field will have this cost. The stage field verifies that the module 3325cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long being tested and the unitest are in the same stage. If the unitest does 3425cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long not care about cost of this task, the cost parameter should be leaved 3525cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long blank. 36a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long """ 37a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 38a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long self._identifier = identifier 3925cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long self._cost = cost 40a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long self._stage = stage 41a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 4225cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long # Indicate that this method has not been performed yet. 4325cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long self._performed = False 4425cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long 45a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long def __eq__(self, other): 46a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long if isinstance(other, MockTask): 47a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long return (self._identifier == other.GetIdentifier(self._stage) and 48a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long self._cost == other.GetResult(self._stage)) 49a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long return False 50a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 51a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long def GetIdentifier(self, stage): 52a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long assert stage == self._stage 53a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long return self._identifier 54a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 55a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long def SetResult(self, stage, cost): 56a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long assert stage == self._stage 57a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long self._cost = cost 5825cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long self._performed = True 59a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 60a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long def Work(self, stage): 61a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long assert stage == self._stage 6225cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long self._performed = True 63a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 64a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long def GetResult(self, stage): 65a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long assert stage == self._stage 66a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long return self._cost 67a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 68a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long def Done(self, stage): 69a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long """Indicates whether the task has been performed.""" 70a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long 71a791546e80cede30d5325bec834b35b99b7e7bfeYuheng Long assert stage == self._stage 7225cdf79e17a73858ffa28db8a5b387210fea9e25Yuheng Long return self._performed 73a5712a2c71aa665dcca808963d152228890c8364Yuheng Long 74b15d41c6d6324e343fbea19abaed3717417f3cdeYuheng Long def LogSteeringCost(self): 75a5712a2c71aa665dcca808963d152228890c8364Yuheng Long pass 76a5712a2c71aa665dcca808963d152228890c8364Yuheng Long 77a5712a2c71aa665dcca808963d152228890c8364Yuheng Long 78a5712a2c71aa665dcca808963d152228890c8364Yuheng Longclass IdentifierMockTask(MockTask): 79a5712a2c71aa665dcca808963d152228890c8364Yuheng Long """This class defines the mock task that does not consider the cost. 80a5712a2c71aa665dcca808963d152228890c8364Yuheng Long 81a5712a2c71aa665dcca808963d152228890c8364Yuheng Long The task instances will be inserted into a set. Therefore the hash and the 82a5712a2c71aa665dcca808963d152228890c8364Yuheng Long equal methods are overridden. The unittests that compares identities of the 83a5712a2c71aa665dcca808963d152228890c8364Yuheng Long tasks for equality can use this mock task instead of the base mock tack. 84a5712a2c71aa665dcca808963d152228890c8364Yuheng Long """ 85a5712a2c71aa665dcca808963d152228890c8364Yuheng Long 86a5712a2c71aa665dcca808963d152228890c8364Yuheng Long def __hash__(self): 87a5712a2c71aa665dcca808963d152228890c8364Yuheng Long return self._identifier 88a5712a2c71aa665dcca808963d152228890c8364Yuheng Long 89a5712a2c71aa665dcca808963d152228890c8364Yuheng Long def __eq__(self, other): 90a5712a2c71aa665dcca808963d152228890c8364Yuheng Long if isinstance(other, MockTask): 91a5712a2c71aa665dcca808963d152228890c8364Yuheng Long return self._identifier == other.GetIdentifier(self._stage) 92a5712a2c71aa665dcca808963d152228890c8364Yuheng Long return False 93