# Copyright 2022 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/test.gni")
import("//build/testing/zbi_test.gni")
import("//build/zbi/kernel_cmdline.gni")

# Build an executable to run as the standalone test binary under Zircon.
#
# This wraps a test() with the metadata appropriate to have it launched by
# userboot as the standalone.  This target should be included in deps of a
# zbi_test() target, along with a kernel.  An auxiliary metadata target
# "$target_name.cmdline" is defined and referenced in data_deps.
#
# Parameters are as for test().
#
template("zbi_test_executable") {
  if (defined(invoker.output_name)) {
    output_name = invoker.output_name
  } else {
    output_name = target_name
  }
  install_path = "test/$output_name"

  main_target = target_name
  cmdline_target = "$target_name.cmdline"

  test(main_target) {
    data_deps = []
    forward_variables_from(invoker, "*")
    data_deps += [ ":$cmdline_target" ]
  }

  kernel_cmdline(cmdline_target) {
    testonly = true
    forward_variables_from(invoker, [ "visibility" ])
    if (defined(visibility)) {
      visibility += [ ":$main_target" ]
    }
    args = [
      "userboot.root=",
      "userboot.next=$install_path",
      "userboot.shutdown",
    ]
  }
}

set_defaults("zbi_test_executable") {
  configs = default_executable_configs
}
