# Copyright 2015 The Chromium 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/config/ui.gni")
import("//testing/test.gni")

source_set("exo") {
  sources = [
    "buffer.cc",
    "buffer.h",
    "compositor_frame_sink.cc",
    "compositor_frame_sink.h",
    "compositor_frame_sink_holder.cc",
    "compositor_frame_sink_holder.h",
    "display.cc",
    "display.h",
    "gamepad.cc",
    "gamepad.h",
    "keyboard.cc",
    "keyboard.h",
    "keyboard_delegate.h",
    "keyboard_device_configuration_delegate.h",
    "notification_surface.cc",
    "notification_surface.h",
    "notification_surface_manager.h",
    "pointer.cc",
    "pointer.h",
    "pointer_delegate.h",
    "shared_memory.cc",
    "shared_memory.h",
    "shell_surface.cc",
    "shell_surface.h",
    "sub_surface.cc",
    "sub_surface.h",
    "surface.cc",
    "surface.h",
    "surface_delegate.h",
    "surface_observer.h",
    "surface_property.h",
    "touch.cc",
    "touch.h",
    "touch_delegate.h",
    "wm_helper.cc",
    "wm_helper.h",
    "wm_helper_ash.cc",
    "wm_helper_ash.h",
    "wm_helper_mus.cc",
    "wm_helper_mus.h",
  ]

  deps = [
    "//ash",
    "//ash/public/cpp",
    "//base",
    "//cc",
    "//cc/ipc:interfaces",
    "//cc/surfaces",
    "//device/gamepad",
    "//gpu",
    "//gpu/command_buffer/client:gles2_interface",
    "//skia",
    "//ui/aura",
    "//ui/compositor",
    "//ui/display/manager",
    "//ui/events/devices:devices",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/views",
    "//ui/views/mus",
    "//ui/wm",
  ]

  if (is_chromeos) {
    deps += [ "//chromeos" ]
  }
}

source_set("test_support") {
  testonly = true

  sources = [
    "test/exo_test_base.cc",
    "test/exo_test_base.h",
    "test/exo_test_helper.cc",
    "test/exo_test_helper.h",
  ]

  deps = [
    ":exo",
    "//ash/public/cpp",
    "//ash/test:ash_with_aura_test_support",
    "//ash/test:test_support_without_content",
    "//base",
    "//gpu",
    "//skia",
    "//testing/gtest",
    "//ui/aura",
    "//ui/compositor",
    "//ui/gfx/geometry",
    "//ui/views",
    "//ui/wm:wm",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "buffer_unittest.cc",
    "display_unittest.cc",
    "gamepad_unittest.cc",
    "keyboard_unittest.cc",
    "pointer_unittest.cc",
    "shared_memory_unittest.cc",
    "shell_surface_unittest.cc",
    "sub_surface_unittest.cc",
    "surface_unittest.cc",
    "touch_unittest.cc",
  ]

  deps = [
    ":exo",
    ":test_support",
    "//ash",
    "//ash/public/cpp",
    "//base",
    "//base/test:test_support",
    "//cc",
    "//cc/surfaces:surfaces",
    "//components/user_manager",
    "//device/gamepad:test_helpers",
    "//gpu/command_buffer/client:gles2_interface",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/aura",
    "//ui/events:dom_keycode_converter",
    "//ui/events:test_support",
    "//ui/gfx",
    "//ui/keyboard",
    "//ui/message_center",
    "//ui/views",
    "//ui/wm",
  ]

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }
}

test("exo_unittests") {
  sources = [
    "test/run_all_unittests.cc",
  ]

  deps = [
    ":unit_tests",
    "//ash/test:ash_with_aura_test_support",
    "//ash/test:test_support_without_content",
    "//base",
    "//base/test:test_support",
    "//device/gamepad:test_helpers",
    "//mojo/edk/embedder:headers",
  ]

  data_deps = [
    "//ash/common/strings:ash_test_strings",
    "//ash/resources:ash_test_resources_100_percent",
    "//ash/resources:ash_test_resources_200_percent",
  ]

  if (is_linux) {
    deps += [ "//components/exo/wayland:unit_tests" ]
  }
}
