# 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/components.gni")
import("//sdk/cts/build/cts_element.gni")
import("//sdk/cts/build/write_cts_file.gni")

# Defines a Compatibility Test Suite unittest component.
#
# An equivalent to fuchsia_unittest_component, but ensures dependencies are
# allowed in CTS.
#
# Example:
# ```
# cts_fuchsia_unittest_component("my-tests") {
#   executable_path = "bin/my_tests"
#   deps = [ ":my-tests" ]
# }
# ```
template("cts_fuchsia_unittest_component") {
  # Ensure that deps and test_components are CTS targets.
  if (defined(invoker.deps) && invoker.deps != []) {
    cts_element("${target_name}_verify_deps") {
      deps = invoker.deps
      invoker_label = get_label_info(invoker.target_name, "label_no_toolchain")
    }
  }

  fuchsia_unittest_component(target_name) {
    forward_variables_from(invoker, "*")
    if (defined(deps) && deps != []) {
      deps += [
        ":${target_name}_cts_file",
        ":${target_name}_verify_deps",
      ]
    } else {
      deps = [ ":${target_name}_cts_file" ]
    }
  }

  write_cts_file(target_name) {
  }
}
