Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / unittest / gtest_unittest_results.py
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
3 # found in the LICENSE file.
4
5 import logging
6 import sys
7 import time
8 import unittest
9
10
11 class GTestUnittestResults(unittest.TestResult):
12   def __init__(self, output_stream):
13     super(GTestUnittestResults, self).__init__()
14     self._output_stream = output_stream
15     self._timestamp = None
16     self._successes_count = 0
17
18   def _GetMs(self):
19     return (time.time() - self._timestamp) * 1000
20
21   @property
22   def num_errors(self):
23     return len(self.errors) + len(self.failures)
24
25   @staticmethod
26   def _formatTestname(test):
27     chunks = test.id().split('.')[2:]
28     return '.'.join(chunks)
29
30   def _emitFailure(self, test, err):
31     print >> self._output_stream, self._exc_info_to_string(err, test)
32     test_name = GTestUnittestResults._formatTestname(test)
33     print >> self._output_stream, '[  FAILED  ]', test_name, (
34         '(%0.f ms)' % self._GetMs())
35     sys.stdout.flush()
36
37   def addError(self, test, err):
38     super(GTestUnittestResults, self).addError(test, err)
39     self._emitFailure(test, err)
40
41   def addFailure(self, test, err):
42     super(GTestUnittestResults, self).addFailure(test, err)
43     self._emitFailure(test, err)
44
45   def startTest(self, test):
46     super(GTestUnittestResults, self).startTest(test)
47     print >> self._output_stream, '[ RUN      ]', (
48         GTestUnittestResults._formatTestname(test))
49     sys.stdout.flush()
50     self._timestamp = time.time()
51
52   def addSuccess(self, test):
53     super(GTestUnittestResults, self).addSuccess(test)
54     self._successes_count += 1
55     test_name = GTestUnittestResults._formatTestname(test)
56     print >> self._output_stream, '[       OK ]', test_name, (
57         '(%0.f ms)' % self._GetMs())
58     sys.stdout.flush()
59
60   def addSkip(self, test, reason):
61     super(GTestUnittestResults, self).addSkip(test, reason)
62     test_name = GTestUnittestResults._formatTestname(test)
63     logging.warning('===== SKIPPING TEST %s: %s =====', test_name, reason)
64     if self._timestamp == None:
65       self._timestamp = time.time()
66     print >> self._output_stream, '[       OK ]', test_name, (
67         '(%0.f ms)' % self._GetMs())
68     sys.stdout.flush()
69
70   def PrintSummary(self):
71     unit = 'test' if self._successes_count == 1 else 'tests'
72     print >> self._output_stream, '[  PASSED  ]', (
73         '%d %s.' % (self._successes_count, unit))
74     if self.errors or self.failures:
75       all_errors = self.errors[:]
76       all_errors.extend(self.failures)
77       unit = 'test' if len(all_errors) == 1 else 'tests'
78       print >> self._output_stream, '[  FAILED  ]', (
79           '%d %s, listed below:' % (len(all_errors), unit))
80       for test, _ in all_errors:
81         print >> self._output_stream, '[  FAILED  ] ', (
82             GTestUnittestResults._formatTestname(test))
83     if not self.wasSuccessful():
84       print >> self._output_stream
85       count = len(self.errors) + len(self.failures)
86       unit = 'TEST' if count == 1 else 'TESTS'
87       print >> self._output_stream, '%d FAILED %s' % (count, unit)
88     print >> self._output_stream
89     sys.stdout.flush()