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

group("tests") {
  testonly = true

  deps = []

  if (host_os == "linux") {
    deps += [ ":shutdown_tests($host_toolchain)" ]
  }
}

if (is_linux) {
  go_library("lib") {
    testonly = true

    deps = [ "//src/testing/emulator" ]

    sources = [ "shutdown_test.go" ]
  }

  host_test_data("main_zbi") {
    sources = [ "$root_build_dir/fuchsia.zbi" ]
  }

  go_test("shutdown_tests") {
    gopackages = [ "go.fuchsia.dev/fuchsia/src/tests/shutdown" ]
    deps = [ ":lib" ]
    non_go_deps = [ ":main_zbi" ]
  }
}
