Index: testing/test.gni |
diff --git a/testing/test.gni b/testing/test.gni |
index 50b23dff631dbfd12f490f20fe2a2871179b73b9..9362a78f303cc34b553930e34a54381afbf0bc06 100644 |
--- a/testing/test.gni |
+++ b/testing/test.gni |
@@ -1,3 +1,237 @@ |
# 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_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)) { |
+ test_output_name = invoker.output_name |
+ unittests_binary = "lib${test_output_name}.so" |
+ } |
+ deps = [ |
+ ":$library_name", |
+ ] |
+ if (defined(invoker.apk_deps)) { |
+ deps += invoker.apk_deps |
+ } |
+ } |
+ |
+ group(target_name) { |
+ testonly = true |
+ |
+ 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 |
+ } |
+ } |
+ } |
+} |