diff options
Diffstat (limited to 'testrunner/test_defs/abstract_test.py')
| -rw-r--r-- | testrunner/test_defs/abstract_test.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/testrunner/test_defs/abstract_test.py b/testrunner/test_defs/abstract_test.py new file mode 100644 index 000000000..7c4d63dde --- /dev/null +++ b/testrunner/test_defs/abstract_test.py @@ -0,0 +1,111 @@ +#!/usr/bin/python2.4 +# +# +# Copyright 2009, The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Abstract Android test suite.""" + +# Python imports +import xml.dom.minidom +import xml.parsers + +# local imports +import errors +import logger + + +class AbstractTestSuite(object): + """Represents a generic test suite definition parsed from xml. + + This class will parse the XML attributes common to all TestSuite's. + """ + + _NAME_ATTR = "name" + _BUILD_ATTR = "build_path" + _CONTINUOUS_ATTR = "continuous" + _CTS_ATTR = "cts" + _DESCRIPTION_ATTR = "description" + _EXTRA_BUILD_ARGS_ATTR = "extra_build_args" + + def __init__(self): + self._attr_map = {} + + def Parse(self, suite_element): + """Populates this instance's data from given suite xml element. + Raises: + ParseError if a required attribute is missing. + """ + # parse name first so it can be used for error reporting + self._ParseAttribute(suite_element, self._NAME_ATTR, True) + self._ParseAttribute(suite_element, self._BUILD_ATTR, True) + self._ParseAttribute(suite_element, self._CONTINUOUS_ATTR, False, + default_value=False) + self._ParseAttribute(suite_element, self._CTS_ATTR, False, + default_value=False) + self._ParseAttribute(suite_element, self._DESCRIPTION_ATTR, False, + default_value="") + self._ParseAttribute(suite_element, self._EXTRA_BUILD_ARGS_ATTR, False, + default_value="") + + def _ParseAttribute(self, suite_element, attribute_name, mandatory, + default_value=None): + if suite_element.hasAttribute(attribute_name): + self._attr_map[attribute_name] = \ + suite_element.getAttribute(attribute_name) + elif mandatory: + error_msg = ("Could not find attribute %s in %s %s" % + (attribute_name, self.TAG_NAME, self.GetName())) + raise errors.ParseError(msg=error_msg) + else: + self._attr_map[attribute_name] = default_value + + def GetName(self): + return self._GetAttribute(self._NAME_ATTR) + + def GetBuildPath(self): + """Returns the build path of this test, relative to source tree root.""" + return self._GetAttribute(self._BUILD_ATTR) + + def GetBuildDependencies(self, options): + """Returns a list of dependent build paths.""" + return [] + + def IsContinuous(self): + """Returns true if test is flagged as being part of the continuous tests""" + return self._GetAttribute(self._CONTINUOUS_ATTR) + + def IsCts(self): + """Returns true if test is part of the compatibility test suite""" + return self._GetAttribute(self._CTS_ATTR) + + def GetDescription(self): + """Returns a description if available, an empty string otherwise.""" + return self._GetAttribute(self._DESCRIPTION_ATTR) + + def GetExtraBuildArgs(self): + """Returns the extra build args if available, an empty string otherwise.""" + return self._GetAttribute(self._EXTRA_BUILD_ARGS_ATTR) + + def _GetAttribute(self, attribute_name): + return self._attr_map.get(attribute_name) + + def Run(self, options, adb): + """Runs the test. + + Subclasses must implement this. + Args: + options: global command line options + """ + raise NotImplementedError |
