blob: 84c51e325f8dac0ddec6a99c16c92facc4869b57 [file] [log] [blame]
qsrc6c612c2015-01-13 22:07:481# Copyright 2015 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
qsrfb5251d12015-01-21 15:57:224
5# ==============================================================================
6# TEST SETUP
7# ==============================================================================
8
9# Define a test as an executable (or apk on Android) with the "testonly" flag
10# set.
agrieve62ab00282016-04-05 02:03:4511# Variable:
12# use_raw_android_executable: Use executable() rather than android_apk().
qsrfb5251d12015-01-21 15:57:2213template("test") {
14 if (is_android) {
15 import("//build/config/android/config.gni")
16 import("//build/config/android/rules.gni")
17
agrieve62ab00282016-04-05 02:03:4518 _use_raw_android_executable = defined(invoker.use_raw_android_executable) &&
19 invoker.use_raw_android_executable
qsrfb5251d12015-01-21 15:57:2220
agrieve67855de2016-03-30 14:46:0121 # output_name is used to allow targets with the same name but in different
22 # packages to still produce unique runner scripts.
23 _output_name = invoker.target_name
mikecase56d80d72015-06-03 00:57:2624 if (defined(invoker.output_name)) {
agrieve67855de2016-03-30 14:46:0125 _output_name = invoker.output_name
mikecase56d80d72015-06-03 00:57:2626 }
agrieve62ab00282016-04-05 02:03:4527
agrieve3ac557f02016-04-12 15:52:0028 _wrapper_script_vars = [
29 "isolate_file",
30 "shard_timeout",
31 ]
32
agrieve62ab00282016-04-05 02:03:4533 if (_use_raw_android_executable) {
34 _exec_target = "${target_name}__exec"
35 _dist_target = "${target_name}__dist"
36 _exec_output =
37 "$target_out_dir/${invoker.target_name}/${invoker.target_name}"
38
39 executable(_exec_target) {
40 # Configs will always be defined since we set_defaults in BUILDCONFIG.gn.
41 configs = []
42 data_deps = []
43 forward_variables_from(invoker, "*", [ "extra_dist_files" ])
44 testonly = true
45
46 # Thanks to the set_defaults() for test(), configs are initialized with
47 # the default shared_library configs rather than executable configs.
48 configs -= [
49 "//build/config:shared_library_config",
50 "//build/config/android:hide_native_jni_exports",
51 ]
52 configs += [ "//build/config:executable_config" ]
53
54 # Don't output to the root or else conflict with the group() below.
55 output_name = rebase_path(_exec_output, root_out_dir)
56 if (is_component_build || is_asan) {
57 data_deps += [ "//build/android:cpplib_stripped" ]
58 }
59 }
60
61 create_native_executable_dist(_dist_target) {
62 testonly = true
63 dist_dir = "$root_out_dir/$target_name"
64 binary = _exec_output
65 deps = [
66 ":$_exec_target",
67 ]
68 if (defined(invoker.extra_dist_files)) {
69 extra_files = invoker.extra_dist_files
70 }
71 }
72 } else {
73 _library_target = "_${target_name}__library"
74 _apk_target = "${target_name}_apk"
75 _apk_specific_vars = [
76 "android_manifest",
77 "enable_multidex",
78 "use_default_launcher",
79 "write_asset_list",
80 ]
81 shared_library(_library_target) {
82 # Configs will always be defined since we set_defaults in BUILDCONFIG.gn.
83 configs = [] # Prevent list overwriting warning.
84 configs = invoker.configs
85 testonly = true
86
87 deps = []
agrieve3ac557f02016-04-12 15:52:0088 forward_variables_from(
89 invoker,
90 "*",
91 _apk_specific_vars + _wrapper_script_vars + [ "visibility" ])
agrieve62ab00282016-04-05 02:03:4592
93 if (!defined(invoker.use_default_launcher) ||
94 invoker.use_default_launcher) {
95 deps += [ "//testing/android/native_test:native_test_native_code" ]
96 }
97 }
98 unittest_apk(_apk_target) {
99 forward_variables_from(invoker, _apk_specific_vars + [ "deps" ])
100 unittests_dep = ":$_library_target"
101 apk_name = invoker.target_name
102 if (defined(invoker.output_name)) {
103 apk_name = invoker.output_name
104 unittests_binary = "lib${apk_name}.so"
105 install_script_name = "install_${invoker.output_name}"
106 }
107 deps += [ ":$_library_target" ]
108 }
109
110 # Incremental test targets work only for .apks.
111 _incremental_test_runner_target =
112 "${_output_name}_incremental__test_runner_script"
113 test_runner_script(_incremental_test_runner_target) {
agrieve3ac557f02016-04-12 15:52:00114 forward_variables_from(invoker, _wrapper_script_vars)
agrieve62ab00282016-04-05 02:03:45115 apk_target = ":$_apk_target"
116 test_name = "${_output_name}_incremental"
117 test_type = "gtest"
118 test_suite = _output_name
119 incremental_install = true
120 }
121 group("${target_name}_incremental") {
122 testonly = true
123 datadeps = [
124 ":$_incremental_test_runner_target",
125 ]
126 deps = [
127 ":${_apk_target}_incremental",
128 ]
129 }
130 }
131
agrieve67855de2016-03-30 14:46:01132 _test_runner_target = "${_output_name}__test_runner_script"
133 test_runner_script(_test_runner_target) {
agrieve3ac557f02016-04-12 15:52:00134 forward_variables_from(invoker, _wrapper_script_vars)
agrieve62ab00282016-04-05 02:03:45135 if (_use_raw_android_executable) {
136 executable_dist_dir = "$root_out_dir/$_dist_target"
137 } else {
138 apk_target = ":$_apk_target"
139 }
agrieve67855de2016-03-30 14:46:01140 test_name = _output_name
mikecase56d80d72015-06-03 00:57:26141 test_type = "gtest"
agrieve67855de2016-03-30 14:46:01142 test_suite = _output_name
mikecase56d80d72015-06-03 00:57:26143 }
144
qsrfb5251d12015-01-21 15:57:22145 group(target_name) {
146 testonly = true
agrieve62ab00282016-04-05 02:03:45147 deps = [
agrieve67855de2016-03-30 14:46:01148 ":$_test_runner_target",
mikecase56d80d72015-06-03 00:57:26149 ]
agrieve62ab00282016-04-05 02:03:45150 if (_use_raw_android_executable) {
151 deps += [ ":$_dist_target" ]
152 } else {
153 deps += [ ":$_apk_target" ]
154 }
agrieve1a02e582015-10-15 21:35:39155 }
jbudoricked0c2082016-02-02 04:30:39156
157 # TODO(GYP): Delete this after we've converted everything to GN.
158 # The _run targets exist only for compatibility w/ GYP.
159 group("${target_name}_apk_run") {
160 testonly = true
161 deps = [
agrieve67855de2016-03-30 14:46:01162 ":${invoker.target_name}",
jbudoricked0c2082016-02-02 04:30:39163 ]
164 }
dpranke2a294622015-08-07 05:23:01165 } else if (is_ios) {
sdefresne012857872016-03-16 10:55:37166 import("//build/config/ios/rules.gni")
167
168 _test_target = target_name
169 _resources_bundle_data = target_name + "_resources_bundle_data"
170
171 bundle_data(_resources_bundle_data) {
sdefresne75f7c3b2016-03-18 11:51:59172 visibility = [
173 ":${_test_target}",
174 ":${_test_target}_generate_executable",
175 ]
sdefresne012857872016-03-16 10:55:37176 sources = [
177 "//testing/gtest_ios/Default.png",
178 ]
179 outputs = [
180 "{{bundle_resources_dir}}/{{source_file_part}}",
181 ]
dpranke2a294622015-08-07 05:23:01182 }
183
sdefresne1a9694422016-04-12 13:53:44184 ios_app_bundle(_test_target) {
dpranke2a294622015-08-07 05:23:01185 # TODO(GYP): Make this configurable and only provide a default
186 # that can be overridden.
187 info_plist = "//testing/gtest_ios/unittest-Info.plist"
188 app_name = target_name
189 entitlements_path = "//testing/gtest_ios"
190 code_signing_identity = ""
191 testonly = true
sdefresne012857872016-03-16 10:55:37192 extra_substitutions = [ "BUNDLE_ID_TEST_NAME=$app_name" ]
dpranke2a294622015-08-07 05:23:01193
194 # See above call.
195 set_sources_assignment_filter([])
196
sdefresne012857872016-03-16 10:55:37197 forward_variables_from(invoker, "*")
dpranke2a294622015-08-07 05:23:01198
sdefresne012857872016-03-16 10:55:37199 if (!defined(deps)) {
dpranke2a294622015-08-07 05:23:01200 deps = []
201 }
202 deps += [
sdefresne75f7c3b2016-03-18 11:51:59203 ":$_resources_bundle_data",
204
dpranke2a294622015-08-07 05:23:01205 # All shared libraries must have the sanitizer deps to properly link in
206 # asan mode (this target will be empty in other cases).
207 "//build/config/sanitizers:deps",
208 ]
dpranke2a294622015-08-07 05:23:01209 }
qsrfb5251d12015-01-21 15:57:22210 } else {
211 executable(target_name) {
agrieve67855de2016-03-30 14:46:01212 deps = []
brettwa0902982015-08-04 19:50:33213 forward_variables_from(invoker, "*")
qsrfb5251d12015-01-21 15:57:22214
215 testonly = true
brettw2e2220c2015-07-21 18:56:35216 deps += [
217 # All shared libraries must have the sanitizer deps to properly link in
218 # asan mode (this target will be empty in other cases).
219 "//build/config/sanitizers:deps",
220
221 # Give tests the default manifest on Windows (a no-op elsewhere).
222 "//build/win:default_exe_manifest",
223 ]
qsrfb5251d12015-01-21 15:57:22224 }
jbudorick3c0ef43092016-02-03 23:40:16225
226 # TODO(GYP): Delete this after we've converted everything to GN.
227 # The _run targets exist only for compatibility with GYP.
228 group("${target_name}_run") {
229 testonly = true
230 deps = [
agrieve67855de2016-03-30 14:46:01231 ":${invoker.target_name}",
jbudorick3c0ef43092016-02-03 23:40:16232 ]
233 }
qsrfb5251d12015-01-21 15:57:22234 }
235}