# 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. """Setup for linker tests.""" import logging from pylib.constants import host_paths from pylib.linker import test_case from pylib.linker import test_runner with host_paths.SysPath(host_paths.BUILD_COMMON_PATH): import unittest_util # pylint: disable=import-error # ModernLinker requires Android M (API level 23) or later. _VERSION_SDK_PROPERTY = 'ro.build.version.sdk' _MODERN_LINKER_MINIMUM_SDK_INT = 23 def Setup(args, devices): """Creates a list of test cases and a runner factory. Args: args: an argparse.Namespace object. devices: an iterable of available devices. Returns: A tuple of (TestRunnerFactory, tests). """ legacy_linker_tests = [ test_case.LinkerSharedRelroTest(is_modern_linker=False, is_low_memory=False), test_case.LinkerSharedRelroTest(is_modern_linker=False, is_low_memory=True), ] modern_linker_tests = [ test_case.LinkerSharedRelroTest(is_modern_linker=True), ] min_sdk_int = 1 << 31 for device in devices: min_sdk_int = min(min_sdk_int, device.build_version_sdk) if min_sdk_int >= _MODERN_LINKER_MINIMUM_SDK_INT: all_tests = legacy_linker_tests + modern_linker_tests else: all_tests = legacy_linker_tests logging.warn('Not running LinkerModern tests (requires API %d, found %d)', _MODERN_LINKER_MINIMUM_SDK_INT, min_sdk_int) if args.test_filter: all_test_names = [test.qualified_name for test in all_tests] filtered_test_names = unittest_util.FilterTestNames(all_test_names, args.test_filter) all_tests = [t for t in all_tests \ if t.qualified_name in filtered_test_names] def TestRunnerFactory(device, _shard_index): return test_runner.LinkerTestRunner(device, args.tool) return (TestRunnerFactory, all_tests)