# Copyright 2019 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/test_package.gni")

# This declares a test executable for drivers that are placed in /boot/test
template("driver_test_package") {
  test_manifest = "${target_gen_dir}/meta/${target_name}.cmx"
  manifest_label_target = "${target_name}.cmx"
  generated_file(manifest_label_target) {
    outputs = [
      test_manifest,
    ]

    contents = {
      program = {
        binary = "test/${target_name}"
      }

      # this might not be needed, but a closer env to what they
      # ran in before moving to GN. re-evaluate
      sandbox = {
        features = [
          "deprecated-shell",
        ]
      }
    }
    output_conversion = "json"
  }

  test_package(target_name) {
    deprecated_shell = "//build"

    deps = [
      ":$manifest_label_target",
      ":${target_name}_gen_tests",
    ]

    tests = [
      {
        name = target_name
        forward_variables_from(invoker,
                               [
                                 "dest",
                                 "disabled",
                               ])
        manifest = test_manifest
      },
    ]
  }

  executable("${target_name}_gen_tests") {
    forward_variables_from(invoker, "*")
    target_name = "${target_name}_gen_tests"
    testonly = true
  }
}
