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

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

source_set("base_view") {
  sources = [
    "base_view.cc",
    "base_view.h",
    "embedded_view_utils.cc",
    "embedded_view_utils.h",
    "math.h",
    "view_provider_component.cc",
    "view_provider_component.h",
    "view_provider_service.cc",
    "view_provider_service.h",
  ]

  public_deps = [
    "//garnet/public/lib/fostr/fidl/fuchsia.ui.gfx",
    "//garnet/public/lib/fostr/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/fs",
  ]

  deps = [ "//zircon/public/lib/trace" ]
}

executable("base_view_unittest") {
  testonly = true

  sources = [ "base_view_unittest.cc" ]

  deps = [
    ":base_view",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//third_party/googletest:gmock",
  ]
}

executable("math_unittest") {
  testonly = true

  sources = [ "math_unittest.cc" ]

  deps = [
    ":base_view",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]
}

unittest_package("base_view_unittests") {
  deps = [
    ":base_view_unittest",
    ":math_unittest",
  ]
  tests = [
    {
      name = "base_view_unittest"
      environments = basic_envs
    },
    {
      name = "math_unittest"
      environments = basic_envs
    },
  ]
}
