Index: testing/test.gni |
diff --git a/testing/test.gni b/testing/test.gni |
index 8434fc5b3b48ca2fea3d282587f26e354e4c5d32..aadd9cc65ece868382f1aa055439e33741739943 100644 |
--- a/testing/test.gni |
+++ b/testing/test.gni |
@@ -6,6 +6,56 @@ |
# TEST SETUP |
# ============================================================================== |
+template("_gen_isolate") { |
+ testonly = true |
+ _runtime_deps_file = "$target_gen_dir/$target_name.runtime_deps" |
+ group("${target_name}__write_deps") { |
+ forward_variables_from(invoker, |
+ [ |
+ "data", |
+ "data_deps", |
+ "deps", |
+ "public_deps", |
+ ]) |
+ write_runtime_deps = _runtime_deps_file |
+ } |
+ |
+ action(target_name) { |
+ script = "//testing/generate_isolate.py" |
+ outputs = [ |
+ invoker.output, |
+ ] |
+ args = [ |
+ "--output-directory=.", |
+ "--out-file", |
+ rebase_path(invoker.output, root_build_dir), |
+ "--runtime-deps-file", |
+ rebase_path(_runtime_deps_file, root_build_dir), |
+ ] |
+ if (is_android) { |
+ args += [ "--apply-android-filters" ] |
+ } |
+ if (defined(invoker.apply_device_filters) && invoker.apply_device_filters) { |
+ args += [ "--apply-device-filters" ] |
+ } |
+ _assert_no_odd_data = |
+ defined(invoker.assert_no_odd_data) && invoker.assert_no_odd_data |
+ if (_assert_no_odd_data) { |
+ args += [ "--assert-no-odd-data" ] |
+ } |
+ if (defined(invoker.command)) { |
+ _isolate_dir = get_path_info(invoker.output, "dir") |
+ args += [ |
+ "--command", |
+ rebase_path(invoker.command, _isolate_dir), |
+ ] |
+ } |
+ deps = [ |
+ ":${invoker.target_name}__write_deps", |
+ ] |
+ } |
+} |
+ |
# Define a test as an executable (or apk on Android) with the "testonly" flag |
# set. |
# Variable: |
@@ -30,6 +80,36 @@ template("test") { |
"isolate_file", |
"shard_timeout", |
] |
+ _gen_isolate_vars = [ |
+ "allow_odd_runtime_deps", |
+ "ignore_all_data_deps", |
+ ] |
+ |
+ # TODO(agrieve): Delete all manually passed-in .isolate files now that they |
+ # are unused. http://crbug.com/589318 |
+ assert(!defined(invoker.isolate_file) || invoker.isolate_file != "") # Mark used. |
+ _generate_device_isolate = |
+ !defined(invoker.ignore_all_data_deps) || !invoker.ignore_all_data_deps |
+ |
+ if (_generate_device_isolate) { |
+ _allow_odd_runtime_deps = defined(invoker.allow_odd_runtime_deps) && |
+ invoker.allow_odd_runtime_deps |
+ _device_isolate_path = "$target_gen_dir/$target_name.device.isolate" |
+ _gen_isolate_target_name = "${target_name}__isolate" |
+ _gen_isolate(_gen_isolate_target_name) { |
+ data_deps = [] |
+ forward_variables_from(invoker, |
+ [ |
+ "data", |
+ "data_deps", |
+ "deps", |
+ "public_deps", |
+ ]) |
+ assert_no_odd_data = !_allow_odd_runtime_deps |
+ output = _device_isolate_path |
+ apply_device_filters = true |
+ } |
+ } |
if (_use_raw_android_executable) { |
_exec_target = "${target_name}__exec" |
@@ -41,7 +121,10 @@ template("test") { |
# Configs will always be defined since we set_defaults in BUILDCONFIG.gn. |
configs = [] |
data_deps = [] |
- forward_variables_from(invoker, "*", [ "extra_dist_files" ]) |
+ forward_variables_from( |
+ invoker, |
+ "*", |
+ _wrapper_script_vars + _gen_isolate_vars + [ "extra_dist_files" ]) |
testonly = true |
# Thanks to the set_defaults() for test(), configs are initialized with |
@@ -86,10 +169,10 @@ template("test") { |
testonly = true |
deps = [] |
- forward_variables_from( |
- invoker, |
- "*", |
- _apk_specific_vars + _wrapper_script_vars + [ "visibility" ]) |
+ forward_variables_from(invoker, |
+ "*", |
+ _apk_specific_vars + _wrapper_script_vars + |
+ _gen_isolate_vars + [ "visibility" ]) |
if (!defined(invoker.use_default_launcher) || |
invoker.use_default_launcher) { |
@@ -123,6 +206,12 @@ template("test") { |
"${_output_name}_incremental__test_runner_script" |
test_runner_script(_incremental_test_runner_target) { |
forward_variables_from(invoker, _wrapper_script_vars) |
+ if (_generate_device_isolate) { |
+ isolate_file = _device_isolate_path |
+ deps = [ |
+ ":$_gen_isolate_target_name", |
+ ] |
+ } |
apk_target = ":$_apk_target" |
test_name = "${_output_name}_incremental" |
test_type = "gtest" |
@@ -143,6 +232,13 @@ template("test") { |
_test_runner_target = "${_output_name}__test_runner_script" |
test_runner_script(_test_runner_target) { |
forward_variables_from(invoker, _wrapper_script_vars) |
+ if (_generate_device_isolate) { |
+ isolate_file = _device_isolate_path |
+ deps = [ |
+ ":$_gen_isolate_target_name", |
+ ] |
+ } |
+ |
if (_use_raw_android_executable) { |
executable_dist_dir = "$root_out_dir/$_dist_target" |
} else { |