# 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("//chrome/common/features.gni")
import("//testing/test.gni")

source_set("exo") {
  sources = [
    "buffer.cc",
    "buffer.h",
    "data_device.cc",
    "data_device.h",
    "data_device_delegate.h",
    "data_offer.cc",
    "data_offer.h",
    "data_offer_delegate.h",
    "data_offer_observer.h",
    "data_source.cc",
    "data_source.h",
    "data_source_delegate.h",
    "data_source_observer.h",
    "display.cc",
    "display.h",
    "frame_sink_resource_manager.cc",
    "frame_sink_resource_manager.h",
    "keyboard_delegate.h",
    "keyboard_device_configuration_delegate.h",
    "keyboard_observer.h",
    "layer_tree_frame_sink_holder.cc",
    "layer_tree_frame_sink_holder.h",
    "seat.cc",
    "seat.h",
    "seat_observer.h",
    "shared_memory.cc",
    "shared_memory.h",
    "shell_surface_util.cc",
    "shell_surface_util.h",
    "sub_surface.cc",
    "sub_surface.h",
    "surface.cc",
    "surface.h",
    "surface_delegate.h",
    "surface_observer.h",
    "surface_tree_host.cc",
    "surface_tree_host.h",
    "touch.cc",
    "touch.h",
    "touch_delegate.h",
    "wm_helper.cc",
    "wm_helper.h",
  ]

  deps = [
    "//base",
    "//cc",
    "//components/viz/service",
    "//device/gamepad",
    "//device/gamepad/public/cpp:shared_with_blink",
    "//gpu",
    "//gpu/command_buffer/client:gles2_interface",
    "//services/ws/public/mojom",
    "//skia",
    "//ui/aura",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/compositor_extra",
    "//ui/display/manager",
    "//ui/events/devices:devices",
    "//ui/events/ozone:events_ozone_evdev",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/message_center",
    "//ui/message_center/public/cpp",
    "//ui/ozone",
    "//ui/views",
    "//ui/views/mus",
    "//ui/wm",
    "//ui/wm/public",
  ]

  if (is_chromeos) {
    deps += [
      "//ash/public/cpp",
      "//ui/keyboard",
      "//ui/keyboard:mojom",
    ]
    sources += [
      "client_controlled_shell_surface.cc",
      "client_controlled_shell_surface.h",
      "gaming_seat.cc",
      "gaming_seat.h",
      "input_method_surface.cc",
      "input_method_surface.h",
      "input_method_surface_manager.h",
      "keyboard.cc",
      "keyboard.h",
      "notification.cc",
      "notification.h",
      "notification_surface.cc",
      "notification_surface.h",
      "notification_surface_manager.h",
      "pointer.cc",
      "pointer.h",
      "pointer_delegate.h",
      "shell_surface.cc",
      "shell_surface.h",
      "shell_surface_base.cc",
      "shell_surface_base.h",
      "text_input.cc",
      "text_input.h",
      "wm_helper_chromeos.cc",
      "wm_helper_chromeos.h",
      "xdg_shell_surface.cc",
      "xdg_shell_surface.h",
    ]
  }

  if (is_chromecast) {
    sources += [
      "fullscreen_shell_surface.cc",
      "fullscreen_shell_surface.h",
    ]
  }
}

source_set("test_support") {
  testonly = true

  sources = [
    "test/exo_test_base_aura.cc",
    "test/exo_test_base_aura.h",
    "test/exo_test_suite_aura.cc",
    "test/exo_test_suite_aura.h",
  ]

  deps = [
    ":exo",
    "//base",
    "//base/test:test_support",
    "//gpu",
    "//skia",
    "//testing/gtest",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/compositor",
    "//ui/compositor:test_support",
    "//ui/display/manager",
    "//ui/gfx/geometry",
    "//ui/gl:test_support",
    "//ui/views",
    "//ui/wm",
  ]

  if (is_chromeos) {
    sources += [
      "test/exo_test_base.cc",
      "test/exo_test_base.h",
      "test/exo_test_helper.cc",
      "test/exo_test_helper.h",
      "test/test_client_controlled_state_delegate.cc",
      "test/test_client_controlled_state_delegate.h",
    ]
    deps += [
      "//ash:test_support",
      "//ash/public/cpp",
    ]
  }
}

source_set("unit_tests") {
  testonly = true

  deps = [
    ":exo",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//cc",
    "//cc:test_support",
    "//components/user_manager",
    "//components/viz/service",
    "//components/viz/test:test_support",
    "//device/gamepad:test_helpers",
    "//gpu/command_buffer/client:gles2_interface",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/aura",
    "//ui/compositor:test_support",
    "//ui/compositor_extra",
    "//ui/events:dom_keycode_converter",
    "//ui/events:test_support",
    "//ui/events/ozone:events_ozone_evdev",
    "//ui/gfx",
    "//ui/message_center",
    "//ui/views",
    "//ui/wm",
  ]

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

  if (is_chromeos) {
    sources = [
      "../../ui/events/ozone/gamepad/gamepad_event.cc",
      "buffer_unittest.cc",
      "client_controlled_shell_surface_unittest.cc",
      "data_device_unittest.cc",
      "data_offer_unittest.cc",
      "data_source_unittest.cc",
      "display_unittest.cc",
      "gaming_seat_unittest.cc",
      "keyboard_unittest.cc",
      "notification_unittest.cc",
      "pointer_unittest.cc",
      "seat_unittest.cc",
      "shared_memory_unittest.cc",
      "shell_surface_unittest.cc",
      "sub_surface_unittest.cc",
      "surface_unittest.cc",
      "text_input_unittest.cc",
      "touch_unittest.cc",
    ]

    deps += [
      "//ash",
      "//ash:test_support",
      "//ash/public/cpp",
      "//ui/keyboard",
    ]
  }

  if (is_chromecast) {
    sources = [
      "fullscreen_shell_surface_unittest.cc",
    ]
  }
}

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

  deps = [
    ":test_support",
    ":unit_tests",
    "//base",
    "//base/test:test_support",
    "//cc:test_support",
    "//components/viz/test:test_support",
    "//device/gamepad:test_helpers",
    "//mojo/core/embedder",
    "//testing/gtest",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/base",
    "//ui/compositor:test_support",
    "//ui/display:display_manager_test_api",
    "//ui/gl:test_support",
  ]

  data_deps = []

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

  if (is_chromeos) {
    sources += [
      "../../ash/test/ash_test_suite.cc",
      "../../ash/test/ash_test_suite.h",
    ]

    deps += [
      "//ash:test_support",
      "//ash/public/cpp",
    ]

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