OLD | NEW |
---|---|
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 import collections | 5 import collections |
6 import copy | 6 import copy |
7 import logging | 7 import logging |
8 import sys | 8 import sys |
9 import traceback | 9 import traceback |
10 | 10 |
11 | 11 |
12 class PageTestResults(object): | 12 class PageTestResults(object): |
13 def __init__(self, output_stream=None): | 13 def __init__(self, output_stream=None): |
14 super(PageTestResults, self).__init__() | 14 super(PageTestResults, self).__init__() |
15 self._output_stream = output_stream | 15 self._output_stream = output_stream |
16 self.pages_that_had_errors = set() | |
17 self.pages_that_had_failures = set() | 16 self.pages_that_had_failures = set() |
18 self.successes = [] | 17 self.successes = [] |
19 self.errors = [] | |
20 self.failures = [] | 18 self.failures = [] |
21 self.skipped = [] | 19 self.skipped = [] |
22 | 20 |
23 def __copy__(self): | 21 def __copy__(self): |
24 cls = self.__class__ | 22 cls = self.__class__ |
25 result = cls.__new__(cls) | 23 result = cls.__new__(cls) |
26 for k, v in self.__dict__.items(): | 24 for k, v in self.__dict__.items(): |
27 if isinstance(v, collections.Container): | 25 if isinstance(v, collections.Container): |
28 v = copy.copy(v) | 26 v = copy.copy(v) |
29 setattr(result, k, v) | 27 setattr(result, k, v) |
30 return result | 28 return result |
31 | 29 |
32 @property | |
33 def pages_that_had_errors_or_failures(self): | |
34 return self.pages_that_had_errors.union( | |
35 self.pages_that_had_failures) | |
36 | |
37 def _GetStringFromExcInfo(self, err): | 30 def _GetStringFromExcInfo(self, err): |
38 return ''.join(traceback.format_exception(*err)) | 31 return ''.join(traceback.format_exception(*err)) |
39 | 32 |
40 def StartTest(self, page): | 33 def StartTest(self, page): |
41 pass | 34 pass |
42 | 35 |
43 def StopTest(self, page): | 36 def StopTest(self, page): |
44 pass | 37 pass |
45 | 38 |
46 def AddError(self, page, err): | |
47 self.pages_that_had_errors.add(page) | |
48 self.errors.append((page, self._GetStringFromExcInfo(err))) | |
49 | |
50 def AddFailure(self, page, err): | 39 def AddFailure(self, page, err): |
51 self.pages_that_had_failures.add(page) | 40 self.pages_that_had_failures.add(page) |
nednguyen
2014/07/15 03:07:42
It seems like this pages_that_had_failures is not
chrishenry
2014/07/15 17:55:53
It is being used from PageMeasurementResults.
| |
52 self.failures.append((page, self._GetStringFromExcInfo(err))) | 41 self.failures.append((page, self._GetStringFromExcInfo(err))) |
53 | 42 |
54 def AddSkip(self, page, reason): | 43 def AddSkip(self, page, reason): |
55 self.skipped.append((page, reason)) | 44 self.skipped.append((page, reason)) |
56 | 45 |
57 def AddSuccess(self, page): | 46 def AddSuccess(self, page): |
58 self.successes.append(page) | 47 self.successes.append(page) |
59 | 48 |
60 def AddFailureMessage(self, page, message): | 49 def AddFailureMessage(self, page, message): |
61 try: | 50 try: |
62 raise Exception(message) | 51 raise Exception(message) |
63 except Exception: | 52 except Exception: |
64 self.AddFailure(page, sys.exc_info()) | 53 self.AddFailure(page, sys.exc_info()) |
65 | 54 |
66 def AddErrorMessage(self, page, message): | |
67 try: | |
68 raise Exception(message) | |
69 except Exception: | |
70 self.AddError(page, sys.exc_info()) | |
71 | |
72 def PrintSummary(self): | 55 def PrintSummary(self): |
73 if self.failures: | 56 if self.failures: |
74 logging.error('Failed pages:\n%s', '\n'.join( | 57 logging.error('Failed pages:\n%s', '\n'.join( |
75 p.display_name for p in zip(*self.failures)[0])) | 58 p.display_name for p in zip(*self.failures)[0])) |
76 | 59 |
77 if self.errors: | |
78 logging.error('Errored pages:\n%s', '\n'.join( | |
79 p.display_name for p in zip(*self.errors)[0])) | |
80 | |
81 if self.skipped: | 60 if self.skipped: |
82 logging.warning('Skipped pages:\n%s', '\n'.join( | 61 logging.warning('Skipped pages:\n%s', '\n'.join( |
83 p.display_name for p in zip(*self.skipped)[0])) | 62 p.display_name for p in zip(*self.skipped)[0])) |
OLD | NEW |