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

group("bringup_tests") {
  testonly = true
  deps = []
  if (host_os == "linux") {
    deps += [ ":drivers_serial_log_test($host_toolchain)" ]
  }
}

if (is_linux) {
  go_library("lib") {
    testonly = true
    deps = [ "//tools/emulator" ]
    sources = [ "drivers_serial_log_test.go" ]
  }

  host_test_data("bringup_zbi") {
    sources = [ "$root_build_dir/bringup.zbi" ]
  }

  go_test("drivers_serial_log_test") {
    gopackages = [ "go.fuchsia.dev/fuchsia/src/tests/drivers_serial_log" ]
    deps = [ ":lib" ]
    non_go_deps = [ ":bringup_zbi" ]
  }
}
