# 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.
# this has to match the binary name in examples/ui/Build.gn

import("//build/package.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

source_set("simple_camera_lib") {
  output_name = "simple_camera_lib"

  sources = [
    "buffer_fence.cpp",
    "buffer_fence.h",
    "frame_scheduler.cpp",
    "frame_scheduler.h",
    "video_display.cpp",
    "video_display.h",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/ui/scenic/cpp",
    "//sdk/fidl/fuchsia.camera:fuchsia.camera",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/lib/fidl/cpp",
    "//zircon/public/lib/async",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/fzl",
  ]

  include_dirs = [
    "//third_party/glm",
    "//lib",
  ]
}

group("tests") {
  testonly = true

  public_deps = [
    ":simple_camera_unittests",
  ]
}

executable("simple_camera_unittests") {
  testonly = true

  sources = [
    "tests/buffer_fence_unittest.cpp",
  ]
  deps = [
    ":simple_camera_lib",
    "//garnet/public/lib/gtest",
    "//src/lib/fxl/test:gtest_main",
  ]
}

test_package("camera_tests") {
  deps = [
    "//src/camera/simple_camera/simple_camera_lib:tests",
  ]
  tests = [
    {
      name = "simple_camera_unittests"
      environments = basic_envs
    },
  ]
}
