xref: /aosp_15_r20/external/wayland-protocols/bazel/gensrcs_test.bzl (revision 6c119a463dd5c45dd05bbe67429293292dde15ee)
1*6c119a46SAndroid Build Coastguard Worker"""
2*6c119a46SAndroid Build Coastguard WorkerCopyright 2023 The Android Open Source Project
3*6c119a46SAndroid Build Coastguard Worker
4*6c119a46SAndroid Build Coastguard WorkerLicensed under the Apache License, Version 2.0 (the "License");
5*6c119a46SAndroid Build Coastguard Workeryou may not use this file except in compliance with the License.
6*6c119a46SAndroid Build Coastguard WorkerYou may obtain a copy of the License at
7*6c119a46SAndroid Build Coastguard Worker
8*6c119a46SAndroid Build Coastguard Worker    http://www.apache.org/licenses/LICENSE-2.0
9*6c119a46SAndroid Build Coastguard Worker
10*6c119a46SAndroid Build Coastguard WorkerUnless required by applicable law or agreed to in writing, software
11*6c119a46SAndroid Build Coastguard Workerdistributed under the License is distributed on an "AS IS" BASIS,
12*6c119a46SAndroid Build Coastguard WorkerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6c119a46SAndroid Build Coastguard WorkerSee the License for the specific language governing permissions and
14*6c119a46SAndroid Build Coastguard Workerlimitations under the License.
15*6c119a46SAndroid Build Coastguard Worker"""
16*6c119a46SAndroid Build Coastguard Worker
17*6c119a46SAndroid Build Coastguard Workerload("@bazel_skylib//lib:new_sets.bzl", "sets")
18*6c119a46SAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
19*6c119a46SAndroid Build Coastguard Workerload("@bazel_skylib//lib:paths.bzl", "paths")
20*6c119a46SAndroid Build Coastguard Workerload(":gensrcs.bzl", "gensrcs")
21*6c119a46SAndroid Build Coastguard Worker
22*6c119a46SAndroid Build Coastguard WorkerSRCS = [
23*6c119a46SAndroid Build Coastguard Worker    "texts/src1.txt",
24*6c119a46SAndroid Build Coastguard Worker    "texts/src2.txt",
25*6c119a46SAndroid Build Coastguard Worker    "src3.txt",
26*6c119a46SAndroid Build Coastguard Worker]
27*6c119a46SAndroid Build Coastguard Worker
28*6c119a46SAndroid Build Coastguard Worker# ==== Check the output paths created by gensrcs ====
29*6c119a46SAndroid Build Coastguard Worker
30*6c119a46SAndroid Build Coastguard Workerdef _test_output_path_expansion_impl(ctx):
31*6c119a46SAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
32*6c119a46SAndroid Build Coastguard Worker    target = analysistest.target_under_test(env)
33*6c119a46SAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
34*6c119a46SAndroid Build Coastguard Worker
35*6c119a46SAndroid Build Coastguard Worker    # Expect an action for each input/output file pair.
36*6c119a46SAndroid Build Coastguard Worker    asserts.equals(
37*6c119a46SAndroid Build Coastguard Worker        env,
38*6c119a46SAndroid Build Coastguard Worker        expected = len(ctx.attr.expected_outputs),
39*6c119a46SAndroid Build Coastguard Worker        actual = len(actions),
40*6c119a46SAndroid Build Coastguard Worker    )
41*6c119a46SAndroid Build Coastguard Worker
42*6c119a46SAndroid Build Coastguard Worker    # Expect the correct set of output files.
43*6c119a46SAndroid Build Coastguard Worker    asserts.set_equals(
44*6c119a46SAndroid Build Coastguard Worker        env,
45*6c119a46SAndroid Build Coastguard Worker        expected = sets.make([
46*6c119a46SAndroid Build Coastguard Worker            paths.join(
47*6c119a46SAndroid Build Coastguard Worker                ctx.genfiles_dir.path,
48*6c119a46SAndroid Build Coastguard Worker                paths.dirname(ctx.build_file_path),
49*6c119a46SAndroid Build Coastguard Worker                out,
50*6c119a46SAndroid Build Coastguard Worker            )
51*6c119a46SAndroid Build Coastguard Worker            for out in ctx.attr.expected_outputs
52*6c119a46SAndroid Build Coastguard Worker        ]),
53*6c119a46SAndroid Build Coastguard Worker        actual = sets.make(
54*6c119a46SAndroid Build Coastguard Worker            [file.path for file in target.files.to_list()],
55*6c119a46SAndroid Build Coastguard Worker        ),
56*6c119a46SAndroid Build Coastguard Worker    )
57*6c119a46SAndroid Build Coastguard Worker
58*6c119a46SAndroid Build Coastguard Worker    return analysistest.end(env)
59*6c119a46SAndroid Build Coastguard Worker
60*6c119a46SAndroid Build Coastguard Workeroutput_path_expansion_test = analysistest.make(
61*6c119a46SAndroid Build Coastguard Worker    _test_output_path_expansion_impl,
62*6c119a46SAndroid Build Coastguard Worker    attrs = {
63*6c119a46SAndroid Build Coastguard Worker        "expected_outputs": attr.string_list(
64*6c119a46SAndroid Build Coastguard Worker            doc = "The expected list of output files",
65*6c119a46SAndroid Build Coastguard Worker        ),
66*6c119a46SAndroid Build Coastguard Worker    },
67*6c119a46SAndroid Build Coastguard Worker)
68*6c119a46SAndroid Build Coastguard Worker
69*6c119a46SAndroid Build Coastguard Workerdef _test_output_expansion_base():
70*6c119a46SAndroid Build Coastguard Worker    name = "gensrcs_output_expansion_base"
71*6c119a46SAndroid Build Coastguard Worker    test_name = name + "_test"
72*6c119a46SAndroid Build Coastguard Worker
73*6c119a46SAndroid Build Coastguard Worker    gensrcs(
74*6c119a46SAndroid Build Coastguard Worker        name = name,
75*6c119a46SAndroid Build Coastguard Worker        cmd = "cat $(SRC) > $(OUT)",
76*6c119a46SAndroid Build Coastguard Worker        srcs = SRCS,
77*6c119a46SAndroid Build Coastguard Worker        output = "prefix_$(SRC:BASE)_suffix",
78*6c119a46SAndroid Build Coastguard Worker        tags = ["manual"],  # make sure it's not built using `:all`
79*6c119a46SAndroid Build Coastguard Worker    )
80*6c119a46SAndroid Build Coastguard Worker
81*6c119a46SAndroid Build Coastguard Worker    output_path_expansion_test(
82*6c119a46SAndroid Build Coastguard Worker        name = test_name,
83*6c119a46SAndroid Build Coastguard Worker        target_under_test = name,
84*6c119a46SAndroid Build Coastguard Worker        expected_outputs = [
85*6c119a46SAndroid Build Coastguard Worker            "prefix_src1_suffix",
86*6c119a46SAndroid Build Coastguard Worker            "prefix_src2_suffix",
87*6c119a46SAndroid Build Coastguard Worker            "prefix_src3_suffix",
88*6c119a46SAndroid Build Coastguard Worker        ],
89*6c119a46SAndroid Build Coastguard Worker    )
90*6c119a46SAndroid Build Coastguard Worker    return test_name
91*6c119a46SAndroid Build Coastguard Worker
92*6c119a46SAndroid Build Coastguard Workerdef _test_output_expansion_base_ext():
93*6c119a46SAndroid Build Coastguard Worker    name = "gensrcs_output_expansion_base_ext"
94*6c119a46SAndroid Build Coastguard Worker    test_name = name + "_test"
95*6c119a46SAndroid Build Coastguard Worker
96*6c119a46SAndroid Build Coastguard Worker    gensrcs(
97*6c119a46SAndroid Build Coastguard Worker        name = name,
98*6c119a46SAndroid Build Coastguard Worker        cmd = "cat $(SRC) > $(OUT)",
99*6c119a46SAndroid Build Coastguard Worker        srcs = SRCS,
100*6c119a46SAndroid Build Coastguard Worker        output = "prefix_$(SRC:BASE.EXT)_suffix",
101*6c119a46SAndroid Build Coastguard Worker        tags = ["manual"],  # make sure it's not built using `:all`
102*6c119a46SAndroid Build Coastguard Worker    )
103*6c119a46SAndroid Build Coastguard Worker
104*6c119a46SAndroid Build Coastguard Worker    output_path_expansion_test(
105*6c119a46SAndroid Build Coastguard Worker        name = test_name,
106*6c119a46SAndroid Build Coastguard Worker        target_under_test = name,
107*6c119a46SAndroid Build Coastguard Worker        expected_outputs = [
108*6c119a46SAndroid Build Coastguard Worker            "prefix_src1.txt_suffix",
109*6c119a46SAndroid Build Coastguard Worker            "prefix_src2.txt_suffix",
110*6c119a46SAndroid Build Coastguard Worker            "prefix_src3.txt_suffix",
111*6c119a46SAndroid Build Coastguard Worker        ],
112*6c119a46SAndroid Build Coastguard Worker    )
113*6c119a46SAndroid Build Coastguard Worker    return test_name
114*6c119a46SAndroid Build Coastguard Worker
115*6c119a46SAndroid Build Coastguard Workerdef _test_output_expansion_path_base():
116*6c119a46SAndroid Build Coastguard Worker    name = "gensrcs_output_expansion_path_base"
117*6c119a46SAndroid Build Coastguard Worker    test_name = name + "_test"
118*6c119a46SAndroid Build Coastguard Worker
119*6c119a46SAndroid Build Coastguard Worker    gensrcs(
120*6c119a46SAndroid Build Coastguard Worker        name = name,
121*6c119a46SAndroid Build Coastguard Worker        cmd = "cat $(SRC) > $(OUT)",
122*6c119a46SAndroid Build Coastguard Worker        srcs = SRCS,
123*6c119a46SAndroid Build Coastguard Worker        output = "prefix_$(SRC:PATH/BASE)_suffix",
124*6c119a46SAndroid Build Coastguard Worker        tags = ["manual"],  # make sure it's not built using `:all`
125*6c119a46SAndroid Build Coastguard Worker    )
126*6c119a46SAndroid Build Coastguard Worker
127*6c119a46SAndroid Build Coastguard Worker    output_path_expansion_test(
128*6c119a46SAndroid Build Coastguard Worker        name = test_name,
129*6c119a46SAndroid Build Coastguard Worker        target_under_test = name,
130*6c119a46SAndroid Build Coastguard Worker        expected_outputs = [
131*6c119a46SAndroid Build Coastguard Worker            "prefix_texts/src1_suffix",
132*6c119a46SAndroid Build Coastguard Worker            "prefix_texts/src2_suffix",
133*6c119a46SAndroid Build Coastguard Worker            "prefix_src3_suffix",
134*6c119a46SAndroid Build Coastguard Worker        ],
135*6c119a46SAndroid Build Coastguard Worker    )
136*6c119a46SAndroid Build Coastguard Worker    return test_name
137*6c119a46SAndroid Build Coastguard Worker
138*6c119a46SAndroid Build Coastguard Workerdef _test_output_expansion_path_base_ext():
139*6c119a46SAndroid Build Coastguard Worker    name = "gensrcs_output_expansion_path_base_ext"
140*6c119a46SAndroid Build Coastguard Worker    test_name = name + "_test"
141*6c119a46SAndroid Build Coastguard Worker
142*6c119a46SAndroid Build Coastguard Worker    gensrcs(
143*6c119a46SAndroid Build Coastguard Worker        name = name,
144*6c119a46SAndroid Build Coastguard Worker        cmd = "cat $(SRC) > $(OUT)",
145*6c119a46SAndroid Build Coastguard Worker        srcs = SRCS,
146*6c119a46SAndroid Build Coastguard Worker        output = "prefix_$(SRC:PATH/BASE.EXT)_suffix",
147*6c119a46SAndroid Build Coastguard Worker        tags = ["manual"],  # make sure it's not built using `:all`
148*6c119a46SAndroid Build Coastguard Worker    )
149*6c119a46SAndroid Build Coastguard Worker
150*6c119a46SAndroid Build Coastguard Worker    output_path_expansion_test(
151*6c119a46SAndroid Build Coastguard Worker        name = test_name,
152*6c119a46SAndroid Build Coastguard Worker        target_under_test = name,
153*6c119a46SAndroid Build Coastguard Worker        expected_outputs = [
154*6c119a46SAndroid Build Coastguard Worker            "prefix_texts/src1.txt_suffix",
155*6c119a46SAndroid Build Coastguard Worker            "prefix_texts/src2.txt_suffix",
156*6c119a46SAndroid Build Coastguard Worker            "prefix_src3.txt_suffix",
157*6c119a46SAndroid Build Coastguard Worker        ],
158*6c119a46SAndroid Build Coastguard Worker    )
159*6c119a46SAndroid Build Coastguard Worker    return test_name
160*6c119a46SAndroid Build Coastguard Worker
161*6c119a46SAndroid Build Coastguard Workerdef _test_output_expansion_pkg_path_base():
162*6c119a46SAndroid Build Coastguard Worker    name = "gensrcs_output_expansion_pkg_path_base"
163*6c119a46SAndroid Build Coastguard Worker    test_name = name + "_test"
164*6c119a46SAndroid Build Coastguard Worker
165*6c119a46SAndroid Build Coastguard Worker    gensrcs(
166*6c119a46SAndroid Build Coastguard Worker        name = name,
167*6c119a46SAndroid Build Coastguard Worker        cmd = "cat $(SRC) > $(OUT)",
168*6c119a46SAndroid Build Coastguard Worker        srcs = SRCS,
169*6c119a46SAndroid Build Coastguard Worker        output = "prefix_$(SRC:PKG/PATH/BASE)_suffix",
170*6c119a46SAndroid Build Coastguard Worker        tags = ["manual"],  # make sure it's not built using `:all`
171*6c119a46SAndroid Build Coastguard Worker    )
172*6c119a46SAndroid Build Coastguard Worker
173*6c119a46SAndroid Build Coastguard Worker    output_path_expansion_test(
174*6c119a46SAndroid Build Coastguard Worker        name = test_name,
175*6c119a46SAndroid Build Coastguard Worker        target_under_test = name,
176*6c119a46SAndroid Build Coastguard Worker        expected_outputs = [
177*6c119a46SAndroid Build Coastguard Worker            "prefix_external/wayland-protocols/bazel/texts/src1_suffix",
178*6c119a46SAndroid Build Coastguard Worker            "prefix_external/wayland-protocols/bazel/texts/src2_suffix",
179*6c119a46SAndroid Build Coastguard Worker            "prefix_external/wayland-protocols/bazel/src3_suffix",
180*6c119a46SAndroid Build Coastguard Worker        ],
181*6c119a46SAndroid Build Coastguard Worker    )
182*6c119a46SAndroid Build Coastguard Worker    return test_name
183*6c119a46SAndroid Build Coastguard Worker
184*6c119a46SAndroid Build Coastguard Workerdef _test_output_expansion_pkg_path_base_ext():
185*6c119a46SAndroid Build Coastguard Worker    name = "gensrcs_output_expansion_pkg_path_base_ext"
186*6c119a46SAndroid Build Coastguard Worker    test_name = name + "_test"
187*6c119a46SAndroid Build Coastguard Worker
188*6c119a46SAndroid Build Coastguard Worker    gensrcs(
189*6c119a46SAndroid Build Coastguard Worker        name = name,
190*6c119a46SAndroid Build Coastguard Worker        cmd = "cat $(SRC) > $(OUT)",
191*6c119a46SAndroid Build Coastguard Worker        srcs = SRCS,
192*6c119a46SAndroid Build Coastguard Worker        output = "prefix_$(SRC:PKG/PATH/BASE.EXT)_suffix",
193*6c119a46SAndroid Build Coastguard Worker        tags = ["manual"],  # make sure it's not built using `:all`
194*6c119a46SAndroid Build Coastguard Worker    )
195*6c119a46SAndroid Build Coastguard Worker
196*6c119a46SAndroid Build Coastguard Worker    output_path_expansion_test(
197*6c119a46SAndroid Build Coastguard Worker        name = test_name,
198*6c119a46SAndroid Build Coastguard Worker        target_under_test = name,
199*6c119a46SAndroid Build Coastguard Worker        expected_outputs = [
200*6c119a46SAndroid Build Coastguard Worker            "prefix_external/wayland-protocols/bazel/texts/src1.txt_suffix",
201*6c119a46SAndroid Build Coastguard Worker            "prefix_external/wayland-protocols/bazel/texts/src2.txt_suffix",
202*6c119a46SAndroid Build Coastguard Worker            "prefix_external/wayland-protocols/bazel/src3.txt_suffix",
203*6c119a46SAndroid Build Coastguard Worker        ],
204*6c119a46SAndroid Build Coastguard Worker    )
205*6c119a46SAndroid Build Coastguard Worker    return test_name
206*6c119a46SAndroid Build Coastguard Worker
207*6c119a46SAndroid Build Coastguard Workerdef _test_output_expansion_default():
208*6c119a46SAndroid Build Coastguard Worker    name = "gensrcs_output_expansion_default"
209*6c119a46SAndroid Build Coastguard Worker    test_name = name + "_test"
210*6c119a46SAndroid Build Coastguard Worker
211*6c119a46SAndroid Build Coastguard Worker    gensrcs(
212*6c119a46SAndroid Build Coastguard Worker        name = name,
213*6c119a46SAndroid Build Coastguard Worker        cmd = "cat $(SRC) > $(OUT)",
214*6c119a46SAndroid Build Coastguard Worker        srcs = SRCS,
215*6c119a46SAndroid Build Coastguard Worker        tags = ["manual"],  # make sure it's not built using `:all`
216*6c119a46SAndroid Build Coastguard Worker    )
217*6c119a46SAndroid Build Coastguard Worker
218*6c119a46SAndroid Build Coastguard Worker    output_path_expansion_test(
219*6c119a46SAndroid Build Coastguard Worker        name = test_name,
220*6c119a46SAndroid Build Coastguard Worker        target_under_test = name,
221*6c119a46SAndroid Build Coastguard Worker        expected_outputs = [
222*6c119a46SAndroid Build Coastguard Worker            "texts/src1.txt",
223*6c119a46SAndroid Build Coastguard Worker            "texts/src2.txt",
224*6c119a46SAndroid Build Coastguard Worker            "src3.txt",
225*6c119a46SAndroid Build Coastguard Worker        ],
226*6c119a46SAndroid Build Coastguard Worker    )
227*6c119a46SAndroid Build Coastguard Worker    return test_name
228*6c119a46SAndroid Build Coastguard Worker
229*6c119a46SAndroid Build Coastguard Worker# ==== test suite ====
230*6c119a46SAndroid Build Coastguard Worker
231*6c119a46SAndroid Build Coastguard Workerdef gensrcs_test_suite(name):
232*6c119a46SAndroid Build Coastguard Worker    """Creates test targets for gensrcs.bzl"""
233*6c119a46SAndroid Build Coastguard Worker    native.test_suite(
234*6c119a46SAndroid Build Coastguard Worker        name = name,
235*6c119a46SAndroid Build Coastguard Worker        tests = [
236*6c119a46SAndroid Build Coastguard Worker            _test_output_expansion_base(),
237*6c119a46SAndroid Build Coastguard Worker            _test_output_expansion_base_ext(),
238*6c119a46SAndroid Build Coastguard Worker            _test_output_expansion_path_base(),
239*6c119a46SAndroid Build Coastguard Worker            _test_output_expansion_path_base_ext(),
240*6c119a46SAndroid Build Coastguard Worker            _test_output_expansion_pkg_path_base(),
241*6c119a46SAndroid Build Coastguard Worker            _test_output_expansion_pkg_path_base_ext(),
242*6c119a46SAndroid Build Coastguard Worker            _test_output_expansion_default(),
243*6c119a46SAndroid Build Coastguard Worker        ],
244*6c119a46SAndroid Build Coastguard Worker    )
245