# Copyright (c) 2013 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/compiled_action.gni")
import("//build/config/ui.gni")
import("//build/config/nacl/config.gni")

if (is_android) {
  import("//build/config/android/rules.gni")
}

static_library("test_config") {
  testonly = true
  sources = [
    "test_switches.cc",
    "test_switches.h",
    "test_timeouts.cc",
    "test_timeouts.h",
  ]
  deps = [
    "//base",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "../memory/fake_memory_pressure_monitor.cc",
    "../memory/fake_memory_pressure_monitor.h",
    "../task/sequence_manager/test/fake_task.cc",
    "../task/sequence_manager/test/fake_task.h",
    "../task/sequence_manager/test/lazy_thread_controller_for_test.cc",
    "../task/sequence_manager/test/lazy_thread_controller_for_test.h",
    "../task/sequence_manager/test/mock_time_domain.cc",
    "../task/sequence_manager/test/mock_time_domain.h",
    "../task/sequence_manager/test/sequence_manager_for_test.cc",
    "../task/sequence_manager/test/sequence_manager_for_test.h",
    "../task/sequence_manager/test/test_task_queue.cc",
    "../task/sequence_manager/test/test_task_queue.h",
    "../task/sequence_manager/test/test_task_time_observer.h",
    "../timer/mock_timer.cc",
    "../timer/mock_timer.h",
    "../trace_event/trace_config_memory_test_util.h",
    "android/java_handler_thread_helpers.cc",
    "android/java_handler_thread_helpers.h",
    "android/url_utils.cc",
    "android/url_utils.h",
    "bind_test_util.h",
    "copy_only_int.h",
    "fuzzed_data_provider.cc",
    "fuzzed_data_provider.h",
    "gtest_util.cc",
    "gtest_util.h",
    "gtest_xml_unittest_result_printer.cc",
    "gtest_xml_unittest_result_printer.h",
    "gtest_xml_util.cc",
    "gtest_xml_util.h",
    "icu_test_util.cc",
    "icu_test_util.h",
    "ios/wait_util.h",
    "ios/wait_util.mm",
    "launcher/test_result.cc",
    "launcher/test_result.h",
    "launcher/test_results_tracker.h",
    "launcher/unit_test_launcher.h",
    "metrics/histogram_enum_reader.cc",
    "metrics/histogram_enum_reader.h",
    "metrics/histogram_tester.cc",
    "metrics/histogram_tester.h",
    "metrics/user_action_tester.cc",
    "metrics/user_action_tester.h",
    "mock_callback.h",
    "mock_chrome_application_mac.h",
    "mock_chrome_application_mac.mm",
    "mock_devices_changed_observer.cc",
    "mock_devices_changed_observer.h",
    "mock_entropy_provider.cc",
    "mock_entropy_provider.h",
    "mock_log.cc",
    "mock_log.h",
    "move_only_int.h",
    "multiprocess_test.h",
    "multiprocess_test_android.cc",
    "null_task_runner.cc",
    "null_task_runner.h",
    "perf_log.cc",
    "perf_log.h",
    "perf_test_suite.cc",
    "perf_test_suite.h",
    "perf_time_logger.cc",
    "perf_time_logger.h",
    "power_monitor_test_base.cc",
    "power_monitor_test_base.h",
    "scoped_command_line.cc",
    "scoped_command_line.h",
    "scoped_environment_variable_override.cc",
    "scoped_environment_variable_override.h",
    "scoped_feature_list.cc",
    "scoped_feature_list.h",
    "scoped_mock_clock_override.cc",
    "scoped_mock_clock_override.h",
    "scoped_mock_time_message_loop_task_runner.cc",
    "scoped_mock_time_message_loop_task_runner.h",
    "scoped_os_info_override_win.cc",
    "scoped_os_info_override_win.h",
    "scoped_path_override.cc",
    "scoped_path_override.h",
    "scoped_task_environment.cc",
    "scoped_task_environment.h",
    "sequenced_task_runner_test_template.cc",
    "sequenced_task_runner_test_template.h",
    "simple_test_clock.cc",
    "simple_test_clock.h",
    "simple_test_tick_clock.cc",
    "simple_test_tick_clock.h",
    "task_runner_test_template.cc",
    "task_runner_test_template.h",
    "test_discardable_memory_allocator.cc",
    "test_discardable_memory_allocator.h",
    "test_file_util.cc",
    "test_file_util.h",
    "test_file_util_android.cc",
    "test_file_util_linux.cc",
    "test_file_util_mac.cc",
    "test_file_util_win.cc",
    "test_io_thread.cc",
    "test_io_thread.h",
    "test_listener_ios.h",
    "test_listener_ios.mm",
    "test_message_loop.cc",
    "test_message_loop.h",
    "test_mock_time_task_runner.cc",
    "test_mock_time_task_runner.h",
    "test_pending_task.cc",
    "test_pending_task.h",
    "test_reg_util_win.cc",
    "test_reg_util_win.h",
    "test_shared_memory_util.cc",
    "test_shared_memory_util.h",
    "test_shortcut_win.cc",
    "test_shortcut_win.h",
    "test_simple_task_runner.cc",
    "test_simple_task_runner.h",
    "test_suite.cc",
    "test_suite.h",
    "test_support_android.cc",
    "test_support_android.h",
    "test_support_ios.h",
    "test_support_ios.mm",
    "thread_test_helper.cc",
    "thread_test_helper.h",
    "trace_event_analyzer.cc",
    "trace_event_analyzer.h",
    "trace_to_file.cc",
    "trace_to_file.h",
    "values_test_util.cc",
    "values_test_util.h",
  ]

  if (is_ios && !is_starboard) {
    sources += [ "launcher/unit_test_launcher_ios.cc" ]
  } else if (!is_nacl_nonsfi && !is_starboard) {
    sources += [
      "launcher/test_launcher.cc",
      "launcher/test_launcher.h",
      "launcher/test_launcher_tracer.cc",
      "launcher/test_launcher_tracer.h",
      "launcher/test_results_tracker.cc",
      "launcher/unit_test_launcher.cc",
      "multiprocess_test.cc",
    ]
  }

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

  data = [
    # The isolate needs this script for setting up the test. It's not actually
    # needed to run this target locally.
    "//testing/test_env.py",
  ]

  public_deps = [
    ":test_config",
    "//base",
    "//base:base_static",
    "//base:i18n",
  ]
  deps = [
    "//base/third_party/dynamic_annotations",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/icu:icuuc",
    "//third_party/libxml",
  ]

  if (is_starboard) {
    sources -= [
      "android/java_handler_thread_helpers.cc",
      "android/java_handler_thread_helpers.h",
      "android/url_utils.cc",
      "android/url_utils.h",
      "gtest_xml_unittest_result_printer.cc",
      "gtest_xml_unittest_result_printer.h",
      "gtest_xml_util.cc",
      "gtest_xml_util.h",
      "ios/wait_util.h",
      "ios/wait_util.mm",
      "launcher/test_result.cc",
      "launcher/test_result.h",
      "launcher/test_results_tracker.h",
      "launcher/unit_test_launcher.h",
      "metrics/histogram_enum_reader.cc",
      "metrics/histogram_enum_reader.h",
      "mock_chrome_application_mac.h",
      "mock_chrome_application_mac.mm",
      "mock_entropy_provider.cc",
      "mock_entropy_provider.h",
      "move_only_int.h",
      "multiprocess_test.h",
      "multiprocess_test_android.cc",
      "perf_log.cc",
      "perf_log.h",
      "perf_test_suite.cc",
      "perf_test_suite.h",
      "perf_time_logger.cc",
      "perf_time_logger.h",
      "scoped_command_line.cc",
      "scoped_command_line.h",
      "scoped_environment_variable_override.cc",
      "scoped_environment_variable_override.h",
      "scoped_os_info_override_win.cc",
      "scoped_os_info_override_win.h",
      "scoped_path_override.cc",
      "scoped_path_override.h",
      "test_discardable_memory_allocator.cc",
      "test_discardable_memory_allocator.h",
      "test_file_util.cc",
      "test_file_util.h",
      "test_file_util_android.cc",
      "test_file_util_linux.cc",
      "test_file_util_mac.cc",
      "test_file_util_win.cc",
      "test_listener_ios.h",
      "test_listener_ios.mm",
      "test_message_loop.cc",
      "test_message_loop.h",
      "test_reg_util_win.cc",
      "test_reg_util_win.h",
      "test_shared_memory_util.cc",
      "test_shared_memory_util.h",
      "test_shortcut_win.cc",
      "test_shortcut_win.h",
      "test_support_android.cc",
      "test_support_android.h",
      "test_support_ios.h",
      "test_support_ios.mm",
      "thread_test_helper.cc",
      "thread_test_helper.h",
    ]
    sources += [
      "time_helpers.cc",
      "time_helpers.h",
    ]
    deps += [ "//third_party/libxml:libxml_utils" ]
  }

  if ((is_posix || is_fuchsia) && !is_starboard) {
    sources += [
      "scoped_locale.cc",
      "scoped_locale.h",
      "test_file_util_posix.cc",
    ]
  }

  if (is_fuchsia) {
    deps += [ "//third_party/fuchsia-sdk:zx" ]
  }

  if (is_linux && !is_starboard) {
    public_deps += [ ":fontconfig_util_linux" ]
    data_deps = [
      "//third_party/test_fonts",
    ]
    if (current_toolchain == host_toolchain) {
      data_deps += [ ":do_generate_fontconfig_caches" ]
    }
  }

  if (is_ios) {
    set_sources_assignment_filter([])
    sources += [ "test_file_util_mac.cc" ]
    set_sources_assignment_filter(sources_assignment_filter)
  }

  if (is_mac && !is_starboard) {
    libs = [ "AppKit.framework" ]
  }

  if (is_android && !is_starboard) {
    set_sources_assignment_filter([])
    sources += [ "test_file_util_linux.cc" ]
    set_sources_assignment_filter(sources_assignment_filter)
    deps += [
      ":base_unittests_jni_headers",
      ":test_support_jni_headers",
    ]
    public_deps += [ ":test_support_java" ]
  }

  if (is_nacl_nonsfi && !is_starboard) {
    sources += [
      "launcher/test_launcher.h",
      "launcher/test_result.h",
      "launcher/unit_test_launcher.h",
      "launcher/unit_test_launcher_nacl_nonsfi.cc",
    ]
    sources -= [
      "gtest_xml_util.cc",
      "gtest_xml_util.h",
      "icu_test_util.cc",
      "icu_test_util.h",
      "metrics/histogram_enum_reader.cc",
      "metrics/histogram_enum_reader.h",
      "perf_test_suite.cc",
      "perf_test_suite.h",
      "scoped_path_override.cc",
      "scoped_path_override.h",
      "test_discardable_memory_allocator.cc",
      "test_discardable_memory_allocator.h",
      "test_file_util.cc",
      "test_file_util.h",
      "test_file_util_posix.cc",
      "test_suite.cc",
      "test_suite.h",
      "trace_to_file.cc",
      "trace_to_file.h",
    ]
    public_deps -= [ "//base:i18n" ]
    deps -= [
      "//third_party/icu:icuuc",
      "//third_party/libxml",
    ]
  }
}

