| # Copyright 2013 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 Verifier: |
| """Verifies that the current machine states match the expectation.""" |
| |
| def VerifyInput(self, verifier_input, variable_expander): |
| """Verifies that the current machine states match |verifier_input|. |
| |
| Args: |
| verifier_input: An input to the verifier. It is a dictionary where each |
| key is an expectation name and the associated value is an expectation |
| dictionary. The expectation dictionary may contain an optional |
| 'condition' property, a string that determines whether the expectation |
| should be verified. Each subclass can specify a different expectation |
| name and expectation dictionary. |
| variable_expander: A VariableExpander object. |
| """ |
| for expectation_name, expectation in verifier_input.iteritems(): |
| if 'condition' in expectation: |
| condition = variable_expander.Expand(expectation['condition']) |
| if not self._EvaluateCondition(condition): |
| continue |
| self._VerifyExpectation(expectation_name, expectation, variable_expander) |
| |
| def _VerifyExpectation(self, expectation_name, expectation, |
| variable_expander): |
| """Verifies that the current machine states match |verifier_input|. |
| |
| This is an abstract method for subclasses to override. |
| |
| Args: |
| expectation_name: An expectation name. Each subclass can specify a |
| different expectation name format. |
| expectation: An expectation dictionary. Each subclass can specify a |
| different expectation dictionary format. |
| variable_expander: A VariableExpander object. |
| """ |
| raise NotImplementedError() |
| |
| def _EvaluateCondition(self, condition): |
| """Evaluates |condition| using eval(). |
| |
| Args: |
| condition: A condition string. |
| |
| Returns: |
| The result of the evaluated condition. |
| """ |
| return eval(condition, {'__builtins__': None}, None) |