Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: build/android/pylib/base/base_test_result.py

Issue 12544033: [Android] Rewrite base test result classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """Module containing base test results classes."""
6
7 class TestType(object):
craigdh 2013/03/23 00:41:39 doc string
frankf 2013/03/23 01:32:59 Done.
8 PASS = 'PASS'
9 FAIL = 'FAIL'
10 CRASH = 'CRASH'
11 TIMEOUT = 'TIMEOUT'
12 UNKNOWN = 'UNKNOWN'
13
14 @staticmethod
15 def GetTypes():
16 """Get a list of all test types."""
17 return [TestType.PASS, TestType.FAIL, TestType.CRASH, TestType.TIMEOUT,
18 TestType.UNKNOWN]
19
20
21 class BaseTestResult(object):
22 """Base class for a single test result."""
23
craigdh 2013/03/23 00:41:39 no blank line
frankf 2013/03/23 01:32:59 Done, but pylint complains. On 2013/03/23 00:41:3
24 def __init__(self, name, test_type, log=''):
25 """Construct a BaseTestResult.
26
27 Args:
28 name: Name of the test which defines uniqueness.
29 test_type: Type of the test result as defined in TestType.
30 log: An optional string listing any errors.
31 """
32 assert name
33 assert test_type in TestType.GetTypes()
34 self._name = name
35 self._test_type = test_type
36 self._log = log
37
38 def __str__(self):
39 return self._name
40
41 def __repr__(self):
42 return self._name
43
44 def __cmp__(self, other):
45 # pylint: disable=W0212
46 return cmp(self._name, other._name)
47
48 def __hash__(self):
49 return hash(self._name)
50
51 def GetName(self):
52 """Get the test name."""
53 return self._name
54
55 def GetType(self):
56 """Get the test result type."""
57 return self._test_type
58
59 def GetLog(self):
60 """Get the test log."""
61 return self._log
62
63
64 class TestRunResults(object):
65 """Set of results for a test run."""
66
craigdh 2013/03/23 00:41:39 ditto
frankf 2013/03/23 01:32:59 Done.
67 def __init__(self):
68 self._results = set()
69
70 def GetLogs(self):
71 """Get the string representation of all test logs."""
72 s = []
73 for test_type in TestType.GetTypes():
74 if test_type != TestType.PASS:
75 tests = sorted(self._GetType(test_type))
craigdh 2013/03/23 00:41:39 no need for intermediate variable tests
frankf 2013/03/23 01:32:59 Done.
76 for t in tests:
77 s.append('[%s] %s:' % (test_type, t))
78 s.append(t.GetLog())
79 return '\n'.join(s)
80
81 def GetLongForm(self):
82 """Get the long string representation of this object."""
83 s = []
84 s.append('ALL (%d tests)' % len(self._results))
85 for test_type in TestType.GetTypes():
86 tests = sorted(self._GetType(test_type))
87 if test_type == TestType.PASS:
88 s.append('%s (%d tests)' % (test_type, len(tests)))
89 else:
90 s.append('%s (%d tests): %s' % (test_type, len(tests), tests))
91 return '\n'.join(s)
92
93 def GetShortForm(self):
94 """Get the short string representation of this object."""
95 s = []
96 s.append('ALL: %d' % len(self._results))
97 for test_type in TestType.GetTypes():
98 s.append('%s: %d' % (test_type, len(self._GetType(test_type))))
99 return ', '.join(s)
100
101 def __str__(self):
102 return self.GetLongForm()
103
104 def AddResult(self, result):
105 """Add |result| to the set.
106
107 Args:
108 result: An object derived from BaseTestResult.
craigdh 2013/03/23 00:41:39 I think "An instance of BaseTestResult." is better
frankf 2013/03/23 01:32:59 Done.
frankf 2013/03/23 01:32:59 Done.
109 """
110
craigdh 2013/03/23 00:41:39 no blank line
frankf 2013/03/23 01:32:59 Done.
frankf 2013/03/23 01:32:59 Done.
111 assert isinstance(result, BaseTestResult)
112 self._results.add(result)
113
114 def AddResults(self, results):
115 """Add a set of results to this set.
craigdh 2013/03/23 00:41:39 doesn't have to be a set, can be any iterable
frankf 2013/03/23 01:32:59 Done.
frankf 2013/03/23 01:32:59 Done.
116
117 Args:
118 results: A set of objects derived from BaseTestResult.
craigdh 2013/03/23 00:41:39 ditto
frankf 2013/03/23 01:32:59 Done.
frankf 2013/03/23 01:32:59 Done.
119 """
120 for t in results:
121 self.AddResult(t)
122
123 def AddTestRunResults(self, results):
124 """Add the set of test results from |results|.
125
126 Args:
127 results: An instance of TestRunResults.
128 """
129 assert isinstance(results, TestRunResults)
130 # pylint: disable=W0212
131 self._results.update(results._results)
132
133 def GetAll(self):
134 """Get the set of all test results."""
135 return self._results.copy()
136
137 def _GetType(self, test_type):
138 """Get the set of test results with the given test type."""
139 return set([t for t in self._results if t.GetType() == test_type])
craigdh 2013/03/23 00:41:39 nit: generator expressions are more scaleable than
frankf 2013/03/23 01:32:59 I want the return type to be a set though. On 201
craigdh 2013/03/25 18:06:43 It still will be, there just won't be a (possibly
140
141 def GetPass(self):
142 """Get the set of all passed test results."""
143 return self._GetType(TestType.PASS)
144
145 def GetFail(self):
146 """Get the set of all failed test results."""
147 return self._GetType(TestType.FAIL)
148
149 def GetCrash(self):
150 """Get the set of all crashed test results."""
151 return self._GetType(TestType.CRASH)
152
153 def GetTimeout(self):
154 """Get the set of all timed out test results."""
155 return self._GetType(TestType.TIMEOUT)
156
157 def GetUnknown(self):
158 """Get the set of all unknown test results."""
159 return self._GetType(TestType.UNKNOWN)
160
161 def GetNotPass(self):
162 """Get the set of all non-passed test results."""
163 return self.GetAll() - self.GetPass()
164
165 def DidRunPass(self):
166 """Return whether the test run was succesfull"""
167 return not self.GetNotPass()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698