config("perf_test_config") {
  defines = [ "PERF_TEST" ]
}

# This is a source set instead of a static library because it seems like some
# linkers get confused when "main" is in a static library, and if you link to
# this, you always want the object file anyway.
source_set("test_support_perf") {
  testonly = true
  sources = [
    "run_all_perftests.cc",
  ]
  deps = [
    ":test_support",
    "//base",
    "//testing/gtest",
  ]

  public_configs = [ ":perf_test_config" ]
}

if (!is_starboard) {
  static_library("test_launcher_nacl_nonsfi") {
    testonly = true
    sources = [
      "launcher/test_launcher_nacl_nonsfi.cc",
      "launcher/test_launcher_nacl_nonsfi.h",
    ]
    deps = [
      ":test_support",
    ]
  }
}

source_set("run_all_unittests") {
  testonly = true
  sources = [
    "run_all_unittests.cc",
  ]
  deps = [
    ":test_support",
  ]
}

if (!is_starboard && !is_win) {
  # These sources are linked into both the base_unittests binary and the test
  # shared library target below.
  source_set("native_library_test_utils") {
    testonly = true
    sources = [
      "native_library_test_utils.cc",
      "native_library_test_utils.h",
    ]
  }

  # This shared library is dynamically loaded by NativeLibrary unittests.
  shared_library("test_shared_library") {
    testonly = true
    sources = [
      "test_shared_library.cc",
    ]

    deps = [
      ":native_library_test_utils",
    ]
  }
}

