[go: nahoru, domu]

blob: 78a8a37ede4a2ea6e5898939448b6d7c33a0cd12 [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
agrievee41ae190d2016-04-25 14:12:519template("_gen_isolate") {
10 testonly = true
11 _runtime_deps_file = "$target_gen_dir/$target_name.runtime_deps"
12 group("${target_name}__write_deps") {
13 forward_variables_from(invoker,
14 [
15 "data",
16 "data_deps",
17 "deps",
18 "public_deps",
19 ])
20 write_runtime_deps = _runtime_deps_file
21 }
22
23 action(target_name) {
24 script = "//testing/generate_isolate.py"
agrieve6bc322a2016-04-26 19:11:2525 inputs = [
26 _runtime_deps_file,
27 ]
agrievee41ae190d2016-04-25 14:12:5128 outputs = [
29 invoker.output,
30 ]
31 args = [
32 "--output-directory=.",
33 "--out-file",
34 rebase_path(invoker.output, root_build_dir),
35 "--runtime-deps-file",
36 rebase_path(_runtime_deps_file, root_build_dir),
37 ]
38 if (is_android) {
39 args += [ "--apply-android-filters" ]
40 }
41 if (defined(invoker.apply_device_filters) && invoker.apply_device_filters) {
42 args += [ "--apply-device-filters" ]
43 }
44 _assert_no_odd_data =
45 defined(invoker.assert_no_odd_data) && invoker.assert_no_odd_data
46 if (_assert_no_odd_data) {
47 args += [ "--assert-no-odd-data" ]
48 }
49 if (defined(invoker.command)) {
50 _isolate_dir = get_path_info(invoker.output, "dir")
51 args += [
52 "--command",
53 rebase_path(invoker.command, _isolate_dir),
54 ]
55 }
56 deps = [
57 ":${invoker.target_name}__write_deps",
58 ]
59 }
60}
61
qsrfb5251d12015-01-21 15:57:2262# Define a test as an executable (or apk on Android) with the "testonly" flag
63# set.
agrieve62ab00282016-04-05 02:03:4564# Variable:
65# use_raw_android_executable: Use executable() rather than android_apk().
qsrfb5251d12015-01-21 15:57:2266template("test") {
67 if (is_android) {
68 import("//build/config/android/config.gni")
69 import("//build/config/android/rules.gni")
70
agrieve62ab00282016-04-05 02:03:4571 _use_raw_android_executable = defined(invoker.use_raw_android_executable) &&
72 invoker.use_raw_android_executable
qsrfb5251d12015-01-21 15:57:2273
agrieve67855de2016-03-30 14:46:0174 # output_name is used to allow targets with the same name but in different
75 # packages to still produce unique runner scripts.
76 _output_name = invoker.target_name
mikecase56d80d72015-06-03 00:57:2677 if (defined(invoker.output_name)) {
agrieve67855de2016-03-30 14:46:0178 _output_name = invoker.output_name
mikecase56d80d72015-06-03 00:57:2679 }
agrieve62ab00282016-04-05 02:03:4580
agrieveb355ad152016-04-19 03:45:2381 _test_runner_target = "${_output_name}__test_runner_script"
agrievefc41d882016-04-27 20:39:5982 _wrapper_script_vars = [ "shard_timeout" ]
agrievee41ae190d2016-04-25 14:12:5183 _gen_isolate_vars = [
84 "allow_odd_runtime_deps",
85 "ignore_all_data_deps",
86 ]
agrievee41ae190d2016-04-25 14:12:5187 _generate_device_isolate =
88 !defined(invoker.ignore_all_data_deps) || !invoker.ignore_all_data_deps
89
90 if (_generate_device_isolate) {
91 _allow_odd_runtime_deps = defined(invoker.allow_odd_runtime_deps) &&
92 invoker.allow_odd_runtime_deps
93
94 # The device isolate is needed at runtime, so it cannot go in
95 # target_gen_dir, as builder/tester configurations do not include it.
96 _target_dir_name = get_label_info(":$target_name", "dir")
97 _device_isolate_path = "$root_out_dir/gen.runtime/$_target_dir_name/$target_name.device.isolate"
98 _gen_isolate_target_name = "${target_name}__isolate"
99 _gen_isolate(_gen_isolate_target_name) {
agrievee41ae190d2016-04-25 14:12:51100 forward_variables_from(invoker,
101 [
102 "data",
103 "data_deps",
104 "deps",
105 "public_deps",
106 ])
107 assert_no_odd_data = !_allow_odd_runtime_deps
108 output = _device_isolate_path
109 apply_device_filters = true
110 }
111 }
agrieve3ac557f02016-04-12 15:52:00112
agrieve62ab00282016-04-05 02:03:45113 if (_use_raw_android_executable) {
114 _exec_target = "${target_name}__exec"
115 _dist_target = "${target_name}__dist"
116 _exec_output =
117 "$target_out_dir/${invoker.target_name}/${invoker.target_name}"
118
119 executable(_exec_target) {
120 # Configs will always be defined since we set_defaults in BUILDCONFIG.gn.
121 configs = []
122 data_deps = []
agrievee41ae190d2016-04-25 14:12:51123 forward_variables_from(
124 invoker,
125 "*",
126 _wrapper_script_vars + _gen_isolate_vars + [ "extra_dist_files" ])
agrieve62ab00282016-04-05 02:03:45127 testonly = true
128
129 # Thanks to the set_defaults() for test(), configs are initialized with
130 # the default shared_library configs rather than executable configs.
131 configs -= [
132 "//build/config:shared_library_config",
133 "//build/config/android:hide_native_jni_exports",
134 ]
135 configs += [ "//build/config:executable_config" ]
136
137 # Don't output to the root or else conflict with the group() below.
138 output_name = rebase_path(_exec_output, root_out_dir)
139 if (is_component_build || is_asan) {
140 data_deps += [ "//build/android:cpplib_stripped" ]
141 }
142 }
143
144 create_native_executable_dist(_dist_target) {
145 testonly = true
146 dist_dir = "$root_out_dir/$target_name"
147 binary = _exec_output
148 deps = [
149 ":$_exec_target",
150 ]
151 if (defined(invoker.extra_dist_files)) {
152 extra_files = invoker.extra_dist_files
153 }
154 }
155 } else {
156 _library_target = "_${target_name}__library"
157 _apk_target = "${target_name}_apk"
158 _apk_specific_vars = [
159 "android_manifest",
160 "enable_multidex",
161 "use_default_launcher",
162 "write_asset_list",
163 ]
164 shared_library(_library_target) {
165 # Configs will always be defined since we set_defaults in BUILDCONFIG.gn.
166 configs = [] # Prevent list overwriting warning.
167 configs = invoker.configs
168 testonly = true
169
170 deps = []
agrievee41ae190d2016-04-25 14:12:51171 forward_variables_from(invoker,
172 "*",
173 _apk_specific_vars + _wrapper_script_vars +
174 _gen_isolate_vars + [ "visibility" ])
agrieve62ab00282016-04-05 02:03:45175
176 if (!defined(invoker.use_default_launcher) ||
177 invoker.use_default_launcher) {
178 deps += [ "//testing/android/native_test:native_test_native_code" ]
179 }
180 }
181 unittest_apk(_apk_target) {
182 forward_variables_from(invoker, _apk_specific_vars + [ "deps" ])
183 unittests_dep = ":$_library_target"
184 apk_name = invoker.target_name
185 if (defined(invoker.output_name)) {
186 apk_name = invoker.output_name
187 unittests_binary = "lib${apk_name}.so"
188 install_script_name = "install_${invoker.output_name}"
189 }
190 deps += [ ":$_library_target" ]
agrieveb355ad152016-04-19 03:45:23191
192 # TODO(agrieve): Remove this data_dep once bots don't build the _apk
193 # target (post-GYP).
194 # It's a bit backwards for the apk to depend on the runner script, since
195 # the apk is conceptually a runtime_dep of the script. However, it is
196 # currently necessary because the bots build this _apk target directly
197 # rather than the group() below.
198 data_deps = [
199 ":$_test_runner_target",
200 ]
agrieve62ab00282016-04-05 02:03:45201 }
202
203 # Incremental test targets work only for .apks.
204 _incremental_test_runner_target =
205 "${_output_name}_incremental__test_runner_script"
206 test_runner_script(_incremental_test_runner_target) {
agrieve3ac557f02016-04-12 15:52:00207 forward_variables_from(invoker, _wrapper_script_vars)
agrievee41ae190d2016-04-25 14:12:51208 if (_generate_device_isolate) {
209 isolate_file = _device_isolate_path
210 deps = [
211 ":$_gen_isolate_target_name",
212 ]
213 }
agrieve62ab00282016-04-05 02:03:45214 apk_target = ":$_apk_target"
215 test_name = "${_output_name}_incremental"
216 test_type = "gtest"
217 test_suite = _output_name
218 incremental_install = true
219 }
220 group("${target_name}_incremental") {
221 testonly = true
222 datadeps = [
223 ":$_incremental_test_runner_target",
224 ]
225 deps = [
226 ":${_apk_target}_incremental",
227 ]
228 }
229 }
230
agrieve67855de2016-03-30 14:46:01231 _test_runner_target = "${_output_name}__test_runner_script"
232 test_runner_script(_test_runner_target) {
agrieve3ac557f02016-04-12 15:52:00233 forward_variables_from(invoker, _wrapper_script_vars)
agrievee41ae190d2016-04-25 14:12:51234 if (_generate_device_isolate) {
235 isolate_file = _device_isolate_path
236 deps = [
237 ":$_gen_isolate_target_name",
238 ]
239 }
240
agrieve62ab00282016-04-05 02:03:45241 if (_use_raw_android_executable) {
242 executable_dist_dir = "$root_out_dir/$_dist_target"
243 } else {
244 apk_target = ":$_apk_target"
245 }
agrieve67855de2016-03-30 14:46:01246 test_name = _output_name
mikecase56d80d72015-06-03 00:57:26247 test_type = "gtest"
agrieve67855de2016-03-30 14:46:01248 test_suite = _output_name
mikecase56d80d72015-06-03 00:57:26249 }
250
qsrfb5251d12015-01-21 15:57:22251 group(target_name) {
252 testonly = true
agrieve62ab00282016-04-05 02:03:45253 deps = [
agrieve67855de2016-03-30 14:46:01254 ":$_test_runner_target",
mikecase56d80d72015-06-03 00:57:26255 ]
agrieve62ab00282016-04-05 02:03:45256 if (_use_raw_android_executable) {
257 deps += [ ":$_dist_target" ]
258 } else {
259 deps += [ ":$_apk_target" ]
260 }
agrieve1a02e582015-10-15 21:35:39261 }
jbudoricked0c2082016-02-02 04:30:39262
brettweb7dc6582016-05-24 01:19:43263 # TODO(GYP_GONE): Delete this after we've converted everything to GN.
jbudoricked0c2082016-02-02 04:30:39264 # The _run targets exist only for compatibility w/ GYP.
265 group("${target_name}_apk_run") {
266 testonly = true
267 deps = [
agrieve67855de2016-03-30 14:46:01268 ":${invoker.target_name}",
jbudoricked0c2082016-02-02 04:30:39269 ]
270 }
dpranke2a294622015-08-07 05:23:01271 } else if (is_ios) {
sdefresne012857872016-03-16 10:55:37272 import("//build/config/ios/rules.gni")
273
274 _test_target = target_name
275 _resources_bundle_data = target_name + "_resources_bundle_data"
276
277 bundle_data(_resources_bundle_data) {
sdefresne75f7c3b2016-03-18 11:51:59278 visibility = [
279 ":${_test_target}",
280 ":${_test_target}_generate_executable",
281 ]
sdefresne012857872016-03-16 10:55:37282 sources = [
283 "//testing/gtest_ios/Default.png",
284 ]
285 outputs = [
286 "{{bundle_resources_dir}}/{{source_file_part}}",
287 ]
dpranke2a294622015-08-07 05:23:01288 }
289
sdefresne1a9694422016-04-12 13:53:44290 ios_app_bundle(_test_target) {
brettweb7dc6582016-05-24 01:19:43291 # TODO: Make this configurable and only provide a default that can be
292 # overridden.
dpranke2a294622015-08-07 05:23:01293 info_plist = "//testing/gtest_ios/unittest-Info.plist"
294 app_name = target_name
295 entitlements_path = "//testing/gtest_ios"
296 code_signing_identity = ""
297 testonly = true
sdefresne012857872016-03-16 10:55:37298 extra_substitutions = [ "BUNDLE_ID_TEST_NAME=$app_name" ]
dpranke2a294622015-08-07 05:23:01299
300 # See above call.
301 set_sources_assignment_filter([])
302
sdefresne012857872016-03-16 10:55:37303 forward_variables_from(invoker, "*")
dpranke2a294622015-08-07 05:23:01304
sdefresne012857872016-03-16 10:55:37305 if (!defined(deps)) {
dpranke2a294622015-08-07 05:23:01306 deps = []
307 }
308 deps += [
sdefresne75f7c3b2016-03-18 11:51:59309 ":$_resources_bundle_data",
310
dpranke2a294622015-08-07 05:23:01311 # All shared libraries must have the sanitizer deps to properly link in
312 # asan mode (this target will be empty in other cases).
313 "//build/config/sanitizers:deps",
314 ]
dpranke2a294622015-08-07 05:23:01315 }
qsrfb5251d12015-01-21 15:57:22316 } else {
317 executable(target_name) {
agrieve67855de2016-03-30 14:46:01318 deps = []
brettwa0902982015-08-04 19:50:33319 forward_variables_from(invoker, "*")
qsrfb5251d12015-01-21 15:57:22320
321 testonly = true
brettw2e2220c2015-07-21 18:56:35322 deps += [
323 # All shared libraries must have the sanitizer deps to properly link in
324 # asan mode (this target will be empty in other cases).
325 "//build/config/sanitizers:deps",
326
327 # Give tests the default manifest on Windows (a no-op elsewhere).
328 "//build/win:default_exe_manifest",
jbudorick6b1b037832016-02-03 14:35:10329 ]
330 }
jbudorick3c0ef43092016-02-03 23:40:16331
brettweb7dc6582016-05-24 01:19:43332 # TODO(GYP_GONE): Delete this after we've converted everything to GN.
jbudorick3c0ef43092016-02-03 23:40:16333 # The _run targets exist only for compatibility with GYP.
334 group("${target_name}_run") {
335 testonly = true
336 deps = [
agrieve67855de2016-03-30 14:46:01337 ":${invoker.target_name}",
jbudorick3c0ef43092016-02-03 23:40:16338 ]
339 }
sammc98ecd4a2016-04-29 01:59:21340
341 if (defined(invoker.output_name) && target_name != invoker.output_name) {
342 group("${invoker.output_name}_run") {
343 testonly = true
344 deps = [
345 ":${invoker.target_name}",
346 ]
347 }
348 }
qsrfb5251d12015-01-21 15:57:22349 }
350}