# Copyright 2018 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("//src/sys/build/components.gni")

source_set("callback") {
  sources = [
    "auto_cleanable.h",
    "capture.h",
    "destruction_sentinel.cc",
    "destruction_sentinel.h",
    "scoped_callback.h",
    "scoped_task_runner.cc",
    "scoped_task_runner.h",
    "trace_callback.h",
  ]

  public_deps = [
    "//sdk/lib/fit",
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/trace",
  ]

  public_configs = [ "//garnet/public:config" ]

  deps = [ "//zircon/public/lib/async-cpp" ]
}

executable("callback_unittests") {
  testonly = true

  sources = [
    "auto_cleanable_unittest.cc",
    "capture_unittest.cc",
    "destruction_sentinel_unittest.cc",
    "scoped_callback_unittest.cc",
    "scoped_task_runner_unittest.cc",
  ]

  deps = [
    ":callback",
    "//garnet/public/lib/gtest",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
    "//zircon/system/ulib/async-testing",
  ]
}

fuchsia_unittest_package("callback_tests") {
  deps = [ ":callback_unittests" ]
}

group("tests") {
  testonly = true

  deps = [ ":callback_tests" ]
}
