# 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")
import("//services/service_manager/public/cpp/service.gni")
import("//services/service_manager/public/service_manifest.gni")

static_library("lib") {
  sources = [
    "accelerator.cc",
    "accelerator.h",
    "access_policy.h",
    "access_policy_delegate.h",
    "accessibility_manager.cc",
    "accessibility_manager.h",
    "animation_runner.cc",
    "animation_runner.h",
    "animation_runner_observer.h",
    "default_access_policy.cc",
    "default_access_policy.h",
    "display.cc",
    "display.h",
    "display_binding.cc",
    "display_binding.h",
    "display_manager.cc",
    "display_manager.h",
    "drag_controller.cc",
    "drag_controller.h",
    "drag_cursor_updater.h",
    "drag_source.h",
    "drag_target_connection.h",
    "event_dispatcher.cc",
    "event_dispatcher.h",
    "event_dispatcher_delegate.h",
    "event_matcher.cc",
    "event_matcher.h",
    "focus_controller.cc",
    "focus_controller.h",
    "focus_controller_delegate.h",
    "focus_controller_observer.h",
    "frame_generator.cc",
    "frame_generator.h",
    "gpu_service_proxy.cc",
    "gpu_service_proxy.h",
    "gpu_service_proxy_delegate.h",
    "modal_window_controller.cc",
    "modal_window_controller.h",
    "operation.cc",
    "operation.h",
    "platform_display.cc",
    "platform_display.h",
    "platform_display_default.cc",
    "platform_display_default.h",
    "platform_display_delegate.h",
    "platform_display_factory.h",
    "platform_display_init_params.cc",
    "platform_display_init_params.h",
    "scheduled_animation_group.cc",
    "scheduled_animation_group.h",
    "server_window.cc",
    "server_window.h",
    "server_window_compositor_frame_sink_manager.cc",
    "server_window_compositor_frame_sink_manager.h",
    "server_window_delegate.h",
    "server_window_drawn_tracker.cc",
    "server_window_drawn_tracker.h",
    "server_window_drawn_tracker_observer.h",
    "server_window_observer.h",
    "server_window_tracker.h",
    "touch_controller.cc",
    "touch_controller.h",
    "user_activity_monitor.cc",
    "user_activity_monitor.h",
    "user_display_manager.cc",
    "user_display_manager.h",
    "user_display_manager_delegate.h",
    "user_id.h",
    "user_id_tracker.cc",
    "user_id_tracker.h",
    "user_id_tracker_observer.h",
    "window_coordinate_conversions.cc",
    "window_coordinate_conversions.h",
    "window_finder.cc",
    "window_finder.h",
    "window_manager_access_policy.cc",
    "window_manager_access_policy.h",
    "window_manager_display_root.cc",
    "window_manager_display_root.h",
    "window_manager_state.cc",
    "window_manager_state.h",
    "window_manager_window_tree_factory.cc",
    "window_manager_window_tree_factory.h",
    "window_manager_window_tree_factory_set.cc",
    "window_manager_window_tree_factory_set.h",
    "window_manager_window_tree_factory_set_observer.h",
    "window_server.cc",
    "window_server.h",
    "window_server_delegate.cc",
    "window_server_delegate.h",
    "window_tree.cc",
    "window_tree.h",
    "window_tree_binding.cc",
    "window_tree_binding.h",
    "window_tree_factory.cc",
    "window_tree_factory.h",
    "window_tree_host_factory.cc",
    "window_tree_host_factory.h",
  ]

  deps = [
    "//gpu/command_buffer/client",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/ipc/client",
    "//gpu/ipc/common",
    "//services/ui/gpu",  # TODO(sad): Temporary until GPU process split.
    "//services/ui/gpu/interfaces",
  ]

  public_deps = [
    "//base",
    "//cc",
    "//cc/ipc:internal_interfaces",
    "//cc/surfaces",
    "//cc/surfaces:surface_id",
    "//mojo/common:common_base",
    "//mojo/public/cpp/bindings",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/interfaces",
    "//services/tracing/public/cpp",
    "//services/ui/common:mus_common",
    "//services/ui/display",
    "//services/ui/public/interfaces",
    "//services/ui/surfaces",
    "//ui/base",
    "//ui/display",
    "//ui/events",
    "//ui/events/devices",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gfx/geometry/mojo",
    "//ui/gl",
    "//ui/platform_window",
    "//ui/platform_window:platform_impls",
    "//ui/platform_window/mojo",
  ]

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

static_library("test_interface") {
  sources = [
    "window_server_test_impl.cc",
    "window_server_test_impl.h",
  ]

  deps = [
    ":lib",
    "//mojo/public/cpp/bindings:bindings",
    "//services/ui/public/interfaces",
    "//ui/gfx",
  ]
}

static_library("test_support") {
  testonly = true

  sources = [
    "test_change_tracker.cc",
    "test_change_tracker.h",
  ]

  deps = [
    "//base",
    "//mojo/common",
    "//mojo/public/cpp/bindings:bindings",
    "//services/ui/common:mus_common",
    "//services/ui/public/cpp",
    "//services/ui/public/interfaces",
    "//ui/gfx/geometry/mojo",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":mus_ws_unittests",
  ]
  if (!is_android) {
    deps += [ "//services/ui/public/cpp/tests:mus_public_unittests" ]
  }
}

test("mus_ws_unittests") {
  sources = [
    "animation_runner_unittest.cc",
    "cursor_unittest.cc",
    "display_unittest.cc",
    "drag_controller_unittest.cc",
    "event_dispatcher_unittest.cc",
    "event_matcher_unittest.cc",
    "focus_controller_unittest.cc",
    "frame_generator_unittest.cc",
    "scheduled_animation_group_unittest.cc",
    "server_window_compositor_frame_sink_manager_test_api.cc",
    "server_window_compositor_frame_sink_manager_test_api.h",
    "server_window_drawn_tracker_unittest.cc",
    "test_server_window_delegate.cc",
    "test_server_window_delegate.h",
    "test_utils.cc",
    "test_utils.h",
    "transient_windows_unittest.cc",
    "user_activity_monitor_unittest.cc",
    "user_display_manager_unittest.cc",
    "window_coordinate_conversions_unittest.cc",
    "window_finder_unittest.cc",
    "window_manager_client_unittest.cc",
    "window_manager_state_unittest.cc",
    "window_tree_client_unittest.cc",
    "window_tree_unittest.cc",
  ]

  deps = [
    ":lib",
    ":test_support",
    "//base",
    "//base/test:test_config",
    "//base/test:test_support",
    "//cc:cc",
    "//gpu/ipc/client",
    "//mojo/public/cpp/bindings:bindings",
    "//services/service_manager/public/cpp:service_test_support",
    "//services/service_manager/public/cpp:sources",
    "//services/service_manager/public/cpp/test:run_all_service_tests",
    "//services/service_manager/public/interfaces",
    "//services/ui/common:mus_common",
    "//services/ui/public/cpp",
    "//services/ui/public/cpp:internal_or_test",
    "//services/ui/public/cpp/tests:test_support",
    "//services/ui/public/interfaces",
    "//services/ui/surfaces",
    "//testing/gtest",
    "//third_party/mesa:osmesa",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
    "//ui/gfx/geometry/mojo",
    "//ui/gl",
  ]

  if (use_x11) {
    deps += [ "//tools/xdisplaycheck" ]
  }

  data_deps = [
    ":mus_ws_unittests_app_manifest",
  ]
}

service_manifest("mus_ws_unittests_app_manifest") {
  name = "mus_ws_unittests_app"
  source = "mus_ws_unittests_app_manifest.json"
}
