Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1152)

Unified Diff: build/android/pylib/gtest/setup.py

Issue 2101243005: Add a snapshot of flutter/engine/src/build to our sdk (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: add README.dart Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/pylib/gtest/local_device_gtest_run.py ('k') | build/android/pylib/gtest/test_options.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/pylib/gtest/setup.py
diff --git a/build/android/pylib/gtest/setup.py b/build/android/pylib/gtest/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..f563ccf9931e91065dfb971982c2298e832b2ecd
--- /dev/null
+++ b/build/android/pylib/gtest/setup.py
@@ -0,0 +1,230 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Generates test runner factory and tests for GTests."""
+# pylint: disable=W0212
+
+import logging
+import os
+import sys
+
+from pylib import constants
+
+from pylib.base import base_setup
+from pylib.base import base_test_result
+from pylib.base import test_dispatcher
+from pylib.device import device_utils
+from pylib.gtest import gtest_test_instance
+from pylib.gtest import test_package_apk
+from pylib.gtest import test_package_exe
+from pylib.gtest import test_runner
+
+sys.path.insert(0,
+ os.path.join(constants.DIR_SOURCE_ROOT, 'build', 'util', 'lib',
+ 'common'))
+import unittest_util # pylint: disable=F0401
+
+
+ISOLATE_FILE_PATHS = gtest_test_instance._DEFAULT_ISOLATE_FILE_PATHS
+
+
+# Used for filtering large data deps at a finer grain than what's allowed in
+# isolate files since pushing deps to devices is expensive.
+# Wildcards are allowed.
+DEPS_EXCLUSION_LIST = [
+ 'chrome/test/data/extensions/api_test',
+ 'chrome/test/data/extensions/secure_shell',
+ 'chrome/test/data/firefox*',
+ 'chrome/test/data/gpu',
+ 'chrome/test/data/image_decoding',
+ 'chrome/test/data/import',
+ 'chrome/test/data/page_cycler',
+ 'chrome/test/data/perf',
+ 'chrome/test/data/pyauto_private',
+ 'chrome/test/data/safari_import',
+ 'chrome/test/data/scroll',
+ 'chrome/test/data/third_party',
+ 'third_party/hunspell_dictionaries/*.dic',
+ # crbug.com/258690
+ 'webkit/data/bmp_decoder',
+ 'webkit/data/ico_decoder',
+]
+
+
+def _GetDisabledTestsFilterFromFile(suite_name):
+ """Returns a gtest filter based on the *_disabled file.
+
+ Args:
+ suite_name: Name of the test suite (e.g. base_unittests).
+
+ Returns:
+ A gtest filter which excludes disabled tests.
+ Example: '*-StackTrace.*:StringPrintfTest.StringPrintfMisc'
+ """
+ filter_file_path = os.path.join(
+ os.path.abspath(os.path.dirname(__file__)),
+ 'filter', '%s_disabled' % suite_name)
+
+ if not filter_file_path or not os.path.exists(filter_file_path):
+ logging.info('No filter file found at %s', filter_file_path)
+ return '*'
+
+ filters = [x for x in [x.strip() for x in file(filter_file_path).readlines()]
+ if x and x[0] != '#']
+ disabled_filter = '*-%s' % ':'.join(filters)
+ logging.info('Applying filter "%s" obtained from %s',
+ disabled_filter, filter_file_path)
+ return disabled_filter
+
+
+def _GetTests(test_options, test_package, devices):
+ """Get a list of tests.
+
+ Args:
+ test_options: A GTestOptions object.
+ test_package: A TestPackageApk object.
+ devices: A list of attached devices.
+
+ Returns:
+ A list of all the tests in the test suite.
+ """
+ class TestListResult(base_test_result.BaseTestResult):
+ def __init__(self):
+ super(TestListResult, self).__init__(
+ 'gtest_list_tests', base_test_result.ResultType.PASS)
+ self.test_list = []
+
+ def TestListerRunnerFactory(device, _shard_index):
+ class TestListerRunner(test_runner.TestRunner):
+ def RunTest(self, _test):
+ result = TestListResult()
+ self.test_package.Install(self.device)
+ result.test_list = self.test_package.GetAllTests(self.device)
+ results = base_test_result.TestRunResults()
+ results.AddResult(result)
+ return results, None
+ return TestListerRunner(test_options, device, test_package)
+
+ results, _no_retry = test_dispatcher.RunTests(
+ ['gtest_list_tests'], TestListerRunnerFactory, devices)
+ tests = []
+ for r in results.GetAll():
+ tests.extend(r.test_list)
+ return tests
+
+
+def _FilterTestsUsingPrefixes(all_tests, pre=False, manual=False):
+ """Removes tests with disabled prefixes.
+
+ Args:
+ all_tests: List of tests to filter.
+ pre: If True, include tests with PRE_ prefix.
+ manual: If True, include tests with MANUAL_ prefix.
+
+ Returns:
+ List of tests remaining.
+ """
+ filtered_tests = []
+ filter_prefixes = ['DISABLED_', 'FLAKY_', 'FAILS_']
+
+ if not pre:
+ filter_prefixes.append('PRE_')
+
+ if not manual:
+ filter_prefixes.append('MANUAL_')
+
+ for t in all_tests:
+ test_case, test = t.split('.', 1)
+ if not any([test_case.startswith(prefix) or test.startswith(prefix) for
+ prefix in filter_prefixes]):
+ filtered_tests.append(t)
+ return filtered_tests
+
+
+def _FilterDisabledTests(tests, suite_name, has_gtest_filter):
+ """Removes disabled tests from |tests|.
+
+ Applies the following filters in order:
+ 1. Remove tests with disabled prefixes.
+ 2. Remove tests specified in the *_disabled files in the 'filter' dir
+
+ Args:
+ tests: List of tests.
+ suite_name: Name of the test suite (e.g. base_unittests).
+ has_gtest_filter: Whether a gtest_filter is provided.
+
+ Returns:
+ List of tests remaining.
+ """
+ tests = _FilterTestsUsingPrefixes(
+ tests, has_gtest_filter, has_gtest_filter)
+ tests = unittest_util.FilterTestNames(
+ tests, _GetDisabledTestsFilterFromFile(suite_name))
+
+ return tests
+
+
+def Setup(test_options, devices):
+ """Create the test runner factory and tests.
+
+ Args:
+ test_options: A GTestOptions object.
+ devices: A list of attached devices.
+
+ Returns:
+ A tuple of (TestRunnerFactory, tests).
+ """
+ test_package = test_package_apk.TestPackageApk(test_options.suite_name)
+ if not os.path.exists(test_package.suite_path):
+ exe_test_package = test_package_exe.TestPackageExecutable(
+ test_options.suite_name)
+ if not os.path.exists(exe_test_package.suite_path):
+ raise Exception(
+ 'Did not find %s target. Ensure it has been built.\n'
+ '(not found at %s or %s)'
+ % (test_options.suite_name,
+ test_package.suite_path,
+ exe_test_package.suite_path))
+ test_package = exe_test_package
+ logging.warning('Found target %s', test_package.suite_path)
+
+ i = base_setup.GenerateDepsDirUsingIsolate(test_options.suite_name,
+ test_options.isolate_file_path,
+ ISOLATE_FILE_PATHS,
+ DEPS_EXCLUSION_LIST)
+ def push_data_deps_to_device_dir(device):
+ device_dir = (constants.TEST_EXECUTABLE_DIR
+ if test_package.suite_name == 'breakpad_unittests'
+ else device.GetExternalStoragePath())
+ base_setup.PushDataDeps(device, device_dir, test_options)
+ device_utils.DeviceUtils.parallel(devices).pMap(push_data_deps_to_device_dir)
+ if i:
+ i.Clear()
+
+ tests = _GetTests(test_options, test_package, devices)
+
+ # Constructs a new TestRunner with the current options.
+ def TestRunnerFactory(device, _shard_index):
+ return test_runner.TestRunner(
+ test_options,
+ device,
+ test_package)
+
+ if test_options.run_disabled:
+ test_options = test_options._replace(
+ test_arguments=('%s --gtest_also_run_disabled_tests' %
+ test_options.test_arguments))
+ else:
+ tests = _FilterDisabledTests(tests, test_options.suite_name,
+ bool(test_options.gtest_filter))
+ if test_options.gtest_filter:
+ tests = unittest_util.FilterTestNames(tests, test_options.gtest_filter)
+
+ # Coalesce unit tests into a single test per device
+ if test_options.suite_name not in gtest_test_instance.BROWSER_TEST_SUITES:
+ num_devices = len(devices)
+ tests = [':'.join(tests[i::num_devices]) for i in xrange(num_devices)]
+ tests = [t for t in tests if t]
+
+ return (TestRunnerFactory, tests)
« no previous file with comments | « build/android/pylib/gtest/local_device_gtest_run.py ('k') | build/android/pylib/gtest/test_options.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698