# 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/package.gni")
import("//build/package/component.gni")
import("//build/test/test_package.gni")

executable("bin") {
  output_name = "inspect_unittests"
  testonly = true
  sources = [
    "expose_unittest.cc",
    "inspect_unittest.cc",
    "matchers.h",
  ]
  deps = [
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/inspect",
  ]
  public_deps = [
    "//garnet/public/lib/fxl/test:gtest_main",
    "//third_party/googletest:gmock",
  ]
  libs = [ "zircon" ]
}

fuchsia_test_component("inspect_unittests_component") {
  deps = [
    ":bin",
  ]

  binary = "inspect_unittests"
}

# TODO(IN-933): Convert back to package
test_package("inspect_unittests") {
  deps = [
    ":bin",
  ]

  tests = [
    {
      name = "inspect_unittests"
    },
  ]
}
