Source code
Revision control
Copy as Markdown
Other Tools
# Copyright 2020 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.
import("//chromium/build/config/coverage/coverage.gni")
import("//chromium/build/config/ios/ios_sdk.gni")
import("//chromium/build/util/generate_wrapper.gni")
# Invokes generate_wrapper to create an executable script wrapping iOS'
# run.py with baked in arguments. Only takes effect when test entry in
# gn_isolate_map.pyl is updated to type="generated_script" with script
# set to the wrapper output path.
#
# Arguments:
#
# data
# (optional, default [ "//ios/build/bots/scripts/" ]) list of files or
# directories required to run target
#
# data_deps
# (optional) list of target non-linked labels
#
# deps
# (optional) list of files or directories required to run target
#
# executable_args
# (optional) a list of string arguments to pass to run.py
#
# retries
# (optional, default 3) number of retry attempts
#
# shards
# (optional, default 1) number of shards to execute tests in parallel. not
# the same as swarming shards.
#
# wrapper_output_name
# (optional, default "run_${target_name}") name of the wrapper script
#
template("ios_test_runner_wrapper") {
generate_wrapper(target_name) {
forward_variables_from(invoker,
[
"deps",
"retries",
"shards",
"wrapper_output_name",
])
testonly = true
executable = "//testing/test_env.py"
# iOS main test runner
_runner_path =
rebase_path("//ios/build/bots/scripts/run.py", root_build_dir)
executable_args = [ "@WrappedPath(${_runner_path})" ]
# arguments passed to run.py
if (defined(invoker.executable_args)) {
executable_args += invoker.executable_args
}
_rebased_mac_toolchain = rebase_path("//mac_toolchain", root_build_dir)
_rebased_xcode_path = rebase_path("//Xcode.app", root_build_dir)
_rebased_ios_runtime_cache_prefix =
rebase_path("//Runtime-ios-", root_build_dir)
# --out-dir argument is specified in gn_isolate_map.pyl because
# ${ISOLATED_OUTDIR} doesn't get resolved through this wrapper.
executable_args += [
"--xcode-path",
"@WrappedPath(${_rebased_xcode_path})",
"--mac-toolchain-cmd",
"@WrappedPath(${_rebased_mac_toolchain})",
"--runtime-cache-prefix",
"@WrappedPath(${_rebased_ios_runtime_cache_prefix})",
]
# Default retries to 3
if (!defined(retries)) {
retries = 3
}
executable_args += [
"--retries",
"${retries}",
]
# Default shards to 1
if (!defined(shards)) {
shards = 1
}
executable_args += [
"--shards",
"${shards}",
]
data_deps = [ "//testing:test_scripts_shared" ]
if (defined(invoker.data_deps)) {
data_deps += invoker.data_deps
}
# test runner relies on iossim for simulator builds.
if (target_environment == "simulator") {
_rebased_root_build_dir = rebase_path("${root_build_dir}", root_build_dir)
data_deps += [ "//testing/iossim" ]
executable_args += [
"--iossim",
"@WrappedPath(${_rebased_root_build_dir}/iossim)",
]
}
if (use_clang_coverage) {
executable_args += [ "--use-clang-coverage" ]
}
if (!is_debug) {
executable_args += [ "--release" ]
}
# wrapper script output name and path
if (!defined(wrapper_output_name)) {
_wrapper_output_name = "run_${target_name}"
} else {
_wrapper_output_name = wrapper_output_name
}
# Test targets may attempt to generate multiple wrappers for a suite with
# multiple different toolchains when running with additional_target_cpus.
# Generate the wrapper script into root_out_dir rather than root_build_dir
# to ensure those wrappers are distinct.
wrapper_script = "${root_out_dir}/bin/${_wrapper_output_name}"
data = []
if (defined(invoker.data)) {
data += invoker.data
}
data += [
"//.vpython",
"//ios/build/bots/scripts/",
"//testing/test_env.py",
]
}
}