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.
12 class PageTestResults(unittest.TestResult):
13 def __init__(self, output_stream=None):
14 super(PageTestResults, self).__init__()
15 self._output_stream = output_stream
16 self.pages_that_had_errors = set()
17 self.pages_that_had_failures = set()
23 result = cls.__new__(cls)
24 for k, v in self.__dict__.items():
25 if isinstance(v, collections.Container):
31 def pages_that_had_errors_or_failures(self):
32 return self.pages_that_had_errors.union(
33 self.pages_that_had_failures)
35 def _exc_info_to_string(self, err, test):
36 if isinstance(test, unittest.TestCase):
37 return super(PageTestResults, self)._exc_info_to_string(err, test)
39 return ''.join(traceback.format_exception(*err))
41 def addSuccess(self, test):
42 self.successes.append(test)
44 def addSkip(self, test, reason): # Python 2.7 has this in unittest.TestResult
45 logging.warning('%s\n%s\nSkipping page.', test, reason)
46 self.skipped.append((test, reason))
48 def StartTest(self, page):
49 self.startTest(page.display_name)
51 def StopTest(self, page):
52 self.stopTest(page.display_name)
54 def AddError(self, page, err):
55 self.pages_that_had_errors.add(page)
56 self.addError(page.display_name, err)
58 def AddFailure(self, page, err):
59 self.pages_that_had_failures.add(page)
60 self.addFailure(page.display_name, err)
62 def AddSuccess(self, page):
63 self.addSuccess(page.display_name)
65 def AddSkip(self, page, reason):
66 self.addSkip(page.display_name, reason)
68 def AddFailureMessage(self, page, message):
70 raise Exception(message)
72 self.AddFailure(page, sys.exc_info())
74 def AddErrorMessage(self, page, message):
76 raise Exception(message)
78 self.AddError(page, sys.exc_info())
80 def PrintSummary(self):
82 logging.error('Failed pages:\n%s', '\n'.join(zip(*self.failures)[0]))
85 logging.error('Errored pages:\n%s', '\n'.join(zip(*self.errors)[0]))
88 logging.warning('Skipped pages:\n%s', '\n'.join(zip(*self.skipped)[0]))