# 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("//v8/gni/v8.gni") import("//v8/snapshot_toolchain.gni") # Variables: # test_type: One of 'webui', 'unit' or 'extension' indicating what # environment the test runs under. # sources: List of javascript test source files. # deps_js: Javascript file with closure library dependencies. Only needed # if the test fixtures use closureModuleDeps. # gen_include_files: List of javascript files used in GEN_INCLUDE calls # in the tests and therefore considered input to the C++ generation step. # extra_js_files: List of javascript files needed by the test at runtime, # typically listed in the extraLibraries member of the test fixture. # defines # deps # visibility 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 # The mapping from sources to the copied version. copied_source_pattern = "$root_out_dir/test_data/{{source_root_relative_dir}}/{{source_file_part}}" gen_source_pattern = "{{source_gen_dir}}/{{source_name_part}}-gen.cc" action_foreach(action_name) { testonly = true visibility = [ ":$source_set_name" ] script = "//tools/gypv8sh.py" sources = invoker.sources v8_shell_path = get_label_info("//v8:v8_shell($v8_snapshot_toolchain)", "root_out_dir") + "/v8_shell" if (host_os == "win") { v8_shell_path += ".exe" } input_js = [ "//chrome/third_party/mock4js/mock4js.js", "//chrome/test/data/webui/test_api.js", "//chrome/test/base/js2gtest.js", ] inputs = [ v8_shell_path ] + input_js if (defined(invoker.deps_js)) { inputs += [ invoker.deps_js ] } if (defined(invoker.gen_include_files)) { inputs += invoker.gen_include_files } # Outputs. The script will copy the source files to the output directory, # which then must be treated as runtime data. The generated .cc file isn't # data, it will be compiled in a step below. outputs = [ copied_source_pattern, gen_source_pattern, ] data = process_file_template(sources, [ copied_source_pattern ]) 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(v8_shell_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}}", gen_source_pattern, rebase_path(copied_source_pattern, root_build_dir), ] deps = [ "//v8:v8_shell($v8_snapshot_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 = [ copied_source_pattern, ] } } source_set(source_set_name) { testonly = true forward_variables_from(invoker, [ "defines", "visibility", ]) sources = get_target_outputs(":$action_name") 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", ] } } }