# 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/cpp/sdk_source_set.gni")
import("//build/host.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")

source_set("cpp") {
  testonly = true
  sources = [
    "fuzz_input.cc",
    "fuzz_input.h",
  ]
  public_configs = [ "//sdk/config" ]
}

source_set("traits") {
  testonly = true
  sources = [ "traits.h" ]
  public_configs = [ "//sdk/config" ]
  public_deps = [
    ":cpp",
    "//sdk/lib/fidl/cpp:cpp_sync",
    "//zircon/public/lib/zx",
  ]
}

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

test("fuzzing_traits_unittests") {
  sources = [ "traits_unittest.cc" ]
  deps = [
    ":traits",
    "//src/lib/fxl/test:gtest_main",
  ]
}

test_package("fuzzing_traits_tests") {
  deps = [ ":fuzzing_traits_unittests" ]
  tests = [
    {
      name = "fuzzing_traits_unittests"
    },
  ]
}

test("fuzz_input_unittests") {
  sources = [ "fuzz_input_unittest.cc" ]

  deps = [
    ":cpp",
    "//src/lib/fxl/test:gtest_main",
  ]
}

install_host_tools("host_tests") {
  testonly = true
  deps = [ ":fuzz_input_unittests" ]
  outputs = [ "fuzz_input_unittests" ]
}
