1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport unittest
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.unittest import progress_reporter
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TestFoo(unittest.TestCase):
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # Test method doesn't have test- prefix intentionally. This is so that
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # run_test script won't run this test.
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  def RunPassingTest(self):
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    pass
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  def RunFailingTest(self):
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    self.fail('expected failure')
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class LoggingProgressReporter(object):
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  def __init__(self):
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    self._call_log = []
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  @property
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  def call_log(self):
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return tuple(self._call_log)
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  def __getattr__(self, name):
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    def wrapper(*_):
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      self._call_log.append(name)
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return wrapper
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ProgressReporterTest(unittest.TestCase):
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  def testTestRunner(self):
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    suite = progress_reporter.TestSuite()
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    suite.addTest(TestFoo(methodName='RunPassingTest'))
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    suite.addTest(TestFoo(methodName='RunFailingTest'))
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    reporter = LoggingProgressReporter()
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    runner = progress_reporter.TestRunner()
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    progress_reporters = (reporter,)
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    result = runner.run(suite, progress_reporters, 1, None)
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    self.assertEqual(len(result.successes), 1)
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    self.assertEqual(len(result.failures), 1)
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    self.assertEqual(len(result.failures_and_errors), 1)
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    expected = (
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        'StartTestRun', 'StartTestSuite',
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        'StartTest', 'Success', 'StopTest',
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        'StartTest', 'Failure', 'StopTest',
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        'StopTestSuite', 'StopTestRun',
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    )
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    self.assertEqual(reporter.call_log, expected)
55