blob: 525833337a4f944422279a8ef9362a1e330e5581 [file] [log] [blame]
# Copyright 2020 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.
import("//build/testing/test_spec.gni")
# Defines a test that runs on a Fuchsia device.
# See: https://fuchsia.dev/fuchsia-src/development/components/build
#
# Invoking this template registers a component and a package such that running
# the test would involve pushing the package to a Fuchsia device, launching the
# component, and treating said component as a test.
#
# Example:
# ```
# fuchsia_test("my-test") {
# package = ":my-package"
# component = ":my-component"
# }
# ```
# The above can be tested with `fx test fuchsia-pkg://fuchsia.com/my-package#meta/my-component.cmx`.
#
# Parameters
#
# package (required)
# The `fuchsia_package()` that contains the test component.
# Type: label
#
# package_name (optional)
# The name of the above (`package_name` argument if specified).
# Type: string
# Default: get_label_info(package, "name")
#
# component (required)
# The component that implements the test.
#
# Additional `test_spec()` parameters will be forwarded.
template("fuchsia_test") {
if (current_toolchain == default_toolchain) {
assert(
defined(invoker.package),
"A `package` argument was missing when calling fuchsia_test($target_name)")
assert(
defined(invoker.component),
"A `component` argument was missing when calling fuchsia_test($target_name)")
package_name = get_label_info(invoker.package, "name")
if (defined(invoker.package_name)) {
package_name = invoker.package_name
}
manifest_name = get_target_outputs(invoker.component)
manifest_name = get_path_info(manifest_name[0], "file")
assert(
get_path_info(manifest_name, "extension") == "cm",
"`manifest_name` must end with '.cm'. Refer https://fxbug.dev/84888 for more information.")
test_spec(target_name) {
forward_variables_from(invoker, "*")
target = get_label_info(invoker.package, "label_with_toolchain")
build_rule = "fuchsia_test"
package_out_dir = get_label_info(invoker.package, "target_out_dir")
package_manifests =
[ rebase_path("$package_out_dir/$package_name/package_manifest.json",
root_build_dir) ]
package_url =
"fuchsia-pkg://fuchsia.com/$package_name#meta/$manifest_name"
if (!defined(deps)) {
deps = []
}
deps += [ invoker.package ]
}
} else {
group(target_name) {
testonly = true
deps = [ ":$target_name($default_toolchain)" ]
forward_variables_from(invoker, [ "visibility" ])
}
not_needed(invoker, "*")
}
}