Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / unittest / gtest_progress_reporter_unittest.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 sys
6 import unittest
7
8 from telemetry.core import exceptions
9 from telemetry.unittest import gtest_progress_reporter
10 from telemetry.unittest import simple_mock
11
12
13 try:
14   raise exceptions.IntentionalException()
15 except exceptions.IntentionalException:
16   INTENTIONAL_EXCEPTION = sys.exc_info()
17
18
19 class TestFoo(unittest.TestCase):
20   # Test method doesn't have test- prefix intentionally. This is so that
21   # run_test script won't run this test.
22   def runTezt(self):
23     pass
24
25
26 class TestOutputStream(object):
27   def __init__(self):
28     self._output_data = []
29
30   @property
31   def output_data(self):
32     return ''.join(self._output_data)
33
34   def write(self, data):
35     self._output_data.append(data)
36
37   def flush(self):
38     pass
39
40
41 class TestResultWithSuccesses(unittest.TestResult):
42   def __init__(self):
43     super(TestResultWithSuccesses, self).__init__()
44     self.successes = []
45
46   def addSuccess(self, test):
47     super(TestResultWithSuccesses, self).addSuccess(test)
48     self.successes.append(test)
49
50
51 class GTestProgressReporterTest(unittest.TestCase):
52   def setUp(self):
53     super(GTestProgressReporterTest, self).setUp()
54     self._stream = TestOutputStream()
55     self._formatter = gtest_progress_reporter.GTestProgressReporter(
56         self._stream)
57
58     self._mock_timer = simple_mock.MockTimer()
59     self._real_time_time = gtest_progress_reporter.time.time
60     gtest_progress_reporter.time.time = self._mock_timer.GetTime
61
62   def tearDown(self):
63     gtest_progress_reporter.time.time = self._real_time_time
64
65   def testTestSuiteWithWrapperSuite(self):
66     suite = unittest.TestSuite()
67     suite.addTest(unittest.TestSuite())
68     self._formatter.StartTestSuite(suite)
69     self._formatter.StopTestSuite(suite)
70
71     self.assertEqual(self._stream.output_data, '')
72
73   def testTestSuiteWithTestCase(self):
74     suite = unittest.TestSuite()
75     suite.addTest(TestFoo(methodName='runTezt'))
76     self._formatter.StartTestSuite(suite)
77     self._mock_timer.SetTime(0.042)
78     self._formatter.StopTestSuite(suite)
79
80     expected = ('[----------] 1 test\n'
81                 '[----------] 1 test (42 ms total)\n\n')
82     self.assertEqual(self._stream.output_data, expected)
83
84   def testCaseFailure(self):
85     test = TestFoo(methodName='runTezt')
86     self._formatter.StartTest(test)
87     self._mock_timer.SetTime(0.042)
88     self._formatter.Failure(test, INTENTIONAL_EXCEPTION)
89
90     expected = (
91         '[ RUN      ] gtest_progress_reporter_unittest.TestFoo.runTezt\n'
92         '[  FAILED  ] gtest_progress_reporter_unittest.TestFoo.runTezt '
93         '(42 ms)\n')
94     self.assertEqual(self._stream.output_data, expected)
95
96   def testCaseSuccess(self):
97     test = TestFoo(methodName='runTezt')
98     self._formatter.StartTest(test)
99     self._mock_timer.SetTime(0.042)
100     self._formatter.Success(test)
101
102     expected = (
103         '[ RUN      ] gtest_progress_reporter_unittest.TestFoo.runTezt\n'
104         '[       OK ] gtest_progress_reporter_unittest.TestFoo.runTezt '
105         '(42 ms)\n')
106     self.assertEqual(self._stream.output_data, expected)
107
108   def testStopTestRun(self):
109     result = TestResultWithSuccesses()
110     self._formatter.StopTestRun(result)
111
112     expected = '[  PASSED  ] 0 tests.\n\n'
113     self.assertEqual(self._stream.output_data, expected)
114
115   def testStopTestRunWithFailureAndSuccess(self):
116     test = TestFoo(methodName='runTezt')
117     result = TestResultWithSuccesses()
118     result.addSuccess(test)
119     result.addFailure(test, INTENTIONAL_EXCEPTION)
120     self._formatter.StopTestRun(result)
121
122     expected = (
123         '[  PASSED  ] 1 test.\n'
124         '[  FAILED  ] 1 test, listed below:\n'
125         '[  FAILED  ]  gtest_progress_reporter_unittest.TestFoo.runTezt\n\n'
126         '1 FAILED TEST\n\n')
127     self.assertEqual(self._stream.output_data, expected)