| # 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/snapshot_toolchain.gni") |
| import("//v8/gni/v8.gni") |
| |
| # Libraries required to generate the custom test library built with js2gtest. |
| # Changing the size or the order of files in this array also requires changing |
| # src/tools/gypv8sh.py. |
| js2gtest_js_input_libraries = [ |
| "//chrome/third_party/mock4js/mock4js.js", |
| "//chrome/test/data/webui/test_api.js", |
| "//chrome/test/base/js2gtest.js", |
| ] |
| |
| # Additional libraries loaded at test runtime. |
| js2gtest_runtime_js_libraries = [ "//third_party/chaijs/chai.js" ] |
| |
| js2gtest_js_libraries = |
| js2gtest_js_input_libraries + js2gtest_runtime_js_libraries |
| |
| # 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. |
| # data |
| # defines |
| # deps |
| # visibility |
| template("js2gtest") { |
| assert(defined(invoker.test_type) && |
| (invoker.test_type == "webui" || invoker.test_type == "unit" || |
| invoker.test_type == "extension" || |
| invoker.test_type == "mojo_lite_webui")) |
| 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" |
| |
| data = [] |
| if (defined(invoker.data)) { |
| data += invoker.data |
| } |
| |
| 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" |
| } |
| |
| inputs = [ v8_shell_path ] + js2gtest_js_input_libraries |
| 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(js2gtest_js_input_libraries, root_build_dir) + |
| [ invoker.test_type ] |
| if (v8_use_external_startup_data) { |
| args += [ "--external=y" ] |
| } else { |
| args += [ "--external=n" ] |
| } |
| args += [ |
| "{{source}}", |
| rebase_path("//", root_build_dir), # Path to source root. |
| 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 = process_file_template(invoker.sources, [ gen_source_pattern ]) |
| |
| # This empty public header is intentional to remove unnecessary build |
| # dependency. |
| public = [] |
| |
| 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.gen_include_files)) { |
| data += invoker.gen_include_files |
| } |
| if (defined(invoker.extra_js_files)) { |
| data_deps = [ ":$copy_target_name" ] |
| } |
| } |
| } |