# 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/components.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")

rustc_test("temp_user_bin") {
  name = "temp_user_bin_test"
  edition = "2021"
  source_root = "temp_user.rs"

  deps = [ "//third_party/rust_crates:anyhow" ]

  sources = [ "temp_user.rs" ]
}

rustc_test("custom_artifact_test") {
  name = "custom_artifact_test"
  edition = "2021"
  source_root = "custom_artifact_test.rs"

  deps = [ "//third_party/rust_crates:anyhow" ]

  sources = [ "custom_artifact_test.rs" ]
}

fuchsia_component("temp_user_cmp") {
  testonly = true
  manifest = "meta/temp_user.cml"
  deps = [ ":temp_user_bin" ]
}

fuchsia_component("custom_artifact_user_cmp") {
  component_name = "custom_artifact_user"
  testonly = true
  deps = [ ":custom_artifact_test" ]
  manifest = "meta/custom_artifact_test.cml"
}

fuchsia_test_package("custom_artifact_user") {
  test_components = [ ":custom_artifact_user_cmp" ]
}

fuchsia_test_package("temp-user") {
  test_components = [ ":temp_user_cmp" ]
}

group("tests") {
  testonly = true
  deps = [
    ":custom_artifact_user",
    ":temp-user",
  ]
}
