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

executable("inspect_validator_cpp_puppet_bin") {
  output_name = "inspect_validator_cpp_puppet"

  sources = [ "validator_puppet.cc" ]

  deps = [
    "//sdk/lib/inspect/service/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//src/diagnostics/inspect_validator/fidl:validate",
    "//zircon/public/lib/fidl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

test_package("inspect_validator_test_cpp") {
  deps = [
    ":inspect_validator_cpp_puppet_bin",
    "//src/diagnostics/inspect_validator:validator_bin",
  ]
  meta = [
    {
      path = rebase_path("meta/inspect_validator_cpp_puppet.cmx")
      dest = "inspect_validator_cpp_puppet.cmx"
    },
  ]

  binaries = [
    {
      name = "inspect_validator_cpp_puppet"
    },
  ]

  tests = [
    {
      name = "validator"
      environments = basic_envs
    },
  ]
}

group("tests") {
  testonly = true
  deps = [ ":inspect_validator_test_cpp" ]
}
