# 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_library.gni")

rustc_library("lib") {
  name = "run_test_suite_lib"
  with_unit_tests = true
  edition = "2021"

  # Only to be used by internal bin and tests.
  visibility = [
    ":*",
    "tests/*",
    "//src/developer/ffx/lib/testing/*",
    "//src/developer/ffx/plugins/test/*",
    "//src/devices/lib/driver-conformance/*",
    "//src/sys/test_runners/rust/tests/*",
  ]

  deps = [
    "directory",
    "//sdk/fidl/fuchsia.component:fuchsia.component_rust",
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_rust",
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics_rust",
    "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2_rust",
    "//sdk/fidl/fuchsia.test.manager:fuchsia.test.manager_rust",
    "//src/lib/diagnostics/data/rust",
    "//src/lib/diagnostics/selectors",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-fs",
    "//src/lib/fuchsia-sync",
    "//src/lib/test_diagnostics/rust:test_diagnostics",
    "//src/lib/testing/test_list",
    "//src/lib/zircon/rust:fuchsia-zircon-status",
    "//src/sys/lib/cm_rust",
    "//src/sys/lib/component_debug",
    "//src/sys/lib/moniker",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:pin-project",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:tracing",
    "//third_party/rust_crates:vte",
  ]

  test_deps = [
    "//src/lib/diagnostics/selectors",
    "//src/lib/fuchsia",
    "//src/lib/testing/fixture",
    "//third_party/rust_crates:ansi_term",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:maplit",
    "//third_party/rust_crates:tempfile",
  ]

  if (!is_host) {
    deps += [ "//src/lib/trace/rust:trace" ]

    test_deps += [
      "//src/lib/fuchsia-component",
      "//src/lib/zircon/rust:fuchsia-zircon",
      "//src/storage/lib/vfs/rust:vfs",
    ]
  }

  sources = [
    "src/artifacts.rs",
    "src/cancel.rs",
    "src/connector.rs",
    "src/diagnostics.rs",
    "src/lib.rs",
    "src/outcome.rs",
    "src/output/directory.rs",
    "src/output/directory_with_stdout.rs",
    "src/output/line.rs",
    "src/output/memory.rs",
    "src/output/mod.rs",
    "src/output/mux.rs",
    "src/output/noop.rs",
    "src/output/shell/mod.rs",
    "src/output/shell/writer.rs",
    "src/params.rs",
    "src/realm.rs",
    "src/run.rs",
    "src/running_suite.rs",
    "src/stream_util.rs",
    "src/trace.rs",
  ]
}

rustc_binary("bin") {
  output_name = "run-test-suite"
  with_unit_tests = true
  edition = "2021"

  deps = [
    ":lib",
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics_rust",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2_rust",
    "//sdk/fidl/fuchsia.test.manager:fuchsia.test.manager_rust",
    "//src/lib/diagnostics/data/rust",
    "//src/lib/diagnostics/selectors",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-component",
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:tracing",
  ]

  sources = [ "src/main.rs" ]
}

fuchsia_shell_package("run_test_suite") {
  testonly = true
  deps = [ ":bin" ]
}

fuchsia_component("test_realm") {
  testonly = true
  manifest = "meta/test_realm.cml"
}

fuchsia_component("no_realm_protocol_realm") {
  testonly = true
  manifest = "meta/no_realm_protocol_realm.cml"
}

fuchsia_unittest_component("run-test-suite-lib-test") {
  manifest = "meta/run_test_suite_lib_test.cml"
  deps = [ ":lib_test" ]
}

fuchsia_unittest_component("run-test-suite-bin-test") {
  deps = [ ":bin_test" ]
}

fuchsia_test_package("run-test-suite-unit-tests") {
  test_components = [
    ":run-test-suite-lib-test",
    ":run-test-suite-bin-test",
  ]
  deps = [
    ":no_realm_protocol_realm",
    ":test_realm",
  ]
}

group("tests") {
  testonly = true
  deps = [
    #":lib_test($host_toolchain)",
    ":run-test-suite-unit-tests",
    "directory:tests",
    "tests",
  ]
}
