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

rustc_test("test_manager_test_bin") {
  edition = "2018"
  name = "test_manager_test"
  source_root = "src/main.rs"
  deps = [
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//sdk/fidl/fuchsia.test:fuchsia.test-rustc",
    "//sdk/fidl/fuchsia.test.manager:fuchsia.test.manager-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/test_executor/rust:test_executor",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io-rustc",
  ]
}

package("test_manager_test") {
  testonly = true

  deps = [
    ":test_manager_test_bin",
    "test_data",
  ]

  meta = [
    {
      path = rebase_path("meta/test_manager_test.cml")
      dest = "test_manager_test.cm"
    },
    {
      path = rebase_path("test_data/meta/no_suite_service.cml")
      dest = "no_suite_service.cm"
    },
  ]

  tests = [
    {
      name = "test_manager_test"
    },
  ]

  binaries = [
    {
      name = "no_suite_service"
    },
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":test_manager_test",
    "//examples/tests:example-tests",
    "//src/sys/test_manager",
    "//src/sys/test_runners/gtest/test_data:gtest-runner-example-tests",
  ]
}
