OLD | NEW |
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Module containing base test results classes.""" | 5 """Module containing base test results classes.""" |
6 | 6 |
7 class ResultType(object): | 7 class ResultType(object): |
8 """Class enumerating test types.""" | 8 """Class enumerating test types.""" |
9 PASS = 'PASS' | 9 PASS = 'PASS' |
| 10 SKIP = 'SKIP' |
10 FAIL = 'FAIL' | 11 FAIL = 'FAIL' |
11 CRASH = 'CRASH' | 12 CRASH = 'CRASH' |
12 TIMEOUT = 'TIMEOUT' | 13 TIMEOUT = 'TIMEOUT' |
13 UNKNOWN = 'UNKNOWN' | 14 UNKNOWN = 'UNKNOWN' |
14 | 15 |
15 @staticmethod | 16 @staticmethod |
16 def GetTypes(): | 17 def GetTypes(): |
17 """Get a list of all test types.""" | 18 """Get a list of all test types.""" |
18 return [ResultType.PASS, ResultType.FAIL, ResultType.CRASH, | 19 return [ResultType.PASS, ResultType.SKIP, ResultType.FAIL, |
19 ResultType.TIMEOUT, ResultType.UNKNOWN] | 20 ResultType.CRASH, ResultType.TIMEOUT, ResultType.UNKNOWN] |
20 | 21 |
21 | 22 |
22 class BaseTestResult(object): | 23 class BaseTestResult(object): |
23 """Base class for a single test result.""" | 24 """Base class for a single test result.""" |
24 | 25 |
25 def __init__(self, name, test_type, log=''): | 26 def __init__(self, name, test_type, log=''): |
26 """Construct a BaseTestResult. | 27 """Construct a BaseTestResult. |
27 | 28 |
28 Args: | 29 Args: |
29 name: Name of the test which defines uniqueness. | 30 name: Name of the test which defines uniqueness. |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 | 91 |
91 def GetGtestForm(self): | 92 def GetGtestForm(self): |
92 """Get the gtest string representation of this object.""" | 93 """Get the gtest string representation of this object.""" |
93 s = [] | 94 s = [] |
94 plural = lambda n, s, p: '%d %s' % (n, p if n != 1 else s) | 95 plural = lambda n, s, p: '%d %s' % (n, p if n != 1 else s) |
95 tests = lambda n: plural(n, 'test', 'tests') | 96 tests = lambda n: plural(n, 'test', 'tests') |
96 | 97 |
97 s.append('[==========] %s ran.' % (tests(len(self.GetAll())))) | 98 s.append('[==========] %s ran.' % (tests(len(self.GetAll())))) |
98 s.append('[ PASSED ] %s.' % (tests(len(self.GetPass())))) | 99 s.append('[ PASSED ] %s.' % (tests(len(self.GetPass())))) |
99 | 100 |
100 not_passed = self.GetNotPass() | 101 skipped = self.GetSkip() |
101 if len(not_passed) > 0: | 102 if skipped: |
102 s.append('[ FAILED ] %s, listed below:' % tests(len(self.GetNotPass()))) | 103 s.append('[ SKIPPED ] Skipped %s, listed below:' % tests(len(skipped))) |
103 for t in self.GetFail(): | 104 for t in sorted(skipped): |
| 105 s.append('[ SKIPPED ] %s' % str(t)) |
| 106 |
| 107 all_failures = self.GetFail().union(self.GetCrash(), self.GetTimeout(), |
| 108 self.GetUnknown()) |
| 109 if all_failures: |
| 110 s.append('[ FAILED ] %s, listed below:' % tests(len(all_failures))) |
| 111 for t in sorted(self.GetFail()): |
104 s.append('[ FAILED ] %s' % str(t)) | 112 s.append('[ FAILED ] %s' % str(t)) |
105 for t in self.GetCrash(): | 113 for t in sorted(self.GetCrash()): |
106 s.append('[ FAILED ] %s (CRASHED)' % str(t)) | 114 s.append('[ FAILED ] %s (CRASHED)' % str(t)) |
107 for t in self.GetTimeout(): | 115 for t in sorted(self.GetTimeout()): |
108 s.append('[ FAILED ] %s (TIMEOUT)' % str(t)) | 116 s.append('[ FAILED ] %s (TIMEOUT)' % str(t)) |
109 for t in self.GetUnknown(): | 117 for t in sorted(self.GetUnknown()): |
110 s.append('[ FAILED ] %s (UNKNOWN)' % str(t)) | 118 s.append('[ FAILED ] %s (UNKNOWN)' % str(t)) |
111 s.append('') | 119 s.append('') |
112 s.append(plural(len(not_passed), 'FAILED TEST', 'FAILED TESTS')) | 120 s.append(plural(len(all_failures), 'FAILED TEST', 'FAILED TESTS')) |
113 return '\n'.join(s) | 121 return '\n'.join(s) |
114 | 122 |
115 def GetShortForm(self): | 123 def GetShortForm(self): |
116 """Get the short string representation of this object.""" | 124 """Get the short string representation of this object.""" |
117 s = [] | 125 s = [] |
118 s.append('ALL: %d' % len(self._results)) | 126 s.append('ALL: %d' % len(self._results)) |
119 for test_type in ResultType.GetTypes(): | 127 for test_type in ResultType.GetTypes(): |
120 s.append('%s: %d' % (test_type, len(self._GetType(test_type)))) | 128 s.append('%s: %d' % (test_type, len(self._GetType(test_type)))) |
121 return ''.join([x.ljust(15) for x in s]) | 129 return ''.join([x.ljust(15) for x in s]) |
122 | 130 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 return self._results.copy() | 164 return self._results.copy() |
157 | 165 |
158 def _GetType(self, test_type): | 166 def _GetType(self, test_type): |
159 """Get the set of test results with the given test type.""" | 167 """Get the set of test results with the given test type.""" |
160 return set(t for t in self._results if t.GetType() == test_type) | 168 return set(t for t in self._results if t.GetType() == test_type) |
161 | 169 |
162 def GetPass(self): | 170 def GetPass(self): |
163 """Get the set of all passed test results.""" | 171 """Get the set of all passed test results.""" |
164 return self._GetType(ResultType.PASS) | 172 return self._GetType(ResultType.PASS) |
165 | 173 |
| 174 def GetSkip(self): |
| 175 """Get the set of all skipped test results.""" |
| 176 return self._GetType(ResultType.SKIP) |
| 177 |
166 def GetFail(self): | 178 def GetFail(self): |
167 """Get the set of all failed test results.""" | 179 """Get the set of all failed test results.""" |
168 return self._GetType(ResultType.FAIL) | 180 return self._GetType(ResultType.FAIL) |
169 | 181 |
170 def GetCrash(self): | 182 def GetCrash(self): |
171 """Get the set of all crashed test results.""" | 183 """Get the set of all crashed test results.""" |
172 return self._GetType(ResultType.CRASH) | 184 return self._GetType(ResultType.CRASH) |
173 | 185 |
174 def GetTimeout(self): | 186 def GetTimeout(self): |
175 """Get the set of all timed out test results.""" | 187 """Get the set of all timed out test results.""" |
176 return self._GetType(ResultType.TIMEOUT) | 188 return self._GetType(ResultType.TIMEOUT) |
177 | 189 |
178 def GetUnknown(self): | 190 def GetUnknown(self): |
179 """Get the set of all unknown test results.""" | 191 """Get the set of all unknown test results.""" |
180 return self._GetType(ResultType.UNKNOWN) | 192 return self._GetType(ResultType.UNKNOWN) |
181 | 193 |
182 def GetNotPass(self): | 194 def GetNotPass(self): |
183 """Get the set of all non-passed test results.""" | 195 """Get the set of all non-passed test results.""" |
184 return self.GetAll() - self.GetPass() | 196 return self.GetAll() - self.GetPass() |
185 | 197 |
186 def DidRunPass(self): | 198 def DidRunPass(self): |
187 """Return whether the test run was successful.""" | 199 """Return whether the test run was successful.""" |
188 return not self.GetNotPass() | 200 return not (self.GetNotPass() - self.GetSkip()) |
| 201 |
OLD | NEW |