| Index: build/android/pylib/base/base_test_result.py
|
| diff --git a/build/android/pylib/base/base_test_result.py b/build/android/pylib/base/base_test_result.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b631af94b872534f2974f7c55a0a6229be6ed1a7
|
| --- /dev/null
|
| +++ b/build/android/pylib/base/base_test_result.py
|
| @@ -0,0 +1,165 @@
|
| +# Copyright (c) 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.
|
| +
|
| +"""Module containing base test results classes."""
|
| +
|
| +
|
| +class TestType(object):
|
| + """Class enumerating test types."""
|
| + PASS = 'PASS'
|
| + FAIL = 'FAIL'
|
| + CRASH = 'CRASH'
|
| + TIMEOUT = 'TIMEOUT'
|
| + UNKNOWN = 'UNKNOWN'
|
| +
|
| + @staticmethod
|
| + def GetTypes():
|
| + """Get a list of all test types."""
|
| + return [TestType.PASS, TestType.FAIL, TestType.CRASH, TestType.TIMEOUT,
|
| + TestType.UNKNOWN]
|
| +
|
| +
|
| +class BaseTestResult(object):
|
| + """Base class for a single test result."""
|
| + def __init__(self, name, test_type, log=''):
|
| + """Construct a BaseTestResult.
|
| +
|
| + Args:
|
| + name: Name of the test which defines uniqueness.
|
| + test_type: Type of the test result as defined in TestType.
|
| + log: An optional string listing any errors.
|
| + """
|
| + assert name
|
| + assert test_type in TestType.GetTypes()
|
| + self._name = name
|
| + self._test_type = test_type
|
| + self._log = log
|
| +
|
| + def __str__(self):
|
| + return self._name
|
| +
|
| + def __repr__(self):
|
| + return self._name
|
| +
|
| + def __cmp__(self, other):
|
| + # pylint: disable=W0212
|
| + return cmp(self._name, other._name)
|
| +
|
| + def __hash__(self):
|
| + return hash(self._name)
|
| +
|
| + def GetName(self):
|
| + """Get the test name."""
|
| + return self._name
|
| +
|
| + def GetType(self):
|
| + """Get the test result type."""
|
| + return self._test_type
|
| +
|
| + def GetLog(self):
|
| + """Get the test log."""
|
| + return self._log
|
| +
|
| +
|
| +class TestRunResults(object):
|
| + """Set of results for a test run."""
|
| + def __init__(self):
|
| + self._results = set()
|
| +
|
| + def GetLogs(self):
|
| + """Get the string representation of all test logs."""
|
| + s = []
|
| + for test_type in TestType.GetTypes():
|
| + if test_type != TestType.PASS:
|
| + for t in sorted(self._GetType(test_type)):
|
| + s.append('[%s] %s:' % (test_type, t))
|
| + s.append(t.GetLog())
|
| + return '\n'.join(s)
|
| +
|
| + def GetLongForm(self):
|
| + """Get the long string representation of this object."""
|
| + s = []
|
| + s.append('ALL (%d tests)' % len(self._results))
|
| + for test_type in TestType.GetTypes():
|
| + tests = sorted(self._GetType(test_type))
|
| + if test_type == TestType.PASS:
|
| + s.append('%s (%d tests)' % (test_type, len(tests)))
|
| + else:
|
| + s.append('%s (%d tests): %s' % (test_type, len(tests), tests))
|
| + return '\n'.join(s)
|
| +
|
| + def GetShortForm(self):
|
| + """Get the short string representation of this object."""
|
| + s = []
|
| + s.append('ALL: %d' % len(self._results))
|
| + for test_type in TestType.GetTypes():
|
| + s.append('%s: %d' % (test_type, len(self._GetType(test_type))))
|
| + return ', '.join(s)
|
| +
|
| + def __str__(self):
|
| + return self.GetLongForm()
|
| +
|
| + def AddResult(self, result):
|
| + """Add |result| to the set.
|
| +
|
| + Args:
|
| + result: An instance of BaseTestResult.
|
| + """
|
| + assert isinstance(result, BaseTestResult)
|
| + self._results.add(result)
|
| +
|
| + def AddResults(self, results):
|
| + """Add |results| to the set.
|
| +
|
| + Args:
|
| + results: An iterable of BaseTestResult objects.
|
| + """
|
| + for t in results:
|
| + self.AddResult(t)
|
| +
|
| + def AddTestRunResults(self, results):
|
| + """Add the set of test results from |results|.
|
| +
|
| + Args:
|
| + results: An instance of TestRunResults.
|
| + """
|
| + assert isinstance(results, TestRunResults)
|
| + # pylint: disable=W0212
|
| + self._results.update(results._results)
|
| +
|
| + def GetAll(self):
|
| + """Get the set of all test results."""
|
| + return self._results.copy()
|
| +
|
| + def _GetType(self, test_type):
|
| + """Get the set of test results with the given test type."""
|
| + return set([t for t in self._results if t.GetType() == test_type])
|
| +
|
| + def GetPass(self):
|
| + """Get the set of all passed test results."""
|
| + return self._GetType(TestType.PASS)
|
| +
|
| + def GetFail(self):
|
| + """Get the set of all failed test results."""
|
| + return self._GetType(TestType.FAIL)
|
| +
|
| + def GetCrash(self):
|
| + """Get the set of all crashed test results."""
|
| + return self._GetType(TestType.CRASH)
|
| +
|
| + def GetTimeout(self):
|
| + """Get the set of all timed out test results."""
|
| + return self._GetType(TestType.TIMEOUT)
|
| +
|
| + def GetUnknown(self):
|
| + """Get the set of all unknown test results."""
|
| + return self._GetType(TestType.UNKNOWN)
|
| +
|
| + def GetNotPass(self):
|
| + """Get the set of all non-passed test results."""
|
| + return self.GetAll() - self.GetPass()
|
| +
|
| + def DidRunPass(self):
|
| + """Return whether the test run was successful."""
|
| + return not self.GetNotPass()
|
|
|