# Copyright 2021 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/host.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")
import("//build/testing/host_test_data.gni")

if (is_host) {
  crate_deps = [
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:rayon",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:tempfile",
    "//third_party/rust_crates:toml",
    "//third_party/rust_crates:walkdir",
    "//tools/cargo-gnaw:cargo-gnaw-lib",
  ]

  rustc_binary("auto_owners_bin") {
    output_name = "auto_owners"
    with_unit_tests = false
    deps = crate_deps
    sources = [ "src/main.rs" ]
  }

  rustc_test("auto_owners_test") {
    source_root = "src/main.rs"
    sources = [ "src/main.rs" ]

    deps = crate_deps + [
             "//third_party/rust_crates:once_cell",
             "//third_party/rust_crates:pretty_assertions",
             "//third_party/rust_crates:serial_test",
           ]

    non_rust_deps = [
      ":auto_owners_gn",
      ":auto_owners_test_data",
    ]
  }

  test_output_dir = "$root_out_dir/test_data/tools/auto_owners"

  host_test_data("auto_owners_test_data") {
    sources = [
      "tests/common/.gn",
      "tests/common/build/BUILD.gn",
      "tests/common/build/BUILDCONFIG.gn",
      "tests/common/build/toolchain/BUILD.gn",
      "tests/empty/BUILD.gn",
      "tests/empty/foo/BUILD.gn",
      "tests/missing/BUILD.gn",
      "tests/pass/BUILD.gn",
      "tests/pass/foo/BUILD.gn",
    ]
    outputs = [ "$test_output_dir/{{source_target_relative}}" ]
  }

  # we need to copy the GN binary from the builder into the test output
  # directory so we can run it on a different bot than does the builds.
  auto_owners_gn_out_dir = "${test_output_dir}/runfiles/gn"
  copy("auto_owners_gn_copy") {
    sources = [ "//prebuilt/third_party/gn/${host_platform}/gn" ]
    outputs = [ "$auto_owners_gn_out_dir/{{source_file_part}}" ]
  }

  # Make the copied directory available at test runtime.
  host_test_data("auto_owners_gn") {
    sources = [ auto_owners_gn_out_dir ]
    deps = [ ":auto_owners_gn_copy" ]
  }
}

install_host_tools("install_auto_owners") {
  deps = [ ":auto_owners_bin" ]
  outputs = [ "auto_owners" ]
}

group("auto_owners") {
  deps = [
    ":auto_owners_bin($host_toolchain)",
    ":install_auto_owners",
  ]
}

# run with `fx test host_x64/auto_owners_test`
group("tests") {
  testonly = true
  deps = [ ":auto_owners_test($host_toolchain)" ]
}
