xref: /aosp_15_r20/external/bazelbuild-rules_rust/test/unit/crate_name/crate_name_test.bzl (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1"""Unit tests for crate names."""
2
3load("@bazel_skylib//lib:unittest.bzl", "analysistest")
4load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_shared_library", "rust_static_library", "rust_test")
5load("//test/unit:common.bzl", "assert_argv_contains", "assert_argv_contains_prefix_not")
6
7def _default_crate_name_library_test_impl(ctx):
8    env = analysistest.begin(ctx)
9    tut = analysistest.target_under_test(env)
10
11    # Note: Hyphens in crate name converted to underscores.
12    assert_argv_contains(env, tut.actions[0], "--crate-name=default_crate_name_library")
13    return analysistest.end(env)
14
15def _custom_crate_name_library_test_impl(ctx):
16    env = analysistest.begin(ctx)
17    tut = analysistest.target_under_test(env)
18    assert_argv_contains(env, tut.actions[0], "--crate-name=custom_name")
19    return analysistest.end(env)
20
21def _default_crate_name_binary_test_impl(ctx):
22    env = analysistest.begin(ctx)
23    tut = analysistest.target_under_test(env)
24
25    # Note: Hyphens in crate name converted to underscores.
26    assert_argv_contains(env, tut.actions[0], "--crate-name=default_crate_name_binary")
27    return analysistest.end(env)
28
29def _custom_crate_name_binary_test_impl(ctx):
30    env = analysistest.begin(ctx)
31    tut = analysistest.target_under_test(env)
32    assert_argv_contains(env, tut.actions[0], "--crate-name=custom_name")
33    return analysistest.end(env)
34
35def _default_crate_name_test_test_impl(ctx):
36    env = analysistest.begin(ctx)
37    tut = analysistest.target_under_test(env)
38
39    # Note: Hyphens in crate name converted to underscores.
40    assert_argv_contains(env, tut.actions[0], "--crate-name=default_crate_name_test")
41    return analysistest.end(env)
42
43def _custom_crate_name_test_test_impl(ctx):
44    env = analysistest.begin(ctx)
45    tut = analysistest.target_under_test(env)
46    assert_argv_contains(env, tut.actions[0], "--crate-name=custom_name")
47    return analysistest.end(env)
48
49def _slib_library_name_test_impl(ctx):
50    """Regression test for extra-filename.
51
52    Checks that the extra hash value appended to the library filename only
53    contains one dash. Previously, the hash for `slib` was negative,
54    resulting in an extra dash in the filename (--codegen_extra_filename=--NUM).
55
56    Args:
57      ctx: rule context.
58    """
59    env = analysistest.begin(ctx)
60    tut = analysistest.target_under_test(env)
61    assert_argv_contains(env, tut.actions[0], "--codegen=metadata=-2102077805")
62    assert_argv_contains(env, tut.actions[0], "--codegen=extra-filename=-2102077805")
63    return analysistest.end(env)
64
65def _no_extra_filename_test_impl(ctx):
66    """Check that no extra filename is used.
67
68    Args:
69      ctx: rule context.
70    """
71    env = analysistest.begin(ctx)
72    tut = analysistest.target_under_test(env)
73    assert_argv_contains_prefix_not(env, tut.actions[0], "--codegen=metadata=")
74    assert_argv_contains_prefix_not(env, tut.actions[0], "--codegen=extra-filename=")
75    return analysistest.end(env)
76
77default_crate_name_library_test = analysistest.make(
78    _default_crate_name_library_test_impl,
79)
80custom_crate_name_library_test = analysistest.make(
81    _custom_crate_name_library_test_impl,
82)
83default_crate_name_binary_test = analysistest.make(
84    _default_crate_name_binary_test_impl,
85)
86custom_crate_name_binary_test = analysistest.make(
87    _custom_crate_name_binary_test_impl,
88)
89default_crate_name_test_test = analysistest.make(
90    _default_crate_name_test_test_impl,
91)
92custom_crate_name_test_test = analysistest.make(
93    _custom_crate_name_test_test_impl,
94)
95slib_library_name_test = analysistest.make(
96    _slib_library_name_test_impl,
97)
98no_extra_filename_test = analysistest.make(
99    _no_extra_filename_test_impl,
100)
101
102def _crate_name_test():
103    rust_library(
104        name = "default/crate-name-library",
105        srcs = ["lib.rs"],
106        edition = "2018",
107    )
108
109    rust_library(
110        name = "custom-crate-name-library",
111        crate_name = "custom_name",
112        srcs = ["lib.rs"],
113        edition = "2018",
114    )
115
116    rust_binary(
117        name = "default/crate-name-binary",
118        srcs = ["main.rs"],
119        edition = "2018",
120    )
121
122    rust_binary(
123        name = "custom-crate-name-binary",
124        crate_name = "custom_name",
125        srcs = ["main.rs"],
126        edition = "2018",
127    )
128
129    rust_test(
130        name = "default/crate-name-test",
131        srcs = ["main.rs"],
132        edition = "2018",
133    )
134
135    rust_test(
136        name = "custom-crate-name-test",
137        crate_name = "custom_name",
138        srcs = ["main.rs"],
139        edition = "2018",
140    )
141
142    rust_library(
143        name = "slib",
144        srcs = ["slib.rs"],
145        edition = "2018",
146    )
147
148    rust_shared_library(
149        name = "shared_lib",
150        srcs = ["lib.rs"],
151        edition = "2018",
152    )
153
154    rust_static_library(
155        name = "static_lib",
156        srcs = ["lib.rs"],
157        edition = "2018",
158    )
159
160    slib_library_name_test(
161        name = "slib_library_name_test",
162        target_under_test = ":slib",
163    )
164
165    default_crate_name_library_test(
166        name = "default_crate_name_library_test",
167        target_under_test = ":default/crate-name-library",
168    )
169
170    custom_crate_name_library_test(
171        name = "custom_crate_name_library_test",
172        target_under_test = ":custom-crate-name-library",
173    )
174
175    default_crate_name_binary_test(
176        name = "default_crate_name_binary_test",
177        target_under_test = ":default/crate-name-binary",
178    )
179
180    custom_crate_name_binary_test(
181        name = "custom_crate_name_binary_test",
182        target_under_test = ":custom-crate-name-binary",
183    )
184
185    default_crate_name_test_test(
186        name = "default_crate_name_test_test",
187        target_under_test = ":default/crate-name-test",
188    )
189
190    custom_crate_name_test_test(
191        name = "custom_crate_name_test_test",
192        target_under_test = ":custom-crate-name-test",
193    )
194
195    no_extra_filename_test(
196        name = "no_extra_filename_for_shared_library_test",
197        target_under_test = ":shared_lib",
198    )
199
200    no_extra_filename_test(
201        name = "no_extra_filename_for_static_library_test",
202        target_under_test = ":static_lib",
203    )
204
205def crate_name_test_suite(name):
206    """Entry-point macro called from the BUILD file.
207
208    Args:
209        name: Name of the macro.
210    """
211
212    _crate_name_test()
213
214    native.test_suite(
215        name = name,
216        tests = [
217            ":default_crate_name_library_test",
218            ":custom_crate_name_library_test",
219            ":default_crate_name_binary_test",
220            ":custom_crate_name_binary_test",
221            ":default_crate_name_test_test",
222            ":custom_crate_name_test_test",
223        ],
224    )
225