# Copyright 2018 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.

# TODO(IN-575): Run a policy check to ensure that the spec is valid.
# TODO(joshuaseaton): Only used in package() today; consider a scheme in which
#   test specs are re-used for host tests.

# Describes the target device environment in which a test should run. Associated
# JSON is written to $target_out_dir with file extension "spec.json".
#
# Parameters
#
#   path
#     Required: Full path to the the test.
#   output_dir
#     Required: Where to write the test spec.
#   environments
#     Optional: Target device environments in which the test should run. This is
#       a list of scopes that mirror the Environment go struct found in the
#       testexec package in https://fuchsia.googlesource.com/infra/infra. If not
#       present, the default QEMU environment will be used.
#
template("test_spec") {
  assert(defined(invoker.path), "path must be defined.")
  assert(defined(invoker.output_dir), "output_dir must be defined.")

  test_spec = {
    test = {
      name = target_name
      location = invoker.path
    }
    if (defined(invoker.environments)) {
      environments = invoker.environments
    } else {
      environments = [
        {
          device = {
            type = "QEMU"
          }
        },
      ]
    }
  }

  write_file("${invoker.output_dir}/$target_name.spec.json", test_spec, "json")
}
