blob: a020d4e9414824e38fb586be2b497a5935662bdb [file] [log] [blame]
# Copyright 2023 The Fuchsia Authors.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/compiled_action.gni")
import("//build/dist/resource.gni")
# Preprocesses an expectations JSON5 file in order to
# resolve `include`s and check that the file is valid, and
# produces a `resource` to be included in a fuchsia package.
#
# Parameters
# expectations (required)
# Path to a JSON5 test expectations file.
# Type: path
#
# output_path (required)
# Output path for the preprocessed file `resource`.
#
# cases_to_run (optional)
# String specifier of which cases to run with
# respect to whether or not they produce error logs.
# Type: string
# Options:
# - "NoErrLogs" indicates that tests expected to
# generate error logs should be skipped.
# - "WithErrLogs" indicates that only those tests
# expected to generate error logs should be run.
# - By default, all test cases will be run.
#
# All other parameters are forwarded to the `compiled_action`
# target acting on the expectations file.
template("preprocess_expectations") {
assert(defined(invoker.expectations))
assert(defined(invoker.output_path))
_base_target_name = target_name
_preprocessed_target_name = "${_base_target_name}-preprocessed"
compiled_action(_preprocessed_target_name) {
forward_variables_from(invoker,
[
"deps",
"testonly",
])
tool = "//src/lib/testing/expectation/preprocess:bin"
tool_output_name = "expectation_file_preprocessor"
_preprocessed_expectations =
"${target_gen_dir}/${_base_target_name}-expectations-preprocessed.json5"
depfile = "$target_out_dir/${_preprocessed_target_name}.d"
args = [
"--root-expectations-file",
rebase_path(invoker.expectations, root_build_dir),
"--preprocessed-expectations-file",
rebase_path(_preprocessed_expectations, root_build_dir),
"--depfile",
rebase_path(depfile, root_build_dir),
]
if (defined(invoker.cases_to_run)) {
args += [
"--cases-to-run",
invoker.cases_to_run,
]
}
outputs = [ _preprocessed_expectations ]
sources = [ invoker.expectations ]
visibility = [ ":*" ]
}
_preprocessed_target_name = ":$_preprocessed_target_name"
resource(target_name) {
forward_variables_from(invoker, [ "testonly" ])
sources = get_target_outputs(_preprocessed_target_name)
outputs = [ invoker.output_path ]
deps = [ _preprocessed_target_name ]
visibility = [ ":*" ]
}
}