# Copyright 2021 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Defines a Rust unit tests group. # # This generates a script that wraps 1 or more Rust unit test executables. # Such script would typically wrap all Rust unit tests from a set of related # crates (e.g. all crates under //base). # # The script is primarily useful to enable running the tests on Chromium bots, # but it is also a convenience for having a single entry point for running # the tests locally (without having to manually fan out to all the individual # executables). # # Parameters: # # deps - Will be recursively traversed to discover all the Rust unit test # executables. # # Example usage: # # # This will generate a script at out/Default/bin/run_foo_tests (or # # run_foo_tests.bat on Windows) that wraps the executables containing # # native Rust unit tests: # # * out/Default/foo_crate1_unittests # # * out/Default/foo_mixed_source_set2_rs_unittests # # * out/Default/foo_mixed_source_set3_rs_unittests # rust_unit_tests_group("foo_tests") { # deps = [ # "foo_crate1", # "foo_mixed_source_set2", # "foo_mixed_source_set3", # ] # } template("rust_unit_tests_group") { assert(defined(invoker.deps), "deps must be listed") # As noted in the top-level comment of //testing/buildbot/gn_isolate_map.pyl # the script *must* be in output_dir/bin/run_$target (or # output_dir\bin\run_$target.bat on Windows). bat = "" if (is_win) { bat = ".bat" } _script_filepath = "$root_out_dir/bin/run_${target_name}${bat}" # Gathering metadata provided by the rust_unit_test gni template from all of # our dependencies. _metadata_target_name = "${target_name}_metadata" _metadata_filepath = "$root_build_dir/${target_name}__rust_unittest_exes.txt" generated_file(_metadata_target_name) { forward_variables_from(invoker, [ "deps" ], []) testonly = true outputs = [ _metadata_filepath ] data_keys = [ "rust_unit_test_executables" ] } # Generating a script that can run all of the wrapped Rust unit test # executables. action(target_name) { forward_variables_from(invoker, "*", []) testonly = true script = "//testing/scripts/rust/generate_script.py" inputs = [ _metadata_filepath ] outputs = [ _script_filepath ] data = [ _script_filepath ] if (!defined(data_deps)) { data_deps = [] } data_deps += [ "//testing/scripts/rust" ] data_deps += deps deps += [ ":$_metadata_target_name" ] args = [ "--rust-test-executables", rebase_path(_metadata_filepath, root_build_dir), "--exe-dir", rebase_path(root_out_dir, root_build_dir), "--script-path", rebase_path(_script_filepath, root_build_dir), ] if (is_win) { args += [ "--make-bat" ] } } }