text: # 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 os
  import sys
  
  from pylib import constants
  from pylib.linker import test_case
  from pylib.linker import test_runner
  
  sys.path.insert(0,
                  os.path.join(constants.DIR_SOURCE_ROOT, 'build', 'util', 'lib',
                               'common'))
  import unittest_util # pylint: disable=F0401
  
  def Setup(args, _devices):
    """Creates a list of test cases and a runner factory.
  
    Args:
      args: an argparse.Namespace object.
    Returns:
      A tuple of (TestRunnerFactory, tests).
    """
    test_cases = [
        test_case.LinkerLibraryAddressTest,
        test_case.LinkerSharedRelroTest,
        test_case.LinkerRandomizationTest]
  
    low_memory_modes = [False, True]
    all_tests = [t(is_low_memory=m) for t in test_cases for m in low_memory_modes]
  
    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)
  