1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Setup for linker tests."""
6
7import os
8import sys
9
10from pylib import constants
11from pylib.linker import test_case
12from pylib.linker import test_runner
13
14sys.path.insert(0,
15                os.path.join(constants.DIR_SOURCE_ROOT, 'build', 'util', 'lib',
16                             'common'))
17import unittest_util # pylint: disable=F0401
18
19def Setup(options, _devices):
20  """Creates a list of test cases and a runner factory.
21
22  Returns:
23    A tuple of (TestRunnerFactory, tests).
24  """
25  test_cases = [
26      test_case.LinkerLibraryAddressTest,
27      test_case.LinkerSharedRelroTest,
28      test_case.LinkerRandomizationTest ]
29
30  low_memory_modes = [False, True]
31  all_tests = [t(is_low_memory=m) for t in test_cases for m in low_memory_modes]
32
33  if options.test_filter:
34    all_test_names = [ test.qualified_name for test in all_tests ]
35    filtered_test_names = unittest_util.FilterTestNames(all_test_names,
36                                                        options.test_filter)
37    all_tests = [t for t in all_tests \
38                 if t.qualified_name in filtered_test_names]
39
40  def TestRunnerFactory(device, _shard_index):
41    return test_runner.LinkerTestRunner(
42        device, options.tool, options.push_deps,
43        options.cleanup_test_files)
44
45  return (TestRunnerFactory, all_tests)
46