| # 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" ] |
| } |
| } |
| } |