# 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.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",
    "task_scheduler_test_helpers_android.cc",
    "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) {
    sources += [ "launcher/unit_test_launcher_ios.cc" ]
  } else if (!is_nacl_nonsfi) {
    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_posix || is_fuchsia) {
    sources += [
      "scoped_locale.cc",
      "scoped_locale.h",
      "test_file_util_posix.cc",
    ]
  }

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

  if (is_linux) {
    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) {
    libs = [ "AppKit.framework" ]
  }

  if (is_android) {
    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) {
    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" ]
}

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

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

# 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",
  ]
}

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) {
  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) {
  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/task/TaskSchedulerTestHelpers.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/MultiprocessTestClientService5.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService6.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService7.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService8.java",
      "android/java/src/org/chromium/base/MultiprocessTestClientService9.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",
    ]
  }
}

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