xref: /aosp_15_r20/build/bazel/rules/prebuilt_xml_test.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project
2*7594170eSAndroid Build Coastguard Worker#
3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*7594170eSAndroid Build Coastguard Worker#
7*7594170eSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*7594170eSAndroid Build Coastguard Worker#
9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*7594170eSAndroid Build Coastguard Worker# limitations under the License.
14*7594170eSAndroid Build Coastguard Worker
15*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:paths.bzl", "paths")
16*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
17*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:prebuilt_file.bzl", "PrebuiltFileInfo")
18*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:prebuilt_xml.bzl", "prebuilt_xml")
19*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/test_common:args.bzl", "get_arg_value")
20*7594170eSAndroid Build Coastguard Worker
21*7594170eSAndroid Build Coastguard WorkerSRC = "fooSrc.xml"
22*7594170eSAndroid Build Coastguard WorkerDIR = "etc/xml"
23*7594170eSAndroid Build Coastguard WorkerDTD_SCHEMA = "bar.dtd"
24*7594170eSAndroid Build Coastguard WorkerXSD_SCHEMA = "baz.xsd"
25*7594170eSAndroid Build Coastguard WorkerFILENAME = "fooFilename"
26*7594170eSAndroid Build Coastguard Worker
27*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_commands_impl(ctx):
28*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
29*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
30*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, 1, len(actions), "expected  1 action got {}".format(actions))
31*7594170eSAndroid Build Coastguard Worker    args = actions[0].argv
32*7594170eSAndroid Build Coastguard Worker
33*7594170eSAndroid Build Coastguard Worker    asserts.true(env, len(args) >= 8, "expected at least 8 arguments but got {} {}".format(len(args), args))
34*7594170eSAndroid Build Coastguard Worker
35*7594170eSAndroid Build Coastguard Worker    offset = 0
36*7594170eSAndroid Build Coastguard Worker    schema = ctx.attr.schema
37*7594170eSAndroid Build Coastguard Worker
38*7594170eSAndroid Build Coastguard Worker    if schema != "":
39*7594170eSAndroid Build Coastguard Worker        offset = 2
40*7594170eSAndroid Build Coastguard Worker        if schema == "--schema":
41*7594170eSAndroid Build Coastguard Worker            asserts.equals(env, paths.basename(get_arg_value(args, schema)), XSD_SCHEMA)
42*7594170eSAndroid Build Coastguard Worker        elif schema == "--dtdvalid":
43*7594170eSAndroid Build Coastguard Worker            asserts.equals(env, paths.basename(get_arg_value(args, schema)), DTD_SCHEMA)
44*7594170eSAndroid Build Coastguard Worker        else:
45*7594170eSAndroid Build Coastguard Worker            analysistest.fail(
46*7594170eSAndroid Build Coastguard Worker                env,
47*7594170eSAndroid Build Coastguard Worker                "Expected schema attr to be --schema or --dtdvalid but got {}".format(schema),
48*7594170eSAndroid Build Coastguard Worker            )
49*7594170eSAndroid Build Coastguard Worker
50*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, SRC, paths.basename(args[1 + offset]))
51*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, ">", args[2 + offset])
52*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, "/dev/null", args[3 + offset])
53*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, "&&", args[4 + offset])
54*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, "touch", args[5 + offset])
55*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, "-a", args[6 + offset])
56*7594170eSAndroid Build Coastguard Worker
57*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
58*7594170eSAndroid Build Coastguard Worker
59*7594170eSAndroid Build Coastguard Workerprebuilt_xml_commands_test = analysistest.make(
60*7594170eSAndroid Build Coastguard Worker    _test_prebuilt_xml_commands_impl,
61*7594170eSAndroid Build Coastguard Worker    attrs = {
62*7594170eSAndroid Build Coastguard Worker        "schema": attr.string(),
63*7594170eSAndroid Build Coastguard Worker    },
64*7594170eSAndroid Build Coastguard Worker)
65*7594170eSAndroid Build Coastguard Worker
66*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_commands():
67*7594170eSAndroid Build Coastguard Worker    name = "prebuilt_xml_commands"
68*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
69*7594170eSAndroid Build Coastguard Worker
70*7594170eSAndroid Build Coastguard Worker    prebuilt_xml(
71*7594170eSAndroid Build Coastguard Worker        name = name,
72*7594170eSAndroid Build Coastguard Worker        src = SRC,
73*7594170eSAndroid Build Coastguard Worker        filename = FILENAME,
74*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
75*7594170eSAndroid Build Coastguard Worker    )
76*7594170eSAndroid Build Coastguard Worker    prebuilt_xml_commands_test(
77*7594170eSAndroid Build Coastguard Worker        name = test_name,
78*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
79*7594170eSAndroid Build Coastguard Worker    )
80*7594170eSAndroid Build Coastguard Worker
81*7594170eSAndroid Build Coastguard Worker    return test_name
82*7594170eSAndroid Build Coastguard Worker
83*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_commands_dtd():
84*7594170eSAndroid Build Coastguard Worker    name = "prebuilt_xml_commands_dtd"
85*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
86*7594170eSAndroid Build Coastguard Worker
87*7594170eSAndroid Build Coastguard Worker    prebuilt_xml(
88*7594170eSAndroid Build Coastguard Worker        name = name,
89*7594170eSAndroid Build Coastguard Worker        src = SRC,
90*7594170eSAndroid Build Coastguard Worker        schema = DTD_SCHEMA,
91*7594170eSAndroid Build Coastguard Worker        filename = FILENAME,
92*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
93*7594170eSAndroid Build Coastguard Worker    )
94*7594170eSAndroid Build Coastguard Worker    prebuilt_xml_commands_test(
95*7594170eSAndroid Build Coastguard Worker        name = test_name,
96*7594170eSAndroid Build Coastguard Worker        schema = "--dtdvalid",
97*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
98*7594170eSAndroid Build Coastguard Worker    )
99*7594170eSAndroid Build Coastguard Worker
100*7594170eSAndroid Build Coastguard Worker    return test_name
101*7594170eSAndroid Build Coastguard Worker
102*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_commands_xsd():
103*7594170eSAndroid Build Coastguard Worker    name = "prebuilt_xml_commands_xsd"
104*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
105*7594170eSAndroid Build Coastguard Worker    prebuilt_xml(
106*7594170eSAndroid Build Coastguard Worker        name = name,
107*7594170eSAndroid Build Coastguard Worker        schema = XSD_SCHEMA,
108*7594170eSAndroid Build Coastguard Worker        filename = FILENAME,
109*7594170eSAndroid Build Coastguard Worker        src = SRC,
110*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
111*7594170eSAndroid Build Coastguard Worker    )
112*7594170eSAndroid Build Coastguard Worker    prebuilt_xml_commands_test(
113*7594170eSAndroid Build Coastguard Worker        name = test_name,
114*7594170eSAndroid Build Coastguard Worker        schema = "--schema",
115*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
116*7594170eSAndroid Build Coastguard Worker    )
117*7594170eSAndroid Build Coastguard Worker
118*7594170eSAndroid Build Coastguard Worker    return test_name
119*7594170eSAndroid Build Coastguard Worker
120*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_PrebuiltFileInfo_impl(ctx):
121*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
122*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
123*7594170eSAndroid Build Coastguard Worker    prebuilt_file_info = target_under_test[PrebuiltFileInfo]
124*7594170eSAndroid Build Coastguard Worker
125*7594170eSAndroid Build Coastguard Worker    asserts.equals(
126*7594170eSAndroid Build Coastguard Worker        env,
127*7594170eSAndroid Build Coastguard Worker        FILENAME,
128*7594170eSAndroid Build Coastguard Worker        prebuilt_file_info.filename,
129*7594170eSAndroid Build Coastguard Worker        "expected PrebuiltFileInfo filename to be {} but got {}".format(FILENAME, prebuilt_file_info.filename),
130*7594170eSAndroid Build Coastguard Worker    )
131*7594170eSAndroid Build Coastguard Worker
132*7594170eSAndroid Build Coastguard Worker    asserts.equals(
133*7594170eSAndroid Build Coastguard Worker        env,
134*7594170eSAndroid Build Coastguard Worker        SRC,
135*7594170eSAndroid Build Coastguard Worker        prebuilt_file_info.src.basename,
136*7594170eSAndroid Build Coastguard Worker        "expected PrebuiltFileInfo src to be {} but got {}".format(SRC, prebuilt_file_info.src),
137*7594170eSAndroid Build Coastguard Worker    )
138*7594170eSAndroid Build Coastguard Worker
139*7594170eSAndroid Build Coastguard Worker    asserts.equals(
140*7594170eSAndroid Build Coastguard Worker        env,
141*7594170eSAndroid Build Coastguard Worker        DIR,
142*7594170eSAndroid Build Coastguard Worker        prebuilt_file_info.dir,
143*7594170eSAndroid Build Coastguard Worker        "expected PrebuiltFileInfo dir to be {} but got {}".format(DIR, prebuilt_file_info.dir),
144*7594170eSAndroid Build Coastguard Worker    )
145*7594170eSAndroid Build Coastguard Worker
146*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
147*7594170eSAndroid Build Coastguard Worker
148*7594170eSAndroid Build Coastguard Workerprebuilt_xml_PrebuiltFileInfo_test = analysistest.make(_test_prebuilt_xml_PrebuiltFileInfo_impl)
149*7594170eSAndroid Build Coastguard Worker
150*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_PrebuiltFileInfo():
151*7594170eSAndroid Build Coastguard Worker    name = "prebuilt_xml_PrebuiltFileInfo"
152*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
153*7594170eSAndroid Build Coastguard Worker    prebuilt_xml(
154*7594170eSAndroid Build Coastguard Worker        name = name,
155*7594170eSAndroid Build Coastguard Worker        src = SRC,
156*7594170eSAndroid Build Coastguard Worker        filename = FILENAME,
157*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
158*7594170eSAndroid Build Coastguard Worker    )
159*7594170eSAndroid Build Coastguard Worker    prebuilt_xml_PrebuiltFileInfo_test(
160*7594170eSAndroid Build Coastguard Worker        name = test_name,
161*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
162*7594170eSAndroid Build Coastguard Worker    )
163*7594170eSAndroid Build Coastguard Worker
164*7594170eSAndroid Build Coastguard Worker    return test_name
165*7594170eSAndroid Build Coastguard Worker
166*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_schema_validation_impl(ctx):
167*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
168*7594170eSAndroid Build Coastguard Worker
169*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
170*7594170eSAndroid Build Coastguard Worker    target = analysistest.target_under_test(env)
171*7594170eSAndroid Build Coastguard Worker    validation_outputs = target.output_groups._validation.to_list()
172*7594170eSAndroid Build Coastguard Worker    for action in actions:
173*7594170eSAndroid Build Coastguard Worker        for validation_output in validation_outputs:
174*7594170eSAndroid Build Coastguard Worker            if validation_output in action.inputs.to_list():
175*7594170eSAndroid Build Coastguard Worker                analysistest.fail(
176*7594170eSAndroid Build Coastguard Worker                    env,
177*7594170eSAndroid Build Coastguard Worker                    "%s is a validation action output, but is an input to action %s" % (
178*7594170eSAndroid Build Coastguard Worker                        validation_output,
179*7594170eSAndroid Build Coastguard Worker                        action,
180*7594170eSAndroid Build Coastguard Worker                    ),
181*7594170eSAndroid Build Coastguard Worker                )
182*7594170eSAndroid Build Coastguard Worker
183*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
184*7594170eSAndroid Build Coastguard Worker
185*7594170eSAndroid Build Coastguard Workerprebuilt_xml_schema_validation_test = analysistest.make(_test_prebuilt_xml_schema_validation_impl)
186*7594170eSAndroid Build Coastguard Worker
187*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_dtd_schema_validation():
188*7594170eSAndroid Build Coastguard Worker    name = "prebuilt_xml_dtd_schema_validation"
189*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
190*7594170eSAndroid Build Coastguard Worker    prebuilt_xml(
191*7594170eSAndroid Build Coastguard Worker        name = name,
192*7594170eSAndroid Build Coastguard Worker        src = SRC,
193*7594170eSAndroid Build Coastguard Worker        schema = DTD_SCHEMA,
194*7594170eSAndroid Build Coastguard Worker        filename = FILENAME,
195*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
196*7594170eSAndroid Build Coastguard Worker    )
197*7594170eSAndroid Build Coastguard Worker    prebuilt_xml_schema_validation_test(
198*7594170eSAndroid Build Coastguard Worker        name = test_name,
199*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
200*7594170eSAndroid Build Coastguard Worker    )
201*7594170eSAndroid Build Coastguard Worker
202*7594170eSAndroid Build Coastguard Worker    return test_name
203*7594170eSAndroid Build Coastguard Worker
204*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_xsd_schema_validation():
205*7594170eSAndroid Build Coastguard Worker    name = "prebuilt_xml_xsd_schema_validation"
206*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
207*7594170eSAndroid Build Coastguard Worker    prebuilt_xml(
208*7594170eSAndroid Build Coastguard Worker        name = name,
209*7594170eSAndroid Build Coastguard Worker        schema = XSD_SCHEMA,
210*7594170eSAndroid Build Coastguard Worker        filename = FILENAME,
211*7594170eSAndroid Build Coastguard Worker        src = SRC,
212*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
213*7594170eSAndroid Build Coastguard Worker    )
214*7594170eSAndroid Build Coastguard Worker    prebuilt_xml_schema_validation_test(
215*7594170eSAndroid Build Coastguard Worker        name = test_name,
216*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
217*7594170eSAndroid Build Coastguard Worker    )
218*7594170eSAndroid Build Coastguard Worker
219*7594170eSAndroid Build Coastguard Worker    return test_name
220*7594170eSAndroid Build Coastguard Worker
221*7594170eSAndroid Build Coastguard Workerdef _test_prebuilt_xml_minimal_schema_validation():
222*7594170eSAndroid Build Coastguard Worker    name = "prebuilt_xml_minimal_schema_validation"
223*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
224*7594170eSAndroid Build Coastguard Worker    prebuilt_xml(
225*7594170eSAndroid Build Coastguard Worker        name = name,
226*7594170eSAndroid Build Coastguard Worker        src = SRC,
227*7594170eSAndroid Build Coastguard Worker        filename = FILENAME,
228*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
229*7594170eSAndroid Build Coastguard Worker    )
230*7594170eSAndroid Build Coastguard Worker    prebuilt_xml_schema_validation_test(
231*7594170eSAndroid Build Coastguard Worker        name = test_name,
232*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
233*7594170eSAndroid Build Coastguard Worker    )
234*7594170eSAndroid Build Coastguard Worker
235*7594170eSAndroid Build Coastguard Worker    return test_name
236*7594170eSAndroid Build Coastguard Worker
237*7594170eSAndroid Build Coastguard Workerdef prebuilt_xml_test_suite(name):
238*7594170eSAndroid Build Coastguard Worker    native.test_suite(
239*7594170eSAndroid Build Coastguard Worker        name = name,
240*7594170eSAndroid Build Coastguard Worker        tests = [
241*7594170eSAndroid Build Coastguard Worker            _test_prebuilt_xml_commands(),
242*7594170eSAndroid Build Coastguard Worker            _test_prebuilt_xml_commands_dtd(),
243*7594170eSAndroid Build Coastguard Worker            _test_prebuilt_xml_commands_xsd(),
244*7594170eSAndroid Build Coastguard Worker            _test_prebuilt_xml_minimal_schema_validation(),
245*7594170eSAndroid Build Coastguard Worker            _test_prebuilt_xml_dtd_schema_validation(),
246*7594170eSAndroid Build Coastguard Worker            _test_prebuilt_xml_xsd_schema_validation(),
247*7594170eSAndroid Build Coastguard Worker            _test_prebuilt_xml_PrebuiltFileInfo(),
248*7594170eSAndroid Build Coastguard Worker        ],
249*7594170eSAndroid Build Coastguard Worker    )
250