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

source_set("fuzzing") {
  testonly = true
  sources = [
    "fuzzer.h",
    "server_provider.h",
    "traits.h",
  ]
  public_deps = [
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/fuzzing/cpp",
    "//sdk/lib/fuzzing/cpp:traits",
    "//zircon/system/public",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  public_configs = [ "//sdk/config" ]
}

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

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

test_package("fidl_cpp_fuzzing_tests") {
  deps = [ ":fidl_cpp_fuzzing_unittests" ]
  tests = [
    {
      name = "fidl_cpp_fuzzing_unittests"
    },
  ]
}