if (!is_starboard) {
  static_library("run_all_base_unittests") {
    # Only targets in base should depend on this, targets outside base
    # should depend on run_all_unittests above.
    visibility = [ "//base/*" ]
    testonly = true
    sources = [
      "run_all_base_unittests.cc",
    ]
    deps = [
      ":test_support",
    ]
  }
}

if (is_linux && !is_starboard) {
  source_set("fontconfig_util_linux") {
    sources = [
      "fontconfig_util_linux.cc",
      "fontconfig_util_linux.h",
    ]
    deps = [
      "//base",
      "//third_party/fontconfig",
    ]
  }

  if (current_toolchain == host_toolchain) {
    executable("generate_fontconfig_caches") {
      testonly = true
      sources = [
        "generate_fontconfig_caches.cc",
      ]
      deps = [
        ":fontconfig_util_linux",
        "//base",
      ]
    }

    compiled_action("do_generate_fontconfig_caches") {
      testonly = true
      tool = ":generate_fontconfig_caches"
      data_deps = [
        "//third_party/test_fonts",
      ]
      args = []
      outputs = [
        "$root_out_dir/fontconfig_caches/df1acc8c-39d5-4a8b-8507-b1a7396ac3ac-le64.cache-7",
        "$root_out_dir/test_fonts/.uuid",
      ]
    }
  }

  shared_library("malloc_wrapper") {
    testonly = true
    sources = [
      "malloc_wrapper.cc",
    ]
    deps = [
      "//base",
    ]
  }
}

