blob: d4d9f66312e5092a414d5a3e9bdca34fe3ef3cd4 [file] [log] [blame]
# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# A template for an action that creates a Fuchsia Go test binary.
import("//build/go/go_build.gni")
import("//build/testing/test_spec.gni")
# Parameters: same as go_build, along with
#
# gopackages
# Required: The go packages containing the tests to be run.
# Type: list of strings.
#
# args
# Optional: additional arguments needed when invoking the test.
# Type: list of strings.
#
# disabled
# Optional: whether the test is disabled.
# Type: bool
# Default: false
#
# environments
# Optional: what environments this test should target. Only used here
# for linux and mac tests, with a default value of a general linux/mac
# environment (as a function of $current_os).
# See //build/testing/test_spec.gni for more details.
#
# timeout:
# Optional: override default timeout. Values must be valid Go durations,
# such as "300ms", "-1.5h" or "2h45m".
# See https://golang.org/cmd/go/#hdr-Testing_flags for details on timeout.
# See https://golang.org/pkg/time/#ParseDuration for duration format.
template("go_test") {
# go_build() redirects out of the variant, so root_out_dir et al are not
# what it actually uses. Just redirect this target itself first, so the
# actual go_build instantiation below will not also redirect and the code
# below matches its output.
if (toolchain_variant.name != "") {
group(target_name) {
forward_variables_from(invoker, [ "visibility" ])
testonly = true
public_deps = [ ":$target_name(${toolchain_variant.base})" ]
}
not_needed(invoker, "*")
} else {
_main_target_name = target_name
_test_spec_target_name = "${target_name}_spec"
_output_name = target_name
if (defined(invoker.output_name)) {
_output_name = invoker.output_name
}
_output_path = "${root_out_dir}/${_output_name}"
_is_disabled = defined(invoker.disabled) && invoker.disabled
# We only include test metadata for non-disabled, linux/mac tests; metadata
# for fuchsia tests is aggregated in the package template.
_include_test_metadata = !_is_disabled && (is_linux || is_mac)
if (_include_test_metadata) {
test_spec(_test_spec_target_name) {
name = _output_name
target = _main_target_name
path = _output_path
command = [ rebase_path(_output_path, root_build_dir) ]
timeout = "5m"
if (defined(invoker.timeout)) {
timeout = invoker.timeout
}
command += [
"--test.timeout",
timeout,
]
if (defined(invoker.args)) {
command += invoker.args
}
deps = []
if (defined(invoker.deps)) {
deps += invoker.deps
}
if (defined(invoker.non_go_deps)) {
deps += invoker.non_go_deps
}
forward_variables_from(invoker, [ "environments" ])
}
} else {
not_needed(invoker, [ "args" ])
}
go_build(_main_target_name) {
test = true
forward_variables_from(invoker,
"*",
[
"disabled",
"environments",
])
if (_include_test_metadata) {
if (!defined(invoker.non_go_deps)) {
non_go_deps = []
}
non_go_deps += [ ":$_test_spec_target_name" ]
} else {
not_needed([ "_test_spec_target_name" ])
}
}
_outputs = get_target_outputs(":$_main_target_name")
assert(_outputs[0] == _output_path)
}
}