# Copyright 2016 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_test.gni")
import("//build/host.gni")
import("//src/sys/build/components.gni")

if (current_toolchain == target_toolchain) {
  _go_root = "$host_tools_dir/goroot"

  compiled_action("makeroot") {
    visibility = [ ":makefuchsia" ]

    depfile = "$target_gen_dir/$target_name.d"
    outputs = [ "$target_gen_dir/$target_name.stamp" ]

    tool = "makeroot"
    args = [
      "-source-goroot",
      rebase_path(".", root_build_dir),
      "-target-goroot",
      rebase_path(_go_root, root_build_dir),

      "-depfile",
      rebase_path(depfile, root_build_dir),
      "-stamp-file",
      rebase_path(outputs[0], root_build_dir),
    ]
  }

  compiled_action("makefuchsia") {
    visibility = [ ":go_runtime" ]
    deps = [ ":makeroot" ]

    depfile = "$target_gen_dir/$target_name.d"
    outputs = [ "$target_gen_dir/$target_name.stamp" ]

    tool = "makefuchsia"
    args = [
      "-bootstrap-goroot",
      rebase_path("//prebuilt/third_party/go/${host_platform}"),
      "-gocache",
      gocache_dir,
      "-goroot",
      rebase_path(_go_root, root_build_dir),

      "-depfile",
      rebase_path(depfile, root_build_dir),
      "-stamp-file",
      rebase_path(outputs[0], root_build_dir),
    ]
  }
}

group("go_runtime") {
  public_deps = [ ":makefuchsia(${target_toolchain})" ]
}

go_test("go_exec_test") {
  gopackages = [ "os/exec" ]
}

go_test("go_net_test") {
  gopackages = [ "net" ]
}

go_test("go_os_test") {
  gopackages = [ "os" ]
}

go_test("go_pprof_test") {
  gopackages = [ "runtime/pprof" ]
}

go_test("go_zx_test") {
  gopackages = [ "syscall/zx" ]
}

go_test("go_zxwait_test") {
  gopackages = [ "syscall/zx/zxwait" ]
}

fuchsia_component("go-exec-test") {
  testonly = true
  manifest = "meta/go_exec_test.cmx"
  deps = [
    ":go_exec_test",
    "//third_party/sbase:cat",
    "//third_party/sbase:echo",
  ]
}

fuchsia_component("go-net-test") {
  testonly = true
  manifest = "meta/go_net_test.cmx"
  deps = [ ":go_net_test" ]
}

fuchsia_component("go-os-test") {
  testonly = true
  manifest = "meta/go_os_test.cmx"
  deps = [ ":go_os_test" ]
}

fuchsia_component("go-pprof-test") {
  testonly = true
  manifest = "meta/go_pprof_test.cmx"
  deps = [ ":go_pprof_test" ]
}

fuchsia_component("go-zx-test") {
  testonly = true
  manifest = "meta/go_zx_test.cmx"
  deps = [ ":go_zx_test" ]
}

fuchsia_component("go-zxwait-test") {
  testonly = true
  manifest = "meta/go_zxwait_test.cmx"
  deps = [ ":go_zxwait_test" ]
}

fuchsia_test_package("go-stdlib-tests") {
  test_components = [
    ":go-exec-test",
    ":go-net-test",
    ":go-os-test",
    ":go-pprof-test",
    ":go-zx-test",
    ":go-zxwait-test",
  ]

  deps = [ "//src/connectivity/network/netstack:component-debug" ]

  test_specs = {
    environments = [ emu_env ]
  }
}

go_test("go_unsafevalue_test") {
  gopackages = [ "syscall/zx/fidl/internal/unsafevalue" ]

  # This runs both on target device and as a host test.
  # In both cases, it needs to build a go toolchain rather than using a prebuilt because
  # it is testing the fidl package, which is implemented in the toolcahin itself.
  use_prebuilt_go = false
}

go_test("go_fidl_test") {
  gopackages = [ "syscall/zx/fidl" ]
}

go_test("go_extended_fidl_test") {
  # N.B. these tests are not in the fidl package to avoid having to rebuild the
  # go toolchain while iterating on them.
  gopackages = [ "syscall/zx/fidl/fidl_test" ]
  # TODO(pascallouis): Currently, while we take a dependency, the output of
  # this FIDL rule is not directly used, rather the generated bindings were
  # copied and checked in.
  #
  # Not being able to depend on automated generation is due to where code is
  # placed, and how this relates to the tree structure of the toolchain.
  # Disabling while fidlgen table generation is pending.
  # Use regen-fidl to generate this file.
  # deps = [
  #   "src/syscall/zx/fidl/internal/bindingstest($go_toolchain)",
  # ]
}

fuchsia_component("go-unsafevalue-test") {
  testonly = true
  manifest = "meta/go_unsafevalue_test.cmx"
  deps = [ ":go_unsafevalue_test" ]
}

fuchsia_component("go-fidl-test") {
  testonly = true
  manifest = "meta/go_fidl_test.cmx"
  deps = [ ":go_fidl_test" ]
}

fuchsia_component("go-extended-fidl-test") {
  testonly = true
  manifest = "meta/go_extended_fidl_test.cmx"
  deps = [ ":go_extended_fidl_test" ]
}

fuchsia_test_package("go-fidl-tests") {
  test_components = [
    ":go-unsafevalue-test",
    ":go-extended-fidl-test",
    ":go-fidl-test",
  ]

  test_specs = {
    environments = [ emu_env ]
  }
}

group("fidl-tests") {
  testonly = true
  deps = [
    ":go-fidl-tests",
    ":go_extended_fidl_test($host_toolchain)",
    ":go_unsafevalue_test($host_toolchain)",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":fidl-tests",
    ":go-stdlib-tests",
  ]
}
