# 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("display") {
  sources = [
    "chromeos/apply_content_protection_task.cc",
    "chromeos/apply_content_protection_task.h",
    "chromeos/configure_displays_task.cc",
    "chromeos/configure_displays_task.h",
    "chromeos/display_configurator.cc",
    "chromeos/display_configurator.h",
    "chromeos/display_layout_manager.h",
    "chromeos/display_snapshot_virtual.cc",
    "chromeos/display_snapshot_virtual.h",
    "chromeos/display_util.cc",
    "chromeos/display_util.h",
    "chromeos/query_content_protection_task.cc",
    "chromeos/query_content_protection_task.h",
    "chromeos/update_display_configuration_task.cc",
    "chromeos/update_display_configuration_task.h",
    "display.cc",
    "display.h",
    "display_change_notifier.cc",
    "display_change_notifier.h",
    "display_export.h",
    "display_finder.cc",
    "display_finder.h",
    "display_list.cc",
    "display_list.h",
    "display_observer.cc",
    "display_observer.h",
    "display_switches.cc",
    "display_switches.h",
    "fake_display_delegate.cc",
    "fake_display_delegate.h",
    "fake_display_snapshot.cc",
    "fake_display_snapshot.h",
    "ios/screen_ios.mm",
    "mac/screen_mac.mm",
    "manager/display_layout.cc",
    "manager/display_layout.h",
    "manager/display_layout_builder.cc",
    "manager/display_layout_builder.h",
    "manager/display_layout_store.cc",
    "manager/display_layout_store.h",
    "manager/display_manager.cc",
    "manager/display_manager.h",
    "manager/display_manager_utilities.cc",
    "manager/display_manager_utilities.h",
    "manager/managed_display_info.cc",
    "manager/managed_display_info.h",
    "screen.cc",
    "screen.h",
    "screen_aura.cc",
    "screen_base.cc",
    "screen_base.h",
    "win/display_info.cc",
    "win/display_info.h",
    "win/dpi.cc",
    "win/dpi.h",
    "win/scaling_util.cc",
    "win/scaling_util.h",
    "win/screen_win.cc",
    "win/screen_win.h",
    "win/screen_win_display.cc",
    "win/screen_win_display.h",
  ]

  defines = [ "DISPLAY_IMPLEMENTATION" ]

  public_deps = [
    "//ui/gfx:gfx",
  ]

  deps = [
    "//base",
    "//third_party/re2",
    "//ui/display/types",
    "//ui/display/util",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (is_chromeos && use_x11) {
    sources += [
      "chromeos/x11/display_mode_x11.cc",
      "chromeos/x11/display_mode_x11.h",
      "chromeos/x11/display_snapshot_x11.cc",
      "chromeos/x11/display_snapshot_x11.h",
      "chromeos/x11/display_util_x11.cc",
      "chromeos/x11/display_util_x11.h",
      "chromeos/x11/native_display_delegate_x11.cc",
      "chromeos/x11/native_display_delegate_x11.h",
      "chromeos/x11/native_display_event_dispatcher_x11.cc",
      "chromeos/x11/native_display_event_dispatcher_x11.h",
    ]

    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xext",
      "//build/config/linux:xi",
      "//build/config/linux:xrandr",
    ]

    deps += [ "//ui/events/platform" ]
  }

  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
  }

  if (!use_aura) {
    sources -= [ "screen_aura.cc" ]
  }

  if (is_mac) {
    libs = [
      "AppKit.framework",
      "CoreGraphics.framework",
    ]
  }
}

component("display_manager_test_api") {
  testonly = true
  sources = [
    "test/display_manager_test_api.cc",
    "test/display_manager_test_api.h",
  ]

  defines = [ "DISPLAY_IMPLEMENTATION" ]

  public_deps = [
    ":display",
  ]

  deps = [
    "//base",
    "//ui/display",
    "//ui/display/types",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "chromeos/test/action_logger.cc",
    "chromeos/test/action_logger.h",
    "chromeos/test/action_logger_util.cc",
    "chromeos/test/action_logger_util.h",
    "chromeos/test/test_display_layout_manager.cc",
    "chromeos/test/test_display_layout_manager.h",
    "chromeos/test/test_native_display_delegate.cc",
    "chromeos/test/test_native_display_delegate.h",
    "test/display_matchers.cc",
    "test/display_matchers.h",
    "test/display_test_util.h",
    "test/test_screen.cc",
    "test/test_screen.h",
    "win/test/screen_util_win.cc",
    "win/test/screen_util_win.h",
  ]

  public_deps = [
    ":display",
  ]
  deps = [
    "//base",
    "//testing/gmock",
    "//ui/display/types",
    "//ui/gfx",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
  ]
}

# This test covers all testable components in display.
test("display_unittests") {
  sources = [
    "chromeos/apply_content_protection_task_unittest.cc",
    "chromeos/configure_displays_task_unittest.cc",
    "chromeos/display_configurator_unittest.cc",
    "chromeos/query_content_protection_task_unittest.cc",
    "chromeos/update_display_configuration_task_unittest.cc",
    "chromeos/x11/display_util_x11_unittest.cc",
    "chromeos/x11/native_display_event_dispatcher_x11_unittest.cc",
    "display_change_notifier_unittest.cc",
    "display_list_unittest.cc",
    "display_unittest.cc",
    "fake_display_snapshot_unittests.cc",
    "manager/display_layout_builder_unittest.cc",
    "manager/display_layout_unittest.cc",
    "manager/display_manager_utilities_unittest.cc",
    "manager/managed_display_info_unittest.cc",
    "screen_unittest.cc",
    "util/display_util_unittest.cc",
    "util/edid_parser_unittest.cc",
    "win/scaling_util_unittest.cc",
    "win/screen_win_unittest.cc",
  ]

  deps = [
    ":display",
    ":test_support",
    "//base",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/display/types",
    "//ui/display/util",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
  ]

  if (use_aura) {
    sources -= [ "screen_unittest.cc" ]
  }

  if (is_android) {
    # Do not run display_change_notifier_unittest.cc on Android because it
    # does not compile display_observer.cc
    sources -= [ "display_change_notifier_unittest.cc" ]
  }

  if (is_chromeos && use_ozone) {
    sources -= [
      "chromeos/x11/display_util_x11_unittest.cc",
      "chromeos/x11/native_display_event_dispatcher_x11_unittest.cc",
    ]
  }
}
