# 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/rust/rustc_library.gni")

assert(is_host, "testing_lib is for use with the host toolchain only")

template("testing_lib") {
  _with_unit_tests = true
  if (defined(invoker.with_unit_tests)) {
    _with_unit_tests = invoker.with_unit_tests
  }
  rustc_library(target_name) {
    name = "testing_lib"
    version = "0.1.0"
    edition = "2024"
    with_unit_tests = _with_unit_tests

    visibility = [
      ":*",
      "//src/developer/ffx/plugins/test/*",
    ]

    sources = [ "src/lib.rs" ]
    deps = [ "//third_party/rust_crates:anyhow" ] + invoker.deps

    features = []
    if (defined(invoker.features)) {
      features += invoker.features
    }
  }
}

testing_lib("lib") {
  with_unit_tests = true
  deps = [
    "//sdk/fidl/fuchsia.developer.remotecontrol:fuchsia.developer.remotecontrol_rust_flex",
    "//sdk/fidl/fuchsia.test.manager:fuchsia.test.manager_rust_flex",
    "//src/developer/ffx/lib/rcs:lib",
  ]
}

testing_lib("lib_fdomain") {
  with_unit_tests = false
  deps = [
    "//sdk/fidl/fuchsia.developer.remotecontrol:fuchsia.developer.remotecontrol_rust_fdomain_flex",
    "//sdk/fidl/fuchsia.test.manager:fuchsia.test.manager_rust_fdomain_flex",
    "//src/developer/ffx/lib/rcs:lib_fdomain",
  ]
  features = [ "fdomain" ]
}

group("tests") {
  testonly = true

  deps = [ ":lib_test" ]
}

group("testing") {
  testonly = true

  deps = [
    ":lib",
    ":lib_fdomain",
    ":tests",
  ]
}
