xref: /aosp_15_r20/external/bazelbuild-rules_rust/test/unit/compile_data/compile_data_test.bzl (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1"""Unittest to verify compile_data (attribute) propagation"""
2
3load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
4load("//rust:defs.bzl", "rust_common", "rust_doc", "rust_library", "rust_test")
5load(
6    "//test/unit:common.bzl",
7    "assert_action_mnemonic",
8)
9
10def _target_has_compile_data(ctx, expected):
11    env = analysistest.begin(ctx)
12    target = analysistest.target_under_test(env)
13
14    # Extract compile_data from a target expected to have a `CrateInfo` provider
15    crate_info = target[rust_common.crate_info]
16    compile_data = crate_info.compile_data.to_list()
17
18    # Ensure compile data was correctly propagated to the provider
19    asserts.equals(
20        env,
21        sorted([data.short_path for data in compile_data]),
22        expected,
23    )
24
25    return analysistest.end(env)
26
27def _compile_data_propagates_to_crate_info_test_impl(ctx):
28    return _target_has_compile_data(
29        ctx,
30        ["test/unit/compile_data/compile_data.txt"],
31    )
32
33def _wrapper_rule_propagates_to_crate_info_test_impl(ctx):
34    return _target_has_compile_data(
35        ctx,
36        ["test/unit/compile_data/compile_data.txt"],
37    )
38
39def _wrapper_rule_propagates_and_joins_compile_data_test_impl(ctx):
40    return _target_has_compile_data(
41        ctx,
42        [
43            "test/unit/compile_data/compile_data.txt",
44            "test/unit/compile_data/test_compile_data.txt",
45        ],
46    )
47
48def _compile_data_propagates_to_rust_doc_test_impl(ctx):
49    env = analysistest.begin(ctx)
50    target = analysistest.target_under_test(env)
51
52    actions = target.actions
53    action = actions[0]
54    assert_action_mnemonic(env, action, "Rustdoc")
55
56    return analysistest.end(env)
57
58compile_data_propagates_to_crate_info_test = analysistest.make(_compile_data_propagates_to_crate_info_test_impl)
59wrapper_rule_propagates_to_crate_info_test = analysistest.make(_wrapper_rule_propagates_to_crate_info_test_impl)
60wrapper_rule_propagates_and_joins_compile_data_test = analysistest.make(_wrapper_rule_propagates_and_joins_compile_data_test_impl)
61compile_data_propagates_to_rust_doc_test = analysistest.make(_compile_data_propagates_to_rust_doc_test_impl)
62
63def _define_test_targets():
64    rust_library(
65        name = "compile_data",
66        srcs = ["compile_data.rs"],
67        compile_data = ["compile_data.txt"],
68        edition = "2018",
69    )
70
71    rust_test(
72        name = "compile_data_unit_test",
73        crate = ":compile_data",
74    )
75
76    rust_test(
77        name = "test_compile_data_unit_test",
78        compile_data = ["test_compile_data.txt"],
79        crate = ":compile_data",
80        rustc_flags = ["--cfg=test_compile_data"],
81    )
82
83    rust_library(
84        name = "compile_data_env",
85        srcs = ["compile_data_env.rs"],
86        compile_data = ["compile_data.txt"],
87        rustc_env = {
88            "COMPILE_DATA_PATH": "$(execpath :compile_data.txt)",
89        },
90        edition = "2018",
91    )
92
93    rust_doc(
94        name = "compile_data_env_rust_doc",
95        crate = ":compile_data_env",
96    )
97
98def compile_data_test_suite(name):
99    """Entry-point macro called from the BUILD file.
100
101    Args:
102        name (str): Name of the macro.
103    """
104
105    _define_test_targets()
106
107    compile_data_propagates_to_crate_info_test(
108        name = "compile_data_propagates_to_crate_info_test",
109        target_under_test = ":compile_data",
110    )
111
112    wrapper_rule_propagates_to_crate_info_test(
113        name = "wrapper_rule_propagates_to_crate_info_test",
114        target_under_test = ":compile_data_unit_test",
115    )
116
117    wrapper_rule_propagates_and_joins_compile_data_test(
118        name = "wrapper_rule_propagates_and_joins_compile_data_test",
119        target_under_test = ":test_compile_data_unit_test",
120    )
121
122    compile_data_propagates_to_rust_doc_test(
123        name = "compile_data_propagates_to_rust_doc_test",
124        target_under_test = ":compile_data_env_rust_doc",
125    )
126
127    native.test_suite(
128        name = name,
129        tests = [
130            ":compile_data_propagates_to_crate_info_test",
131            ":wrapper_rule_propagates_to_crate_info_test",
132            ":wrapper_rule_propagates_and_joins_compile_data_test",
133            ":compile_data_propagates_to_rust_doc_test",
134        ],
135    )
136