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

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

source_set("constants") {
  testonly = true
  sources = [ "constants.h" ]
  public_deps = [
    "//sdk/fidl/fuchsia.camera2",
    "//sdk/fidl/fuchsia.camera2.hal",
  ]
}

executable("controller_unittest_bin") {
  testonly = true
  sources = [
    "allocator_test.cc",
    "device_test.cc",
    "fake_gdc.h",
    "fake_ge2d.h",
    "fake_isp.h",
    "fake_sysmem.h",
    "protocol_test.cc",
  ]
  deps = [
    ":constants",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.hardware.camera",
    "//sdk/lib/fit-promise",
    "//sdk/lib/sys/cpp",
    "//src/camera/drivers/controller:source",
    "//src/camera/drivers/controller/sherlock:config",
    "//src/camera/drivers/test_utils",
    "//src/devices/testing/fake_ddk",
    "//src/lib/fxl/test:gtest_main",
  ]
  if (internal_access) {
    defines = [ "INTERNAL_ACCESS" ]
  }
}

fuchsia_unittest_package("controller_unittest") {
  manifest = "meta/controller_unittest.cmx"
  deps = [ ":controller_unittest_bin" ]
}