if (is_android && !is_starboard) {
  generate_jni("base_unittests_jni_headers") {
    sources = [
      "android/java/src/org/chromium/base/ContentUriTestUtils.java",
      "android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java",
    ]
    jni_package = "base"
  }

  generate_jni("test_support_jni_headers") {
    sources = [
      "android/java/src/org/chromium/base/MainReturnCodeResult.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java",
      "android/javatests/src/org/chromium/base/test/util/UrlUtils.java",
    ]
    jni_package = "base"
  }

  android_library("test_support_java") {
    testonly = true
    deps = [
      "//base:base_java",
      "//base:base_java_test_support",
      "//testing/android/native_test:native_main_runner_java",
      "//third_party/android_deps:android_support_annotations_java",
      "//third_party/jsr-305:jsr_305_javalib",
    ]
    srcjar_deps = [ ":test_support_java_aidl" ]
    java_files = [
      "android/java/src/org/chromium/base/MainReturnCodeResult.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService0.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService1.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService2.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService3.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService4.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientServiceDelegate.java",
    ]
  }

  android_aidl("test_support_java_aidl") {
    testonly = true
    import_include = [
      "android/java/src",
      "//base/android/java/src",
    ]
    sources = [
      "android/java/src/org/chromium/base/ITestCallback.aidl",
      "android/java/src/org/chromium/base/ITestController.aidl",
    ]
  }
}

if (!is_starboard) {
  # Trivial executable which outputs space-delimited argv to stdout,
  # used for testing.
  executable("test_child_process") {
    testonly = true
    sources = [
      "test_child_process.cc",
    ]
  }
}
