Chromium Code Reviews| 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 |