| # Copyright 2013 The Chromium Authors |
| # 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/chromeos/ui_mode.gni") |
| import("//build/config/features.gni") |
| import("//build/config/nacl/config.gni") |
| import("//build/config/ui.gni") |
| import("//build_overrides/build.gni") |
| |
| if (is_android) { |
| import("//build/config/android/rules.gni") |
| } |
| |
| if (is_ios) { |
| import("//build/config/ios/rules.gni") |
| } |
| |
| static_library("test_config") { |
| testonly = true |
| sources = [ |
| "test_switches.cc", |
| "test_switches.h", |
| "test_timeouts.cc", |
| "test_timeouts.h", |
| ] |
| deps = [ |
| "//base", |
| "//base:clang_profiling_buildflags", |
| "//build:chromeos_buildflags", |
| ] |
| } |
| |
| static_library("test_support") { |
| testonly = true |
| sources = [ |
| "../task/sequence_manager/test/fake_task.cc", |
| "../task/sequence_manager/test/fake_task.h", |
| "../task/sequence_manager/test/mock_time_domain.cc", |
| "../task/sequence_manager/test/mock_time_domain.h", |
| "../task/sequence_manager/test/mock_time_message_pump.cc", |
| "../task/sequence_manager/test/mock_time_message_pump.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_time_observer.h", |
| "../timer/mock_timer.cc", |
| "../timer/mock_timer.h", |
| "allow_check_is_test_for_testing.h", |
| "bind.cc", |
| "bind.h", |
| "copy_only_int.cc", |
| "copy_only_int.h", |
| "gmock_callback_support.h", |
| "gmock_move_support.h", |
| "gtest_links.cc", |
| "gtest_links.h", |
| "gtest_tags.cc", |
| "gtest_tags.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", |
| "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_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", |
| "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.cc", |
| "power_monitor_test.h", |
| "power_monitor_test_utils.cc", |
| "power_monitor_test_utils.h", |
| "rectify_callback.h", |
| "rectify_callback_internal.h", |
| "repeating_test_future.h", |
| "scoped_command_line.cc", |
| "scoped_command_line.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_path_override.cc", |
| "scoped_path_override.h", |
| "scoped_run_loop_timeout.cc", |
| "scoped_run_loop_timeout.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_environment.cc", |
| "task_environment.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_future.h", |
| "test_future_internal.h", |
| "test_io_thread.cc", |
| "test_io_thread.h", |
| "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_shared_memory_util.cc", |
| "test_shared_memory_util.h", |
| "test_simple_task_runner.cc", |
| "test_simple_task_runner.h", |
| "test_suite.cc", |
| "test_suite.h", |
| "test_waitable_event.cc", |
| "test_waitable_event.h", |
| "thread_test_helper.cc", |
| "thread_test_helper.h", |
| "values_test_util.cc", |
| "values_test_util.h", |
| "with_feature_override.cc", |
| "with_feature_override.h", |
| ] |
| |
| configs += [ "//build/config:precompiled_headers" ] |
| |
| public_deps = [ |
| ":test_config", |
| "//base", |
| "//base:base_static", |
| "//base:i18n", |
| "//testing/gmock", |
| "//testing/gtest", |
| ] |
| |
| deps = [ |
| "//base/third_party/dynamic_annotations", |
| "//build:chromeos_buildflags", |
| "//third_party/icu:icuuc", |
| "//third_party/libxml:libxml_utils", |
| "//third_party/libxml:xml_reader", |
| ] |
| |
| if (is_starboard) { |
| sources -= [ |
| "launcher/unit_test_launcher.h", |
| "test_shared_memory_util.cc", |
| "test_shared_memory_util.h", |
| ] |
| |
| sources += [ |
| "time_helpers.cc", |
| "time_helpers.h", |
| ] |
| sources -= [ |
| "metrics/histogram_enum_reader.cc", |
| "metrics/histogram_enum_reader.h", |
| ] |
| |
| # These rely on FILE/fopen/fclose. |
| sources -= [ |
| "gtest_links.cc", |
| "gtest_links.h", |
| "gtest_tags.cc", |
| "gtest_tags.h", |
| "gtest_xml_unittest_result_printer.cc", |
| "gtest_xml_unittest_result_printer.h", |
| "gtest_xml_util.cc", |
| "gtest_xml_util.h", |
| "perf_log.cc", |
| "perf_log.h", |
| ] |
| } |
| |
| if (enable_base_tracing) { |
| public_deps += [ "//third_party/perfetto:perfetto_test_support" ] |
| if (!is_chromeos && !is_starboard) { |
| # TODO(rasikan): Add to ios and chromeos when unblocked by the chromiumos |
| # change to add the shared lib to the chrome-binary-tests directory. |
| public_deps += [ ":test_trace_processor" ] |
| if (is_ios) { |
| deps += [ |
| ":test_trace_processor+bundle", |
| ":test_trace_processor+link", |
| ] |
| } |
| } |
| } |
| |
| if (is_win && !is_starboard) { |
| sources += [ |
| "async_results_test_values_win.h", |
| "fake_iasync_operation_win.h", |
| "scoped_os_info_override_win.cc", |
| "scoped_os_info_override_win.h", |
| "test_file_util_win.cc", |
| "test_reg_util_win.cc", |
| "test_reg_util_win.h", |
| "test_shortcut_win.cc", |
| "test_shortcut_win.h", |
| ] |
| } |
| |
| if (is_chromeos) { |
| sources += [ |
| "scoped_chromeos_version_info.cc", |
| "scoped_chromeos_version_info.h", |
| "scoped_running_on_chromeos.cc", |
| "scoped_running_on_chromeos.h", |
| ] |
| } |
| |
| if (!use_cobalt_customizations && (is_linux || is_chromeos)) { |
| sources += [ "test_file_util_linux.cc" ] |
| public_deps += [ "//third_party/test_fonts/fontconfig:test_support" ] |
| } |
| |
| if (is_mac && !is_starboard) { |
| frameworks = [ "AppKit.framework" ] |
| sources += [ |
| "mock_chrome_application_mac.h", |
| "mock_chrome_application_mac.mm", |
| "test_file_util_mac.cc", |
| ] |
| } |
| |
| if (is_android && !use_cobalt_customizations) { |
| sources += [ |
| "android/java_handler_thread_helpers.cc", |
| "android/java_handler_thread_helpers.h", |
| "android/url_utils.cc", |
| "android/url_utils.h", |
| "multiprocess_test_android.cc", |
| "reached_code_profiler_android.cc", |
| "test_file_util_android.cc", |
| "test_file_util_linux.cc", |
| "test_support_android.cc", |
| "test_support_android.h", |
| "thread_pool_test_helpers_android.cc", |
| ] |
| deps += [ |
| ":base_unittests_jni_headers", |
| ":test_support_jni_headers", |
| ] |
| public_deps += [ ":test_support_java" ] |
| } |
| |
| if (is_ios) { |
| sources += [ |
| "ios/wait_util.h", |
| "ios/wait_util.mm", |
| "test_file_util_mac.cc", |
| "test_listener_ios.h", |
| "test_listener_ios.mm", |
| "test_support_ios.h", |
| "test_support_ios.mm", |
| ] |
| deps += [ |
| ":google_test_runner_shared_headers", |
| "//build:blink_buildflags", |
| ] |
| |
| # With blink, we use the standard unit_test_launcher.cc. |
| if (!use_blink) { |
| sources += [ "launcher/unit_test_launcher_ios.cc" ] |
| } |
| } |
| |
| if (!is_starboard && (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/fidl/fuchsia.io:fuchsia.io_cpp_hlcpp_conversion", |
| "//third_party/fuchsia-sdk/sdk/pkg/zx", |
| ] |
| public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp" ] |
| sources += [ |
| "../fuchsia/test_component_context_for_process.cc", |
| "../fuchsia/test_component_context_for_process.h", |
| "scoped_dev_zero_fuchsia.cc", |
| "scoped_dev_zero_fuchsia.h", |
| ] |
| } |
| |
| if (use_blink) { |
| sources += [ |
| "launcher/test_launcher.cc", |
| "launcher/test_launcher.h", |
| "launcher/test_launcher_test_utils.cc", |
| "launcher/test_launcher_test_utils.h", |
| "launcher/test_launcher_tracer.cc", |
| "launcher/test_launcher_tracer.h", |
| "launcher/test_results_tracker.cc", |
| "launcher/unit_test_launcher.cc", |
| "multiprocess_test.cc", |
| ] |
| } |
| |
| if (enable_base_tracing) { |
| sources += [ |
| "../trace_event/trace_config_memory_test_util.h", |
| "trace_event_analyzer.cc", |
| "trace_event_analyzer.h", |
| "trace_test_utils.cc", |
| "trace_test_utils.h", |
| "trace_to_file.cc", |
| "trace_to_file.h", |
| ] |
| } |
| } |
| |
| config("base_test_implementation") { |
| defines = [ "IS_BASE_TEST_IMPL" ] |
| } |
| |
| 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" ] |
| } |
| |
| # TODO: b/315170518 - Revert to static library after fixing |
| # symbol visibility issues for windows based modular platform builds. |
| source_set("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", |
| ] |
| } |
| |
| if (!use_cobalt_customizations) { |
| # This shared library is dynamically loaded by ImmediateCrash unittests. |
| shared_library("immediate_crash_test_helper") { |
| sources = [ "immediate_crash_test_helper.cc" ] |
| |
| # Note: the helper has a header-only dependency on //base/immediate_helper.h. |
| # However, the build rule intentionally omits an explicit //base dependency |
| # to avoid potential ODR violations and minimize the amount of code linked in. |
| |
| # Try to minimize the risk of non-official builds generating different code. |
| if (!is_official_build) { |
| configs -= [ "//build/config/compiler:default_optimization" ] |
| configs += [ "//build/config/compiler:optimize_max" ] |
| } |
| |
| # Disable sanitization: sanitized builds are assumed to be saner than normal, |
| # and can affect codegen in surprising ways, which breaks the tests. |
| configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ] |
| |
| if (is_android) { |
| configs -= [ "//build/config/android:hide_all_but_jni_onload" ] |
| } |
| } |
| } |
| |
| if (!use_cobalt_customizations) { |
| # 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 (!use_cobalt_customizations) { |
| if (is_fuchsia || is_linux || is_chromeos) { |
| shared_library("malloc_wrapper") { |
| testonly = true |
| sources = [ "malloc_wrapper.cc" ] |
| deps = [ "//base" ] |
| } |
| } |
| } |
| |
| if (is_android && !use_cobalt_customizations) { |
| generate_jni("base_unittests_jni_headers") { |
| testonly = true |
| sources = [ |
| "android/java/src/org/chromium/base/ContentUriTestUtils.java", |
| "android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java", |
| ] |
| } |
| |
| generate_jni("test_support_jni_headers") { |
| testonly = true |
| sources = [ |
| "android/java/src/org/chromium/base/MainReturnCodeResult.java", |
| "android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java", |
| "android/javatests/src/org/chromium/base/test/ReachedCodeProfiler.java", |
| "android/javatests/src/org/chromium/base/test/task/ThreadPoolTestHelpers.java", |
| "android/javatests/src/org/chromium/base/test/util/UrlUtils.java", |
| ] |
| } |
| |
| android_library("test_support_java") { |
| testonly = true |
| |
| deps = [ |
| "//base:base_java", |
| "//base:jni_java", |
| "//base:process_launcher_java", |
| "//testing/android/native_test:native_main_runner_java", |
| "//third_party/android_deps:com_google_code_findbugs_jsr305_java", |
| ] |
| |
| srcjar_deps = [ ":test_support_java_aidl" ] |
| sources = [ |
| "android/java/src/org/chromium/base/GarbageCollectionTestUtils.java", |
| "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", |
| ] |
| } |
| } |
| |
| if (is_ios) { |
| source_set("google_test_runner_shared_headers") { |
| sources = [ "ios/google_test_runner_delegate.h" ] |
| } |
| |
| source_set("google_test_runner") { |
| sources = [ "ios/google_test_runner.mm" ] |
| deps = [ |
| ":google_test_runner_shared_headers", |
| "//base", |
| ] |
| frameworks = [ "UIKit.framework" ] |
| configs += [ |
| "//build/config/compiler:enable_arc", |
| "//build/config/ios:xctest_config", |
| ] |
| } |
| } |
| |
| # Trivial executable which outputs space-delimited argv to stdout, |
| # used for testing. |
| if (!use_cobalt_customizations) { |
| executable("test_child_process") { |
| testonly = true |
| sources = [ "test_child_process.cc" ] |
| } |
| } |
| |
| if (enable_base_tracing && !use_cobalt_customizations) { |
| # We encapsulate the trace processor in a separate shared library to prevent |
| # any duplicate symbol issues. Perfetto symbols are exported by chromium’s |
| # base via a public_dep on libperfetto; libtrace_processor also depends on |
| # these symbols. So we “hide” the perfetto symbols exported from this |
| # interface. Also, chrome targets depend on chromium_sqlite and the trace |
| # processor depends on dev_sqlite. The two share the same symbols but have |
| # different implementations, so we need to hide dev_sqlite in this shared |
| # library even in non-component builds to prevent duplicate symbols. |
| _target_type = "shared_library" |
| if (is_ios) { |
| _target_type = "ios_framework_bundle" |
| } |
| |
| target(_target_type, "test_trace_processor") { |
| defines = [ "TEST_TRACE_PROCESSOR_IMPL" ] |
| testonly = true |
| sources = [ |
| "test_trace_processor.cc", |
| "test_trace_processor.h", |
| "test_trace_processor_export.h", |
| ] |
| deps = [ |
| "//third_party/abseil-cpp:absl", |
| "//third_party/perfetto:libtrace_processor", |
| ] |
| if (is_android) { |
| configs -= [ "//build/config/android:hide_all_but_jni_onload" ] |
| } |
| |
| if (is_ios) { |
| info_plist = "test_trace_processor.plist" |
| output_name = "TestTraceProcessor" |
| bundle_deps_filter = [ "//third_party/icu:icudata" ] |
| } |
| |
| # Set rpath on dependent tests so that they can find the shared library |
| # in a non-component build. |
| if (!is_component_build) { |
| all_dependent_configs = [] |
| if (is_linux || is_chromeos) { |
| all_dependent_configs += |
| [ "//build/config/gcc:rpath_for_built_shared_libraries" ] |
| } |
| if (is_mac) { |
| # We need the lib to be in $root_out_dir/Libraries so the library is where |
| # the linker expects it, since we set the install_name flag. We need to |
| # set this flag so that the library can be found when it is bundled in the |
| # Content Shell Framework (see test_trace_processor_bundle_data). |
| output_dir = "$root_out_dir/Libraries" |
| ldflags = [ "-Wl,-install_name,@loader_path/Libraries/libtest_trace_processor.dylib" ] |
| } |
| } |
| } |
| |
| if (!is_component_build && is_mac) { |
| bundle_data("test_trace_processor_bundle_data") { |
| testonly = true |
| sources = [ "$root_out_dir/Libraries/libtest_trace_processor.dylib" ] |
| outputs = [ "{{bundle_contents_dir}}/Libraries/{{source_file_part}}" ] |
| public_deps = [ ":test_trace_processor" ] |
| } |
| } |
| } |