# 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/go/go_binary.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/testing/host_test_data.gni")

go_library("testsharder_lib") {
  sources = [
    "doc.go",
    "durations.go",
    "durations_test.go",
    "ffx_deps.go",
    "ffx_deps_test.go",
    "images.go",
    "images_test.go",
    "postprocess.go",
    "postprocess_test.go",
    "preprocess.go",
    "preprocess_test.go",
    "shard.go",
    "shard_test.go",
    "test.go",
    "test_modifier.go",
    "test_modifier_test.go",
  ]

  deps = [
    "//third_party/golibs:golang.org/x/exp",
    "//tools/build",
    "//tools/lib/color",
    "//tools/lib/ffxutil",
    "//tools/lib/logger",
    "//tools/testing/runtests",
  ]
}

go_library("main") {
  source_dir = "cmd"
  sources = [
    "main.go",
    "main_test.go",
  ]
  deps = [
    ":testsharder_lib",
    "//third_party/golibs:golang.org/x/exp",
    "//tools/lib/flagmisc",
  ]
}

go_binary("testsharder") {
  library = ":main"
}

if (is_host) {
  go_test("testsharder_lib_tests") {
    library = ":testsharder_lib"
    deps = [ "//third_party/golibs:github.com/google/go-cmp" ]
  }

  # TODO(olivernewman): Consider running the test executable locally to generate
  # a depfile so it's not necessary to copy-paste these names.
  _golden_tests = [
    "affected nonhermetic tests",
    "affected tests",
    "arbitrary dimensions",
    "boot test with modifiers",
    "hermetic deps",
    "max shards per env",
    "mixed device types",
    "multiply",
    "multiply affected test",
    "multiply affected tests with large number of runs",
    "multiply unaffected hermetic tests",
    "no tests",
    "run all tests if no affected tests",
    "run all tests if empty affected tests",
    "run all tests if no affected and affected only",
    "sharding by time",
    "skip unaffected tests",
    "target test count",
    "test list with tags",
    "various modifiers",
  ]

  _golden_dir = "${target_gen_dir}/goldens"
  host_test_data("copy_golden_files") {
    sources = []
    foreach(test_name, _golden_tests) {
      _file_name = string_replace(test_name, " ", "_")
      sources += [ "cmd/testdata/${_file_name}.golden.json" ]
    }
    outputs = [ "${_golden_dir}/{{source_file_part}}" ]
  }

  go_test("testsharder_tests") {
    library = ":main"
    deps = [
      "//third_party/golibs:github.com/google/go-cmp",
      "//tools/lib/jsonutil",
    ]
    non_go_deps = [ ":copy_golden_files" ]

    args = [
      "-goldens-dir",
      rebase_path(_golden_dir, root_build_dir),
    ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":testsharder_lib_tests($host_toolchain)",
    ":testsharder_tests($host_toolchain)",
  ]
}
