1"""Starlark unit tests for the bootstrap process wrapper"""
2
3load("@bazel_skylib//lib:unittest.bzl", "analysistest")
4load("//test/unit:common.bzl", "assert_action_mnemonic")
5
6def _enable_sh_toolchain_test_impl(ctx):
7    env = analysistest.begin(ctx)
8    target = analysistest.target_under_test(env)
9
10    if ctx.attr.expected_ext == ".bat":
11        assert_action_mnemonic(env, target.actions[0], "ExecutableSymlink")
12    else:
13        assert_action_mnemonic(env, target.actions[0], "TemplateExpand")
14
15    return analysistest.end(env)
16
17_enable_sh_toolchain_test = analysistest.make(
18    _enable_sh_toolchain_test_impl,
19    config_settings = {
20        str(Label("//rust/settings:experimental_use_sh_toolchain_for_bootstrap_process_wrapper")): True,
21    },
22    attrs = {
23        "expected_ext": attr.string(
24            doc = "The expected extension for the bootstrap script.",
25            mandatory = True,
26            values = [
27                ".bat",
28                ".sh",
29            ],
30        ),
31    },
32)
33
34def _disable_sh_toolchain_test_impl(ctx):
35    env = analysistest.begin(ctx)
36    target = analysistest.target_under_test(env)
37
38    assert_action_mnemonic(env, target.actions[0], "ExecutableSymlink")
39
40    return analysistest.end(env)
41
42_disable_sh_toolchain_test = analysistest.make(
43    _disable_sh_toolchain_test_impl,
44    config_settings = {
45        str(Label("//rust/settings:experimental_use_sh_toolchain_for_bootstrap_process_wrapper")): False,
46    },
47)
48
49def process_wrapper_bootstrap_test_suite(name, **kwargs):
50    """Entry-point macro called from the BUILD file.
51
52    Args:
53        name (str): Name of the macro.
54        **kwargs (dict): Additional keyword arguments.
55    """
56
57    _enable_sh_toolchain_test(
58        name = "enable_sh_toolchain_test",
59        target_under_test = Label("//util/process_wrapper:bootstrap_process_wrapper"),
60        expected_ext = select({
61            "@platforms//os:windows": ".bat",
62            "//conditions:default": ".sh",
63        }),
64    )
65
66    _disable_sh_toolchain_test(
67        name = "disable_sh_toolchain_test",
68        target_under_test = Label("//util/process_wrapper:bootstrap_process_wrapper"),
69    )
70
71    native.test_suite(
72        name = name,
73        tests = [
74            ":disable_sh_toolchain_test",
75            ":enable_sh_toolchain_test",
76        ],
77        **kwargs
78    )
79