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

test("display-core-unittests") {
  configs += [
    "//build/unification/config:zircon-migrated",
    "//build/config:all_source",
  ]
  sources = [
    "display-test.cc",
    "eld-test.cc",
    "fence-test.cc",
    "image-test.cc",
    "integration-test.cc",
    "layer-test.cc",
  ]
  include_dirs = [ ".." ]
  deps = [
    ":base",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sysmem",
    "//sdk/fidl/fuchsia.hardware.display:fuchsia.hardware.display_llcpp",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_llcpp",
    "//src/devices/testing/fake_ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zircon-internal",
    "//zircon/system/ulib/async-testing",
  ]

  # TODO(fxbug.dev/69585): This target uses raw zx::channel with LLCPP which is deprecated.
  # Please migrate to typed channel APIs (fidl::ClientEnd<T>, fidl::ServerEnd<T>).
  # See linked bug for details.
  configs += [ "//build/cpp:fidl-llcpp-deprecated-raw-channels" ]
}

static_library("base") {
  configs += [ "//build/config:all_source" ]
  testonly = true
  sources = [
    "base.cc",
    "fidl_client.cc",
    "fidl_client.h",
  ]
  deps = [
    "//sdk/banjo/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sysmem",
    "//src/lib/fsl",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.hardware.display:fuchsia.hardware.display_llcpp",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_llcpp",
    "//src/devices/sysmem/drivers/sysmem:sysmem_common_srcs",
    "//src/graphics/display/drivers/display:shared",
    "//src/graphics/display/drivers/fake:fake-display-device-tree",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/async-testing",
  ]

  # TODO(fxbug.dev/69585): This target uses raw zx::channel with LLCPP which is deprecated.
  # Please migrate to typed channel APIs (fidl::ClientEnd<T>, fidl::ServerEnd<T>).
  # See linked bug for details.
  configs += [ "//build/cpp:fidl-llcpp-deprecated-raw-channels" ]
}

group("tests") {
  testonly = true
  deps = [ ":display-core-unittests-package" ]
}

fuchsia_unittest_package("display-core-unittests-package") {
  package_name = "display-core-unittests"
  deps = [ ":display-core-unittests" ]
}
