# Copyright 2014 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")

component("wm") {
  sources = [
    "core/accelerator_delegate.h",
    "core/accelerator_filter.cc",
    "core/accelerator_filter.h",
    "core/base_focus_rules.cc",
    "core/base_focus_rules.h",
    "core/capture_controller.cc",
    "core/capture_controller.h",
    "core/compound_event_filter.cc",
    "core/compound_event_filter.h",
    "core/coordinate_conversion.cc",
    "core/coordinate_conversion.h",
    "core/cursor_manager.cc",
    "core/cursor_manager.h",
    "core/default_activation_client.cc",
    "core/default_activation_client.h",
    "core/default_screen_position_client.cc",
    "core/default_screen_position_client.h",
    "core/easy_resize_window_targeter.cc",
    "core/easy_resize_window_targeter.h",
    "core/focus_controller.cc",
    "core/focus_controller.h",
    "core/focus_rules.h",
    "core/image_grid.cc",
    "core/image_grid.h",
    "core/masked_window_targeter.cc",
    "core/masked_window_targeter.h",
    "core/native_cursor_manager.h",
    "core/native_cursor_manager_delegate.h",
    "core/shadow.cc",
    "core/shadow.h",
    "core/shadow_controller.cc",
    "core/shadow_controller.h",
    "core/shadow_types.cc",
    "core/shadow_types.h",
    "core/transient_window_controller.cc",
    "core/transient_window_controller.h",
    "core/transient_window_manager.cc",
    "core/transient_window_manager.h",
    "core/transient_window_observer.h",
    "core/transient_window_stacking_client.cc",
    "core/transient_window_stacking_client.h",
    "core/visibility_controller.cc",
    "core/visibility_controller.h",
    "core/window_animations.cc",
    "core/window_animations.h",
    "core/window_modality_controller.cc",
    "core/window_modality_controller.h",
    "core/window_util.cc",
    "core/window_util.h",
    "core/wm_core_switches.cc",
    "core/wm_core_switches.h",
    "core/wm_state.cc",
    "core/wm_state.h",
    "wm_export.h",
  ]

  configs += [ "//build/config:precompiled_headers" ]
  defines = [ "WM_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//skia",
    "//ui/aura",
    "//ui/base",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/display",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/events/devices",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/resources",
  ]

  if (use_x11) {
    configs += [ "//build/config/linux:x11" ]
    deps += [ "//ui/events/devices/x11" ]
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "test/testing_cursor_client_observer.cc",
    "test/testing_cursor_client_observer.h",
    "test/wm_test_helper.cc",
    "test/wm_test_helper.h",
  ]

  deps = [
    ":wm",
    "//skia",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/base",
    "//ui/base/ime",
    "//ui/events",
    "//ui/events:events_base",
  ]
}

test("wm_unittests") {
  sources = [
    "core/capture_controller_unittest.cc",
    "core/compound_event_filter_unittest.cc",
    "core/coordinate_conversion_unittest.cc",
    "core/cursor_manager_unittest.cc",
    "core/focus_controller_unittest.cc",
    "core/image_grid_unittest.cc",
    "core/shadow_controller_unittest.cc",
    "core/shadow_unittest.cc",
    "core/transient_window_manager_unittest.cc",
    "core/transient_window_stacking_client_unittest.cc",
    "core/visibility_controller_unittest.cc",
    "core/window_animations_unittest.cc",
    "core/window_util_unittest.cc",
    "test/run_all_unittests.cc",
  ]

  deps = [
    ":test_support",
    ":wm",
    "//base",
    "//base/test:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/aura:test_support",
    "//ui/base:test_support",
    "//ui/base/ime",
    "//ui/compositor:test_support",
    "//ui/events:test_support",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl:test_support",
    "//ui/resources",
  ]

  data_deps = [
    "//ui/resources:ui_test_pak_data",
  ]
}
