| Index: tools/telemetry/telemetry/unittest/run_tests.py
|
| diff --git a/tools/telemetry/telemetry/unittest/run_tests.py b/tools/telemetry/telemetry/unittest/run_tests.py
|
| index 727bfc84421f1eb05e25997977c93fc3622fbc32..2605f342b2b5530cdfa9b90d0fece005cedfcdf2 100644
|
| --- a/tools/telemetry/telemetry/unittest/run_tests.py
|
| +++ b/tools/telemetry/telemetry/unittest/run_tests.py
|
| @@ -3,86 +3,73 @@
|
| # found in the LICENSE file.
|
|
|
| import logging
|
| -import sys
|
| import unittest
|
|
|
| from telemetry import decorators
|
| -from telemetry.core import browser_finder
|
| from telemetry.core import browser_options
|
| -from telemetry.core import command_line
|
| from telemetry.core import discover
|
| from telemetry.core import util
|
| -from telemetry.unittest import gtest_unittest_results
|
| +from telemetry.unittest import gtest_testrunner
|
| from telemetry.unittest import options_for_unittests
|
| -
|
| -
|
| -class Environment(object):
|
| - def __init__(self, top_level_dir, test_dirs):
|
| - self._top_level_dir = top_level_dir
|
| - self._test_dirs = tuple(test_dirs)
|
| -
|
| - @property
|
| - def top_level_dir(self):
|
| - return self._top_level_dir
|
| -
|
| - @property
|
| - def test_dirs(self):
|
| - return self._test_dirs
|
|
|
|
|
| def Discover(start_dir, top_level_dir=None, pattern='test*.py'):
|
| loader = unittest.defaultTestLoader
|
| - loader.suiteClass = gtest_unittest_results.GTestTestSuite
|
| + loader.suiteClass = gtest_testrunner.GTestTestSuite
|
| + subsuites = []
|
|
|
| - test_suites = []
|
| modules = discover.DiscoverModules(start_dir, top_level_dir, pattern)
|
| for module in modules:
|
| if hasattr(module, 'suite'):
|
| - suite = module.suite()
|
| + new_suite = module.suite()
|
| else:
|
| - suite = loader.loadTestsFromModule(module)
|
| - if suite.countTestCases():
|
| - test_suites.append(suite)
|
| - return test_suites
|
| + new_suite = loader.loadTestsFromModule(module)
|
| + if new_suite.countTestCases():
|
| + subsuites.append(new_suite)
|
| + return gtest_testrunner.GTestTestSuite(subsuites)
|
|
|
|
|
| def FilterSuite(suite, predicate):
|
| new_suite = suite.__class__()
|
| - for test in suite:
|
| - if isinstance(test, unittest.TestSuite):
|
| - subsuite = FilterSuite(test, predicate)
|
| - if subsuite.countTestCases():
|
| - new_suite.addTest(subsuite)
|
| - else:
|
| - assert isinstance(test, unittest.TestCase)
|
| - if predicate(test):
|
| - new_suite.addTest(test)
|
| + for x in suite:
|
| + if isinstance(x, unittest.TestSuite):
|
| + subsuite = FilterSuite(x, predicate)
|
| + if subsuite.countTestCases() == 0:
|
| + continue
|
| +
|
| + new_suite.addTest(subsuite)
|
| + continue
|
| +
|
| + assert isinstance(x, unittest.TestCase)
|
| + if predicate(x):
|
| + new_suite.addTest(x)
|
|
|
| return new_suite
|
|
|
|
|
| -def DiscoverTests(search_dirs, top_level_dir, possible_browser,
|
| - selected_tests=None, run_disabled_tests=False):
|
| +def DiscoverAndRunTests(dir_name, args, top_level_dir, possible_browser,
|
| + default_options, runner):
|
| + if not runner:
|
| + runner = gtest_testrunner.GTestTestRunner(print_result_after_run=True)
|
| + suite = Discover(dir_name, top_level_dir, '*_unittest.py')
|
| def IsTestSelected(test):
|
| - if selected_tests:
|
| + if len(args) != 0:
|
| found = False
|
| - for name in selected_tests:
|
| + for name in args:
|
| if name in test.id():
|
| found = True
|
| if not found:
|
| return False
|
| - if run_disabled_tests:
|
| + if default_options.run_disabled_tests:
|
| return True
|
| # pylint: disable=W0212
|
| if not hasattr(test, '_testMethodName'):
|
| return True
|
| method = getattr(test, test._testMethodName)
|
| return decorators.IsEnabled(method, possible_browser)
|
| -
|
| - wrapper_suite = gtest_unittest_results.GTestTestSuite()
|
| - for search_dir in search_dirs:
|
| - wrapper_suite.addTests(Discover(search_dir, top_level_dir, '*_unittest.py'))
|
| - return FilterSuite(wrapper_suite, IsTestSelected)
|
| + filtered_suite = FilterSuite(suite, IsTestSelected)
|
| + test_result = runner.run(filtered_suite)
|
| + return test_result
|
|
|
|
|
| def RestoreLoggingLevel(func):
|
| @@ -100,61 +87,53 @@
|
| return _LoggingRestoreWrapper
|
|
|
|
|
| -environment = None
|
| +@RestoreLoggingLevel
|
| +def Main(args, start_dir, top_level_dir, runner=None):
|
| + """Unit test suite that collects all test cases for telemetry."""
|
| + # Add unittest_data to the path so we can import packages from it.
|
| + util.AddDirToPythonPath(util.GetUnittestDataDir())
|
|
|
| + default_options = browser_options.BrowserFinderOptions()
|
| + default_options.browser_type = 'any'
|
|
|
| -class RunTestsCommand(command_line.OptparseCommand):
|
| - """Run unit tests"""
|
| + parser = default_options.CreateParser('run_tests [options] [test names]')
|
| + parser.add_option('--repeat-count', dest='run_test_repeat_count',
|
| + type='int', default=1,
|
| + help='Repeats each a provided number of times.')
|
| + parser.add_option('-d', '--also-run-disabled-tests',
|
| + dest='run_disabled_tests',
|
| + action='store_true', default=False,
|
| + help='Ignore @Disabled and @Enabled restrictions.')
|
|
|
| - usage = '[test_name ...] [<options>]'
|
| + _, args = parser.parse_args(args)
|
|
|
| - @classmethod
|
| - def CreateParser(cls):
|
| - options = browser_options.BrowserFinderOptions()
|
| - options.browser_type = 'any'
|
| - parser = options.CreateParser('%%prog %s' % cls.usage)
|
| - return parser
|
| + if default_options.verbosity == 0:
|
| + logging.getLogger().setLevel(logging.WARN)
|
|
|
| - @classmethod
|
| - def AddCommandLineArgs(cls, parser):
|
| - parser.add_option('--repeat-count', dest='run_test_repeat_count',
|
| - type='int', default=1,
|
| - help='Repeats each a provided number of times.')
|
| - parser.add_option('-d', '--also-run-disabled-tests',
|
| - dest='run_disabled_tests',
|
| - action='store_true', default=False,
|
| - help='Ignore @Disabled and @Enabled restrictions.')
|
| + from telemetry.core import browser_finder
|
| + try:
|
| + browser_to_create = browser_finder.FindBrowser(default_options)
|
| + except browser_finder.BrowserFinderException, ex:
|
| + logging.error(str(ex))
|
| + return 1
|
|
|
| - @classmethod
|
| - def ProcessCommandLineArgs(cls, parser, args):
|
| - if args.verbosity == 0:
|
| - logging.getLogger().setLevel(logging.WARN)
|
| + if browser_to_create == None:
|
| + logging.error('No browser found of type %s. Cannot run tests.',
|
| + default_options.browser_type)
|
| + logging.error('Re-run with --browser=list to see available browser types.')
|
| + return 1
|
|
|
| - try:
|
| - possible_browser = browser_finder.FindBrowser(args)
|
| - except browser_finder.BrowserFinderException, ex:
|
| - parser.error(ex)
|
| + options_for_unittests.Set(default_options,
|
| + browser_to_create.browser_type)
|
| + try:
|
| + success = True
|
| + for _ in xrange(default_options.run_test_repeat_count):
|
| + success = success and DiscoverAndRunTests(
|
| + start_dir, args, top_level_dir, browser_to_create, default_options,
|
| + runner)
|
| + if success:
|
| + return 0
|
| + finally:
|
| + options_for_unittests.Set(None, None)
|
|
|
| - if not possible_browser:
|
| - parser.error('No browser found of type %s. Cannot run tests.\n'
|
| - 'Re-run with --browser=list to see '
|
| - 'available browser types.' % args.browser_type)
|
| -
|
| - cls.test_suite = DiscoverTests(
|
| - environment.test_dirs, environment.top_level_dir, possible_browser,
|
| - args.positional_args, args.run_disabled_tests)
|
| -
|
| - @RestoreLoggingLevel
|
| - def Run(self, args):
|
| - util.AddDirToPythonPath(util.GetUnittestDataDir())
|
| -
|
| - result = gtest_unittest_results.GTestUnittestResults(sys.stdout)
|
| - try:
|
| - options_for_unittests.Set(args)
|
| - for _ in xrange(args.run_test_repeat_count):
|
| - self.test_suite(result)
|
| - finally:
|
| - options_for_unittests.Set(None)
|
| -
|
| - result.PrintSummary()
|
| - return len(result.failures) + len(result.errors)
|
| + return 1
|
|
|