| # Copyright 2015 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. |
| |
| # ============================================================================== |
| # TEST SETUP |
| # ============================================================================== |
| |
| # Define a test as an executable (or apk on Android) with the "testonly" flag |
| # set. |
| template("test") { |
| if (is_android) { |
| import("//build/config/android/config.gni") |
| import("//build/config/android/rules.gni") |
| |
| main_target_name = target_name |
| library_name = "_${target_name}__library" |
| apk_name = "${target_name}_apk" |
| |
| shared_library(library_name) { |
| # Configs will always be defined since we set_defaults for a component |
| # in the main config. We want to use those rather than whatever came with |
| # the nested shared/static library inside the component. |
| configs = [] # Prevent list overwriting warning. |
| configs = invoker.configs |
| |
| testonly = true |
| |
| # Don't use "*" to forward all variables since some (like output_name |
| # and isolate_file) apply only to the APK below. |
| deps = [] |
| forward_variables_from(invoker, |
| [ |
| "all_dependent_configs", |
| "allow_circular_includes_from", |
| "cflags", |
| "cflags_c", |
| "cflags_cc", |
| "check_includes", |
| "data", |
| "data_deps", |
| "datadeps", |
| "defines", |
| "deps", |
| "include_dirs", |
| "ldflags", |
| "lib_dirs", |
| "libs", |
| "output_extension", |
| "output_name", |
| "public", |
| "public_configs", |
| "public_deps", |
| "sources", |
| "visibility", |
| ]) |
| |
| if (!defined(invoker.use_default_launcher) || |
| invoker.use_default_launcher) { |
| deps += [ "//testing/android/native_test:native_test_native_code" ] |
| } |
| } |
| |
| unittest_apk(apk_name) { |
| forward_variables_from(invoker, |
| [ |
| "android_manifest", |
| "deps", |
| "use_default_launcher", |
| "write_asset_list", |
| ]) |
| unittests_dep = ":$library_name" |
| apk_name = main_target_name |
| if (defined(invoker.output_name)) { |
| apk_name = invoker.output_name |
| unittests_binary = "lib${apk_name}.so" |
| } |
| deps += [ ":$library_name" ] |
| if (defined(invoker.apk_asset_location)) { |
| asset_location = invoker.apk_asset_location |
| } |
| } |
| |
| _test_name = main_target_name |
| if (defined(invoker.output_name)) { |
| _test_name = invoker.output_name |
| } |
| test_runner_script_name = "${_test_name}__test_runner_script" |
| test_runner_script(test_runner_script_name) { |
| test_name = _test_name |
| test_type = "gtest" |
| test_suite = _test_name |
| if (defined(invoker.isolate_file)) { |
| isolate_file = invoker.isolate_file |
| } |
| } |
| incremental_test_runner_script_name = |
| "${_test_name}_incremental__test_runner_script" |
| test_runner_script(incremental_test_runner_script_name) { |
| test_name = "${_test_name}_incremental" |
| test_type = "gtest" |
| test_suite = _test_name |
| incremental_install = true |
| if (defined(invoker.isolate_file)) { |
| isolate_file = invoker.isolate_file |
| } |
| } |
| |
| group(target_name) { |
| testonly = true |
| datadeps = [ |
| ":$test_runner_script_name", |
| ] |
| deps = [ |
| ":$apk_name", |
| ] |
| } |
| group("${target_name}_incremental") { |
| testonly = true |
| datadeps = [ |
| ":$incremental_test_runner_script_name", |
| ] |
| deps = [ |
| ":${apk_name}_incremental", |
| ] |
| } |
| } else if (is_ios) { |
| if (is_ios) { |
| import("//build/config/ios/rules.gni") |
| } |
| |
| ios_app(target_name) { |
| # TODO(GYP): Make this configurable and only provide a default |
| # that can be overridden. |
| info_plist = "//testing/gtest_ios/unittest-Info.plist" |
| app_name = target_name |
| entitlements_path = "//testing/gtest_ios" |
| code_signing_identity = "" |
| testonly = true |
| |
| # See above call. |
| set_sources_assignment_filter([]) |
| |
| forward_variables_from(invoker, |
| [ |
| "all_dependent_configs", |
| "allow_circular_includes_from", |
| "cflags", |
| "cflags_c", |
| "cflags_cc", |
| "cflags_objc", |
| "cflags_objcc", |
| "check_includes", |
| "configs", |
| "data", |
| "data_deps", |
| "defines", |
| "include_dirs", |
| "ldflags", |
| "libs", |
| "output_extension", |
| "output_name", |
| "public", |
| "public_configs", |
| "public_deps", |
| "sources", |
| "visibility", |
| ]) |
| |
| if (defined(invoker.deps)) { |
| deps = invoker.deps |
| } else { |
| deps = [] |
| } |
| deps += [ |
| # All shared libraries must have the sanitizer deps to properly link in |
| # asan mode (this target will be empty in other cases). |
| "//build/config/sanitizers:deps", |
| ] |
| } |
| } else { |
| executable(target_name) { |
| forward_variables_from(invoker, "*") |
| |
| testonly = true |
| |
| if (!defined(invoker.deps)) { |
| deps = [] |
| } |
| deps += [ |
| # All shared libraries must have the sanitizer deps to properly link in |
| # asan mode (this target will be empty in other cases). |
| "//build/config/sanitizers:deps", |
| |
| # Give tests the default manifest on Windows (a no-op elsewhere). |
| "//build/win:default_exe_manifest", |
| ] |
| } |
| } |
| } |