| """Starlark tests for `rust_toolchain.opt_level`""" |
| |
| load("@bazel_skylib//lib:unittest.bzl", "analysistest") |
| load("@bazel_skylib//rules:write_file.bzl", "write_file") |
| load("//rust:defs.bzl", "rust_binary") |
| load( |
| "//test/unit:common.bzl", |
| "assert_action_mnemonic", |
| "assert_argv_contains", |
| ) |
| |
| def _opt_level_test_impl(ctx, expected_level): |
| env = analysistest.begin(ctx) |
| target = analysistest.target_under_test(env) |
| |
| action = target.actions[0] |
| assert_action_mnemonic(env, action, "Rustc") |
| |
| assert_argv_contains(env, action, "--codegen=opt-level={}".format(expected_level)) |
| return analysistest.end(env) |
| |
| def _opt_level_for_dbg_test_impl(ctx): |
| return _opt_level_test_impl(ctx, "0") |
| |
| _opt_level_for_dbg_test = analysistest.make( |
| _opt_level_for_dbg_test_impl, |
| config_settings = { |
| "//command_line_option:compilation_mode": "dbg", |
| }, |
| ) |
| |
| def _opt_level_for_fastbuild_test_impl(ctx): |
| return _opt_level_test_impl(ctx, "0") |
| |
| _opt_level_for_fastbuild_test = analysistest.make( |
| _opt_level_for_fastbuild_test_impl, |
| config_settings = { |
| "//command_line_option:compilation_mode": "fastbuild", |
| }, |
| ) |
| |
| def _opt_level_for_opt_test_impl(ctx): |
| return _opt_level_test_impl(ctx, "3") |
| |
| _opt_level_for_opt_test = analysistest.make( |
| _opt_level_for_opt_test_impl, |
| config_settings = { |
| "//command_line_option:compilation_mode": "opt", |
| }, |
| ) |
| |
| def opt_level_test_suite(name): |
| """Entry-point macro called from the BUILD file. |
| |
| Args: |
| name (str): The name of the test suite. |
| """ |
| write_file( |
| name = "bin_main", |
| out = "main.rs", |
| content = [ |
| "fn main() {}", |
| "", |
| ], |
| ) |
| |
| rust_binary( |
| name = "bin", |
| srcs = [":main.rs"], |
| edition = "2021", |
| ) |
| |
| _opt_level_for_dbg_test( |
| name = "opt_level_for_dbg_test", |
| target_under_test = ":bin", |
| ) |
| |
| _opt_level_for_fastbuild_test( |
| name = "opt_level_for_fastbuild_test", |
| target_under_test = ":bin", |
| ) |
| |
| _opt_level_for_opt_test( |
| name = "opt_level_for_opt_test", |
| target_under_test = ":bin", |
| ) |
| |
| native.test_suite( |
| name = name, |
| tests = [ |
| ":opt_level_for_dbg_test", |
| ":opt_level_for_fastbuild_test", |
| ":opt_level_for_opt_test", |
| ], |
| ) |