Index: chrome/test/base/js2gtest.gni |
diff --git a/chrome/test/base/js2gtest.gni b/chrome/test/base/js2gtest.gni |
new file mode 100644 |
index 0000000000000000000000000000000000000000..35f142f6a63294c7a7947a2a1cf79acb3c32dcb4 |
--- /dev/null |
+++ b/chrome/test/base/js2gtest.gni |
@@ -0,0 +1,108 @@ |
+# 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. |
+ |
+import("//build/module_args/v8.gni") |
+ |
+template("js2gtest") { |
+ assert(defined(invoker.test_type) && |
+ (invoker.test_type == "webui" || invoker.test_type == "unit" || |
+ invoker.test_type == "extension")) |
+ action_name = target_name + "_action" |
+ source_set_name = target_name |
+ |
+ action_foreach(action_name) { |
+ testonly = true |
+ visibility = [ ":$source_set_name" ] |
+ script = "//tools/gypv8sh.py" |
+ |
+ sources = invoker.sources |
+ |
+ d8_path = get_label_info("//v8:d8($host_toolchain)", "root_out_dir") + "/d8" |
+ if (is_win) { |
+ d8_path += ".exe" |
+ } |
+ |
+ input_js = [ |
+ "//chrome/third_party/mock4js/mock4js.js", |
+ "//chrome/test/data/webui/test_api.js", |
+ "//chrome/test/base/js2gtest.js", |
+ ] |
+ inputs = [ d8_path ] + input_js |
+ if (defined(invoker.deps_js)) { |
+ inputs += [ invoker.deps_js ] |
+ } |
+ |
+ outputs = [ |
+ "$target_gen_dir/{{source_name_part}}-gen.cc", |
+ "$root_out_dir/test_data/{{source_root_relative_dir}}/{{source_file_part}}", |
+ ] |
+ |
+ args = [] |
+ if (defined(invoker.deps_js)) { |
+ args += [ |
+ "--deps_js", |
+ rebase_path(invoker.deps_js, root_build_dir), |
+ ] |
+ } |
+ args += [ |
+ # Need "./" for script to find binary (cur dir is not on path). |
+ "./" + rebase_path(d8_path, root_build_dir), |
+ ] |
+ args += rebase_path(input_js, root_build_dir) + [ invoker.test_type ] |
+ if (v8_use_external_startup_data) { |
+ args += [ "--external=y" ] |
+ } else { |
+ args += [ "--external=n" ] |
+ } |
+ args += [ |
+ "{{source}}", |
+ "{{source_root_relative_dir}}/{{source_file_part}}", |
+ ] |
+ args += rebase_path(outputs, root_build_dir) |
+ |
+ deps = [ |
+ "//v8:d8($host_toolchain)", |
+ ] |
+ if (defined(invoker.deps)) { |
+ deps += invoker.deps |
+ } |
+ } |
+ |
+ if (defined(invoker.extra_js_files)) { |
+ copy_target_name = target_name + "_copy" |
+ copy(copy_target_name) { |
+ visibility = [ ":$source_set_name" ] |
+ sources = invoker.extra_js_files |
+ outputs = [ |
+ "$root_out_dir/test_data/{{source_root_relative_dir}}/{{source_file_part}}", |
+ ] |
+ } |
+ } |
+ |
+ source_set(source_set_name) { |
+ testonly = true |
+ if (defined(invoker.visibility)) { |
+ visibility = invoker.visibility |
+ } |
+ sources = get_target_outputs(":$action_name") |
+ if (defined(invoker.defines)) { |
+ defines = invoker.defines |
+ } |
+ deps = [ |
+ ":$action_name", |
+ |
+ # The generator implicitly makes includes from these targets. |
+ "//chrome/test:test_support", |
+ "//testing/gmock", |
+ "//testing/gtest", |
+ "//url", |
+ ] |
+ if (defined(invoker.deps)) { |
+ deps += invoker.deps |
+ } |
+ if (defined(invoker.extra_js_files)) { |
+ data_deps = [ ":$copy_target_name" ] |
+ } |
+ } |
+} |