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
5import unittest
6
7from telemetry.unittest import progress_reporter
8
9
10class TestFoo(unittest.TestCase):
11  # Test method doesn't have test- prefix intentionally. This is so that
12  # run_test script won't run this test.
13  def RunPassingTest(self):
14    pass
15
16  def RunFailingTest(self):
17    self.fail('expected failure')
18
19
20class LoggingProgressReporter(object):
21  def __init__(self):
22    self._call_log = []
23
24  @property
25  def call_log(self):
26    return tuple(self._call_log)
27
28  def __getattr__(self, name):
29    def wrapper(*_):
30      self._call_log.append(name)
31    return wrapper
32
33
34class ProgressReporterTest(unittest.TestCase):
35  def testTestRunner(self):
36    suite = progress_reporter.TestSuite()
37    suite.addTest(TestFoo(methodName='RunPassingTest'))
38    suite.addTest(TestFoo(methodName='RunFailingTest'))
39
40    reporter = LoggingProgressReporter()
41    runner = progress_reporter.TestRunner()
42    progress_reporters = (reporter,)
43    result = runner.run(suite, progress_reporters, 1, None)
44
45    self.assertEqual(len(result.successes), 1)
46    self.assertEqual(len(result.failures), 1)
47    self.assertEqual(len(result.failures_and_errors), 1)
48    expected = (
49        'StartTestRun', 'StartTestSuite',
50        'StartTest', 'Success', 'StopTest',
51        'StartTest', 'Failure', 'StopTest',
52        'StopTestSuite', 'StopTestRun',
53    )
54    self.assertEqual(reporter.call_log, expected)
55