# Copyright 2017 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.

source_set("testing") {
  testonly = true

  sources = [
    "fake_controller_test.h",
    "test_controller.cc",
    "test_controller.h",
  ]

  deps = [
    "//third_party/googletest:gtest",
  ]

  public_deps = [
    ":fake_controller",
    "//garnet/public/lib/gtest",
  ]
}

# Target that includes Fake HCI emulation support. This should NOT depend on
# gtest.
source_set("fake_controller") {
  sources = [
    "fake_controller.cc",
    "fake_controller.h",
    "fake_controller_base.cc",
    "fake_controller_base.h",
    "fake_device.cc",
    "fake_device.h",
    "fake_gatt_server.cc",
    "fake_gatt_server.h",
  ]

  public_deps = [
    "//garnet/drivers/bluetooth/lib/common",
    # TODO(armansito): Pull in just the hci:definitions target.
    "//garnet/drivers/bluetooth/lib/hci",
    "//garnet/drivers/bluetooth/lib/l2cap:definitions",
    "//garnet/drivers/bluetooth/lib/att:definitions",
    "//garnet/drivers/bluetooth/lib/gatt:definitions",

    "//garnet/public/lib/fxl",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zx",
  ]
}

# Main entry point for host library unittests.
source_set("gtest_main") {
  testonly = true

  sources = [
    "run_all_unittests.cc",
  ]

  deps = [
    "//garnet/drivers/bluetooth/lib/common",
    "//garnet/public/lib/fsl",
    "//zircon/public/lib/driver",
  ]

  public_deps = [
    "//third_party/googletest:gtest",
  ]
}
