• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python
2# Copyright 2013 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Implements a unittest TestRunner with GTest output.
7
8This output is ported from gtest.cc's PrettyUnitTestResultPrinter, but
9designed to be a drop-in replacement for unittest's TextTestRunner.
10"""
11
12import sys
13import time
14import unittest
15
16from telemetry.unittest import gtest_unittest_results
17
18
19class GTestTestSuite(unittest.TestSuite):
20  def __call__(self, *args, **kwargs):
21    result = args[0]
22    timestamp = time.time()
23    unit = 'test' if len(self._tests) == 1 else 'tests'
24    if not any(isinstance(x, unittest.TestSuite) for x in self._tests):
25      print '[----------] %d %s' % (len(self._tests), unit)
26    for test in self._tests:
27      if result.shouldStop:
28        break
29      test(result)
30    endts = time.time()
31    ms = (endts - timestamp) * 1000
32    if not any(isinstance(x, unittest.TestSuite) for x in self._tests):
33      print '[----------] %d %s (%d ms total)' % (len(self._tests), unit, ms)
34      print
35    return result
36
37
38class GTestTestRunner(object):
39  def __init__(self, print_result_after_run=True):
40    self.print_result_after_run = print_result_after_run
41    self.result = gtest_unittest_results.GTestUnittestResults(sys.stdout)
42
43  def run(self, test):
44    "Run the given test case or test suite."
45    test(self.result)
46    if self.print_result_after_run:
47      self.result.PrintSummary()
48    return self.result
49