# Copyright 2022 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/bazel/bazel_fuchsia_test_package.gni")
import("//build_overrides/pigweed.gni")
import("//src/connectivity/bluetooth/core/bt-host/build/bt_gtest_package.gni")

group("controllers") {
  public_deps = [ ":fidl_controller" ]
}

source_set("helpers") {
  visibility = [ ":*" ]

  sources = [
    "helpers.cc",
    "helpers.h",
  ]

  public_deps = [
    "$dir_pw_bluetooth",
    "//zircon/system/ulib/zx",
  ]
}

source_set("fidl_controller") {
  sources = [
    "fidl_controller.cc",
    "fidl_controller.h",
  ]

  deps = [
    ":helpers",
    "//src/connectivity/bluetooth/core/bt-host/common",
    "//src/connectivity/bluetooth/core/bt-host/iso",
    "//src/connectivity/bluetooth/core/bt-host/transport",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/zx",
  ]

  public_deps = [
    "$dir_pw_bluetooth",
    "//sdk/fidl/fuchsia.hardware.bluetooth:fuchsia.hardware.bluetooth_cpp",
    "//zircon/system/ulib/async",
  ]
}

source_set("tests") {
  testonly = true

  sources = [ "fidl_controller_test.cc" ]

  deps = [
    ":controllers",
    "//src/connectivity/bluetooth/core/bt-host/fidl:fake_hci_test_fixture",
    "//src/connectivity/bluetooth/core/bt-host/testing",
    "//src/connectivity/bluetooth/core/bt-host/testing:loop_fixture",
    "//src/connectivity/bluetooth/core/bt-host/testing:test_helpers",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

bt_gtest_package("bt-host-controllers-tests") {
  deps = [ ":tests" ]
}

bazel_fuchsia_test_package("test_pkg") {
  test_package_name = "controllers_tests"
  test_component_names = [ "controllers_test_autogen_cml" ]
}
