# 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 # See above call. set_sources_assignment_filter([]) testonly = true if (defined(invoker.all_dependent_configs)) { all_dependent_configs = invoker.all_dependent_configs } if (defined(invoker.allow_circular_includes_from)) { allow_circular_includes_from = invoker.allow_circular_includes_from } if (defined(invoker.cflags)) { cflags = invoker.cflags } if (defined(invoker.cflags_c)) { cflags_c = invoker.cflags_c } if (defined(invoker.cflags_cc)) { cflags_cc = invoker.cflags_cc } if (defined(invoker.cflags_objc)) { cflags_objc = invoker.cflags_objc } if (defined(invoker.cflags_objcc)) { cflags_objcc = invoker.cflags_objcc } if (defined(invoker.check_includes)) { check_includes = invoker.check_includes } if (defined(invoker.data)) { data = invoker.data } if (defined(invoker.data_deps)) { data_deps = invoker.data_deps } if (defined(invoker.datadeps)) { datadeps = invoker.datadeps } if (defined(invoker.defines)) { defines = invoker.defines } deps = [] if (!defined(invoker.use_launcher) || invoker.use_launcher) { deps += [ "//testing/android/native_test:native_test_native_code" ] } if (defined(invoker.deps)) { deps += invoker.deps } if (defined(invoker.direct_dependent_configs)) { direct_dependent_configs = invoker.direct_dependent_configs } if (defined(invoker.forward_dependent_configs_from)) { forward_dependent_configs_from = invoker.forward_dependent_configs_from } if (defined(invoker.include_dirs)) { include_dirs = invoker.include_dirs } if (defined(invoker.ldflags)) { ldflags = invoker.ldflags } if (defined(invoker.lib_dirs)) { lib_dirs = invoker.lib_dirs } if (defined(invoker.libs)) { libs = invoker.libs } if (defined(invoker.output_extension)) { output_extension = invoker.output_extension } if (defined(invoker.output_name)) { output_name = invoker.output_name } if (defined(invoker.public)) { public = invoker.public } if (defined(invoker.public_configs)) { public_configs = invoker.public_configs } if (defined(invoker.public_deps)) { public_deps = invoker.public_deps } if (defined(invoker.sources)) { sources = invoker.sources } if (defined(invoker.visibility)) { visibility = invoker.visibility } } unittest_apk(apk_name) { 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_deps)) { deps += invoker.apk_deps } 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 } } group(target_name) { testonly = true datadeps = [ ":$test_runner_script_name", ] deps = [ ":$library_name", ":$apk_name", ] } } else { executable(target_name) { # See above. configs = [] # Prevent list overwriting warning. configs = invoker.configs # See above call. set_sources_assignment_filter([]) testonly = true if (defined(invoker.all_dependent_configs)) { all_dependent_configs = invoker.all_dependent_configs } if (defined(invoker.allow_circular_includes_from)) { allow_circular_includes_from = invoker.allow_circular_includes_from } if (defined(invoker.cflags)) { cflags = invoker.cflags } if (defined(invoker.cflags_c)) { cflags_c = invoker.cflags_c } if (defined(invoker.cflags_cc)) { cflags_cc = invoker.cflags_cc } if (defined(invoker.cflags_objc)) { cflags_objc = invoker.cflags_objc } if (defined(invoker.cflags_objcc)) { cflags_objcc = invoker.cflags_objcc } if (defined(invoker.check_includes)) { check_includes = invoker.check_includes } if (defined(invoker.data)) { data = invoker.data } if (defined(invoker.data_deps)) { data_deps = invoker.data_deps } if (defined(invoker.datadeps)) { datadeps = invoker.datadeps } if (defined(invoker.defines)) { defines = invoker.defines } # All shared libraries must have the sanitizer deps to properly link in # asan mode (this target will be empty in other cases). if (defined(invoker.deps)) { deps = invoker.deps + [ "//build/config/sanitizers:deps" ] } else { deps = [ "//build/config/sanitizers:deps", ] } if (defined(invoker.direct_dependent_configs)) { direct_dependent_configs = invoker.direct_dependent_configs } if (defined(invoker.forward_dependent_configs_from)) { forward_dependent_configs_from = invoker.forward_dependent_configs_from } if (defined(invoker.include_dirs)) { include_dirs = invoker.include_dirs } if (defined(invoker.ldflags)) { ldflags = invoker.ldflags } if (defined(invoker.lib_dirs)) { lib_dirs = invoker.lib_dirs } if (defined(invoker.libs)) { libs = invoker.libs } if (defined(invoker.output_extension)) { output_extension = invoker.output_extension } if (defined(invoker.output_name)) { output_name = invoker.output_name } if (defined(invoker.public)) { public = invoker.public } if (defined(invoker.public_configs)) { public_configs = invoker.public_configs } if (defined(invoker.public_deps)) { public_deps = invoker.public_deps } if (defined(invoker.sources)) { sources = invoker.sources } if (defined(invoker.visibility)) { visibility = invoker.visibility } } } }