# 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:camino",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:toml",
    "//third_party/rust_crates:tracing",
    "//third_party/rust_crates:tracing-subscriber",
    "//third_party/rust_crates:walkdir",
    "//third_party/rust_crates:xml-rs",
    "//tools/cargo-gnaw:cargo-gnaw-lib",
    "//tools/gn_desc/gn_graph",
    "//tools/gn_desc/gn_json",
  ]

  relative_root_out_dir = rebase_path(root_out_dir, root_build_dir)
  rustc_binary("auto_owners_bin") {
    edition = "2021"
    output_name = "auto_owners"
    with_unit_tests = false
    deps = crate_deps
    sources = [ "src/main.rs" ]
    rustenv = [ "ROOT_OUT_DIR=$relative_root_out_dir" ]
  }

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

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

    data_deps = [
      ":auto_owners_gn",
      ":auto_owners_test_data",
    ]
    rustenv = [ "ROOT_OUT_DIR=$relative_root_out_dir" ]
  }

  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/integration/manifest",
      "tests/missing/BUILD.gn",
      "tests/owners/BUILD.gn",
      "tests/owners/OWNERS",
      "tests/owners/build/secondary/third_party/baz/foo/OWNERS",
      "tests/owners/dep/BUILD.gn",
      "tests/owners/dep/OWNERS",
      "tests/owners/manifest",
      "tests/owners/owners.toml",
      "tests/owners/rust_metadata.json",
      "tests/owners/third_party/bar/BUILD.gn",
      "tests/owners/third_party/baz/foo/source.c",
      "tests/owners/third_party/baz/src/source.c",
      "tests/owners/third_party/foo/BUILD.gn",
      "tests/owners/third_party/foo/OWNERS",
      "tests/owners/third_party/foo/child/source.c",
      "tests/owners/third_party/rust_crates/BUILD.gn",
      "tests/owners/third_party/rust_crates/vendor/bar/BUILD.gn",
      "tests/owners/third_party/rust_crates/vendor/bar/OWNERS",
      "tests/owners/third_party/rust_crates/vendor/foo/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)" ]
}
