summaryrefslogtreecommitdiffstats
path: root/testrunner/test_defs/abstract_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'testrunner/test_defs/abstract_test.py')
-rw-r--r--testrunner/test_defs/abstract_test.py111
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