xref: /aosp_15_r20/build/bazel/rules/cc/flex_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 WorkerLicensed under the Apache License, Version 2.0 (the "License");
4*7594170eSAndroid Build Coastguard Workeryou may not use this file except in compliance with the License.
5*7594170eSAndroid Build Coastguard WorkerYou 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 WorkerUnless required by applicable law or agreed to in writing, software
10*7594170eSAndroid Build Coastguard Workerdistributed under the License is distributed on an "AS IS" BASIS,
11*7594170eSAndroid Build Coastguard WorkerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7594170eSAndroid Build Coastguard WorkerSee the License for the specific language governing permissions and
13*7594170eSAndroid Build Coastguard Workerlimitations under the License.
14*7594170eSAndroid Build Coastguard Worker"""
15*7594170eSAndroid Build Coastguard Worker
16*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
17*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/test_common:args.bzl", "get_arg_value")
18*7594170eSAndroid Build Coastguard Workerload(
19*7594170eSAndroid Build Coastguard Worker    "//build/bazel/rules/test_common:paths.bzl",
20*7594170eSAndroid Build Coastguard Worker    "get_output_and_package_dir_based_path",
21*7594170eSAndroid Build Coastguard Worker    "get_package_dir_based_path",
22*7594170eSAndroid Build Coastguard Worker)
23*7594170eSAndroid Build Coastguard Workerload(":flex.bzl", "genlex")
24*7594170eSAndroid Build Coastguard Worker
25*7594170eSAndroid Build Coastguard Workerdef _single_l_file_to_c_test_impl(ctx):
26*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
27*7594170eSAndroid Build Coastguard Worker
28*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
29*7594170eSAndroid Build Coastguard Worker
30*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, 1, len(actions))
31*7594170eSAndroid Build Coastguard Worker
32*7594170eSAndroid Build Coastguard Worker    actual_list_foo = [input.path for input in actions[0].inputs.to_list()]
33*7594170eSAndroid Build Coastguard Worker    expected_path_foo = get_package_dir_based_path(env, "foo.l")
34*7594170eSAndroid Build Coastguard Worker    asserts.true(
35*7594170eSAndroid Build Coastguard Worker        env,
36*7594170eSAndroid Build Coastguard Worker        expected_path_foo in actual_list_foo,
37*7594170eSAndroid Build Coastguard Worker        ("Input file %s not present or incorrect in Bazel action for " +
38*7594170eSAndroid Build Coastguard Worker         "target foo. Actual list of inputs: %s") % (
39*7594170eSAndroid Build Coastguard Worker            expected_path_foo,
40*7594170eSAndroid Build Coastguard Worker            actual_list_foo,
41*7594170eSAndroid Build Coastguard Worker        ),
42*7594170eSAndroid Build Coastguard Worker    )
43*7594170eSAndroid Build Coastguard Worker    expected_output = get_output_and_package_dir_based_path(env, "foo.c")
44*7594170eSAndroid Build Coastguard Worker    actual_outputs = [output.path for output in actions[0].outputs.to_list()]
45*7594170eSAndroid Build Coastguard Worker    asserts.true(
46*7594170eSAndroid Build Coastguard Worker        env,
47*7594170eSAndroid Build Coastguard Worker        expected_output in actual_outputs,
48*7594170eSAndroid Build Coastguard Worker        ("Expected output %s not present or incorrect in Bazel action\n" +
49*7594170eSAndroid Build Coastguard Worker         "Actual list of outputs: %s") % (
50*7594170eSAndroid Build Coastguard Worker            expected_output,
51*7594170eSAndroid Build Coastguard Worker            actual_outputs,
52*7594170eSAndroid Build Coastguard Worker        ),
53*7594170eSAndroid Build Coastguard Worker    )
54*7594170eSAndroid Build Coastguard Worker
55*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
56*7594170eSAndroid Build Coastguard Worker
57*7594170eSAndroid Build Coastguard Workersingle_l_file_to_c_test = analysistest.make(_single_l_file_to_c_test_impl)
58*7594170eSAndroid Build Coastguard Worker
59*7594170eSAndroid Build Coastguard Workerdef _test_single_l_file_to_c():
60*7594170eSAndroid Build Coastguard Worker    name = "single_l_file_to_c"
61*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
62*7594170eSAndroid Build Coastguard Worker    genlex(
63*7594170eSAndroid Build Coastguard Worker        name = name,
64*7594170eSAndroid Build Coastguard Worker        srcs = ["foo.l"],
65*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
66*7594170eSAndroid Build Coastguard Worker    )
67*7594170eSAndroid Build Coastguard Worker    single_l_file_to_c_test(
68*7594170eSAndroid Build Coastguard Worker        name = test_name,
69*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
70*7594170eSAndroid Build Coastguard Worker    )
71*7594170eSAndroid Build Coastguard Worker    return test_name
72*7594170eSAndroid Build Coastguard Worker
73*7594170eSAndroid Build Coastguard Workerdef _single_ll_file_to_cc_test_impl(ctx):
74*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
75*7594170eSAndroid Build Coastguard Worker
76*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
77*7594170eSAndroid Build Coastguard Worker
78*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, 1, len(actions))
79*7594170eSAndroid Build Coastguard Worker
80*7594170eSAndroid Build Coastguard Worker    actual_list_foo = [input.path for input in actions[0].inputs.to_list()]
81*7594170eSAndroid Build Coastguard Worker    expected_path_foo = get_package_dir_based_path(env, "foo.ll")
82*7594170eSAndroid Build Coastguard Worker    asserts.true(
83*7594170eSAndroid Build Coastguard Worker        env,
84*7594170eSAndroid Build Coastguard Worker        expected_path_foo in actual_list_foo,
85*7594170eSAndroid Build Coastguard Worker        ("Input file %s not present or incorrect in Bazel action for " +
86*7594170eSAndroid Build Coastguard Worker         "target foo. Actual list of inputs: %s") % (
87*7594170eSAndroid Build Coastguard Worker            expected_path_foo,
88*7594170eSAndroid Build Coastguard Worker            actual_list_foo,
89*7594170eSAndroid Build Coastguard Worker        ),
90*7594170eSAndroid Build Coastguard Worker    )
91*7594170eSAndroid Build Coastguard Worker    expected_output = get_output_and_package_dir_based_path(env, "foo.cc")
92*7594170eSAndroid Build Coastguard Worker    actual_outputs = [output.path for output in actions[0].outputs.to_list()]
93*7594170eSAndroid Build Coastguard Worker    asserts.true(
94*7594170eSAndroid Build Coastguard Worker        env,
95*7594170eSAndroid Build Coastguard Worker        expected_output in actual_outputs,
96*7594170eSAndroid Build Coastguard Worker        ("Expected output %s not present or incorrect in Bazel action\n" +
97*7594170eSAndroid Build Coastguard Worker         "Actual list of outputs: %s") % (
98*7594170eSAndroid Build Coastguard Worker            expected_output,
99*7594170eSAndroid Build Coastguard Worker            actual_outputs,
100*7594170eSAndroid Build Coastguard Worker        ),
101*7594170eSAndroid Build Coastguard Worker    )
102*7594170eSAndroid Build Coastguard Worker
103*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
104*7594170eSAndroid Build Coastguard Worker
105*7594170eSAndroid Build Coastguard Workersingle_ll_file_to_cc_test = analysistest.make(_single_ll_file_to_cc_test_impl)
106*7594170eSAndroid Build Coastguard Worker
107*7594170eSAndroid Build Coastguard Workerdef _test_single_ll_file_to_cc():
108*7594170eSAndroid Build Coastguard Worker    name = "single_ll_file_to_cc"
109*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
110*7594170eSAndroid Build Coastguard Worker    genlex(
111*7594170eSAndroid Build Coastguard Worker        name = name,
112*7594170eSAndroid Build Coastguard Worker        srcs = ["foo.ll"],
113*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
114*7594170eSAndroid Build Coastguard Worker    )
115*7594170eSAndroid Build Coastguard Worker    single_ll_file_to_cc_test(
116*7594170eSAndroid Build Coastguard Worker        name = test_name,
117*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
118*7594170eSAndroid Build Coastguard Worker    )
119*7594170eSAndroid Build Coastguard Worker    return test_name
120*7594170eSAndroid Build Coastguard Worker
121*7594170eSAndroid Build Coastguard Workerdef _multiple_files_correct_type_test_impl(ctx):
122*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
123*7594170eSAndroid Build Coastguard Worker
124*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
125*7594170eSAndroid Build Coastguard Worker
126*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, 2, len(actions))
127*7594170eSAndroid Build Coastguard Worker
128*7594170eSAndroid Build Coastguard Worker    actual_list_foo = [input.path for input in actions[0].inputs.to_list()]
129*7594170eSAndroid Build Coastguard Worker    expected_path_foo = get_package_dir_based_path(env, "foo.l")
130*7594170eSAndroid Build Coastguard Worker    asserts.true(
131*7594170eSAndroid Build Coastguard Worker        env,
132*7594170eSAndroid Build Coastguard Worker        expected_path_foo in actual_list_foo,
133*7594170eSAndroid Build Coastguard Worker        ("Input file %s not present or incorrect in Bazel action for " +
134*7594170eSAndroid Build Coastguard Worker         "target foo. Actual list of inputs: %s") % (
135*7594170eSAndroid Build Coastguard Worker            expected_path_foo,
136*7594170eSAndroid Build Coastguard Worker            actual_list_foo,
137*7594170eSAndroid Build Coastguard Worker        ),
138*7594170eSAndroid Build Coastguard Worker    )
139*7594170eSAndroid Build Coastguard Worker    actual_list_bar = [input.path for input in actions[1].inputs.to_list()]
140*7594170eSAndroid Build Coastguard Worker    expected_path_bar = get_package_dir_based_path(env, "bar.l")
141*7594170eSAndroid Build Coastguard Worker    asserts.true(
142*7594170eSAndroid Build Coastguard Worker        env,
143*7594170eSAndroid Build Coastguard Worker        expected_path_bar in actual_list_bar,
144*7594170eSAndroid Build Coastguard Worker        ("Input file %s not present or incorrect in Bazel action for " +
145*7594170eSAndroid Build Coastguard Worker         "target bar. Actual list of inputs: %s") % (
146*7594170eSAndroid Build Coastguard Worker            expected_path_bar,
147*7594170eSAndroid Build Coastguard Worker            actual_list_bar,
148*7594170eSAndroid Build Coastguard Worker        ),
149*7594170eSAndroid Build Coastguard Worker    )
150*7594170eSAndroid Build Coastguard Worker
151*7594170eSAndroid Build Coastguard Worker    expected_output = get_output_and_package_dir_based_path(env, "foo.c")
152*7594170eSAndroid Build Coastguard Worker    actual_outputs = [output.path for output in actions[0].outputs.to_list()]
153*7594170eSAndroid Build Coastguard Worker    asserts.true(
154*7594170eSAndroid Build Coastguard Worker        env,
155*7594170eSAndroid Build Coastguard Worker        expected_output in actual_outputs,
156*7594170eSAndroid Build Coastguard Worker        ("Expected output %s not present or incorrect in Bazel action" +
157*7594170eSAndroid Build Coastguard Worker         "for source file foo.l\n" +
158*7594170eSAndroid Build Coastguard Worker         "Actual list of outputs: %s") % (
159*7594170eSAndroid Build Coastguard Worker            expected_output,
160*7594170eSAndroid Build Coastguard Worker            actual_outputs,
161*7594170eSAndroid Build Coastguard Worker        ),
162*7594170eSAndroid Build Coastguard Worker    )
163*7594170eSAndroid Build Coastguard Worker    expected_output = get_output_and_package_dir_based_path(env, "bar.c")
164*7594170eSAndroid Build Coastguard Worker    actual_outputs = [output.path for output in actions[1].outputs.to_list()]
165*7594170eSAndroid Build Coastguard Worker    asserts.true(
166*7594170eSAndroid Build Coastguard Worker        env,
167*7594170eSAndroid Build Coastguard Worker        expected_output in actual_outputs,
168*7594170eSAndroid Build Coastguard Worker        ("Expected output %s not present or incorrect in Bazel action " +
169*7594170eSAndroid Build Coastguard Worker         "for source file bar.l\n" +
170*7594170eSAndroid Build Coastguard Worker         "Actual list of outputs: %s") % (
171*7594170eSAndroid Build Coastguard Worker            expected_output,
172*7594170eSAndroid Build Coastguard Worker            actual_outputs,
173*7594170eSAndroid Build Coastguard Worker        ),
174*7594170eSAndroid Build Coastguard Worker    )
175*7594170eSAndroid Build Coastguard Worker
176*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
177*7594170eSAndroid Build Coastguard Worker
178*7594170eSAndroid Build Coastguard Workermultiple_files_correct_type_test = analysistest.make(
179*7594170eSAndroid Build Coastguard Worker    _multiple_files_correct_type_test_impl,
180*7594170eSAndroid Build Coastguard Worker)
181*7594170eSAndroid Build Coastguard Worker
182*7594170eSAndroid Build Coastguard Workerdef _test_multiple_files_correct_type():
183*7594170eSAndroid Build Coastguard Worker    name = "multiple_files_correct_type"
184*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
185*7594170eSAndroid Build Coastguard Worker    genlex(
186*7594170eSAndroid Build Coastguard Worker        name = name,
187*7594170eSAndroid Build Coastguard Worker        srcs = ["foo.l", "bar.l"],
188*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
189*7594170eSAndroid Build Coastguard Worker    )
190*7594170eSAndroid Build Coastguard Worker    multiple_files_correct_type_test(
191*7594170eSAndroid Build Coastguard Worker        name = test_name,
192*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
193*7594170eSAndroid Build Coastguard Worker    )
194*7594170eSAndroid Build Coastguard Worker    return test_name
195*7594170eSAndroid Build Coastguard Worker
196*7594170eSAndroid Build Coastguard Workerdef _output_arg_test_impl(ctx):
197*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
198*7594170eSAndroid Build Coastguard Worker
199*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
200*7594170eSAndroid Build Coastguard Worker    actual_list = actions[0].argv
201*7594170eSAndroid Build Coastguard Worker    cli_string = " ".join(actions[0].argv)
202*7594170eSAndroid Build Coastguard Worker    expected_value = get_output_and_package_dir_based_path(env, "foo.c")
203*7594170eSAndroid Build Coastguard Worker
204*7594170eSAndroid Build Coastguard Worker    asserts.equals(
205*7594170eSAndroid Build Coastguard Worker        env,
206*7594170eSAndroid Build Coastguard Worker        expected_value,
207*7594170eSAndroid Build Coastguard Worker        get_arg_value(actual_list, "-o"),
208*7594170eSAndroid Build Coastguard Worker        ("Argument -o not found or had unexpected value.\n" +
209*7594170eSAndroid Build Coastguard Worker         "Expected value: %s\n" +
210*7594170eSAndroid Build Coastguard Worker         "Command: %s") % (
211*7594170eSAndroid Build Coastguard Worker            expected_value,
212*7594170eSAndroid Build Coastguard Worker            cli_string,
213*7594170eSAndroid Build Coastguard Worker        ),
214*7594170eSAndroid Build Coastguard Worker    )
215*7594170eSAndroid Build Coastguard Worker
216*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
217*7594170eSAndroid Build Coastguard Worker
218*7594170eSAndroid Build Coastguard Workeroutput_arg_test = analysistest.make(_output_arg_test_impl)
219*7594170eSAndroid Build Coastguard Worker
220*7594170eSAndroid Build Coastguard Workerdef _test_output_arg():
221*7594170eSAndroid Build Coastguard Worker    name = "output_arg"
222*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
223*7594170eSAndroid Build Coastguard Worker    genlex(
224*7594170eSAndroid Build Coastguard Worker        name = name,
225*7594170eSAndroid Build Coastguard Worker        srcs = ["foo.l"],
226*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
227*7594170eSAndroid Build Coastguard Worker    )
228*7594170eSAndroid Build Coastguard Worker    output_arg_test(
229*7594170eSAndroid Build Coastguard Worker        name = test_name,
230*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
231*7594170eSAndroid Build Coastguard Worker    )
232*7594170eSAndroid Build Coastguard Worker    return test_name
233*7594170eSAndroid Build Coastguard Worker
234*7594170eSAndroid Build Coastguard Workerdef _input_arg_test_impl(ctx):
235*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
236*7594170eSAndroid Build Coastguard Worker
237*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
238*7594170eSAndroid Build Coastguard Worker    actual_argv = actions[0].argv
239*7594170eSAndroid Build Coastguard Worker    expected_value = get_package_dir_based_path(env, "foo.l")
240*7594170eSAndroid Build Coastguard Worker
241*7594170eSAndroid Build Coastguard Worker    asserts.true(
242*7594170eSAndroid Build Coastguard Worker        env,
243*7594170eSAndroid Build Coastguard Worker        expected_value in actual_argv,
244*7594170eSAndroid Build Coastguard Worker        "Input file %s not present or incorrect in flex command args" %
245*7594170eSAndroid Build Coastguard Worker        expected_value,
246*7594170eSAndroid Build Coastguard Worker    )
247*7594170eSAndroid Build Coastguard Worker
248*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
249*7594170eSAndroid Build Coastguard Worker
250*7594170eSAndroid Build Coastguard Workerinput_arg_test = analysistest.make(_input_arg_test_impl)
251*7594170eSAndroid Build Coastguard Worker
252*7594170eSAndroid Build Coastguard Workerdef _test_input_arg():
253*7594170eSAndroid Build Coastguard Worker    name = "input_arg"
254*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
255*7594170eSAndroid Build Coastguard Worker    genlex(
256*7594170eSAndroid Build Coastguard Worker        name = name,
257*7594170eSAndroid Build Coastguard Worker        srcs = ["foo.l"],
258*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
259*7594170eSAndroid Build Coastguard Worker    )
260*7594170eSAndroid Build Coastguard Worker    input_arg_test(
261*7594170eSAndroid Build Coastguard Worker        name = test_name,
262*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
263*7594170eSAndroid Build Coastguard Worker    )
264*7594170eSAndroid Build Coastguard Worker    return test_name
265*7594170eSAndroid Build Coastguard Worker
266*7594170eSAndroid Build Coastguard Workerdef _lexopts_test_impl(ctx):
267*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
268*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
269*7594170eSAndroid Build Coastguard Worker
270*7594170eSAndroid Build Coastguard Worker    actual_argv = actions[0].argv
271*7594170eSAndroid Build Coastguard Worker    asserts.true(
272*7594170eSAndroid Build Coastguard Worker        env,
273*7594170eSAndroid Build Coastguard Worker        "foo_opt" in actual_argv,
274*7594170eSAndroid Build Coastguard Worker        ("Did not find expected lexopt foo_opt %s for target foo in test " +
275*7594170eSAndroid Build Coastguard Worker         "lexopts_test") % actual_argv,
276*7594170eSAndroid Build Coastguard Worker    )
277*7594170eSAndroid Build Coastguard Worker    asserts.true(
278*7594170eSAndroid Build Coastguard Worker        env,
279*7594170eSAndroid Build Coastguard Worker        "bar_opt" in actual_argv,
280*7594170eSAndroid Build Coastguard Worker        ("Did not find expected lexopt bar_opt %s for target bars in test " +
281*7594170eSAndroid Build Coastguard Worker         "lexopts_test") % actual_argv,
282*7594170eSAndroid Build Coastguard Worker    )
283*7594170eSAndroid Build Coastguard Worker
284*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
285*7594170eSAndroid Build Coastguard Worker
286*7594170eSAndroid Build Coastguard Workerlexopts_test = analysistest.make(_lexopts_test_impl)
287*7594170eSAndroid Build Coastguard Worker
288*7594170eSAndroid Build Coastguard Workerdef _test_lexopts():
289*7594170eSAndroid Build Coastguard Worker    name = "lexopts"
290*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
291*7594170eSAndroid Build Coastguard Worker    genlex(
292*7594170eSAndroid Build Coastguard Worker        name = name,
293*7594170eSAndroid Build Coastguard Worker        srcs = ["foo_lexopts.ll"],
294*7594170eSAndroid Build Coastguard Worker        lexopts = ["foo_opt", "bar_opt"],
295*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
296*7594170eSAndroid Build Coastguard Worker    )
297*7594170eSAndroid Build Coastguard Worker
298*7594170eSAndroid Build Coastguard Worker    lexopts_test(
299*7594170eSAndroid Build Coastguard Worker        name = test_name,
300*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
301*7594170eSAndroid Build Coastguard Worker    )
302*7594170eSAndroid Build Coastguard Worker    return test_name
303*7594170eSAndroid Build Coastguard Worker
304*7594170eSAndroid Build Coastguard Worker# TODO(b/190006308): When fixed, l and ll sources can coexist. Remove this test.
305*7594170eSAndroid Build Coastguard Workerdef _l_and_ll_files_fails_test_impl(ctx):
306*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
307*7594170eSAndroid Build Coastguard Worker
308*7594170eSAndroid Build Coastguard Worker    asserts.expect_failure(
309*7594170eSAndroid Build Coastguard Worker        env,
310*7594170eSAndroid Build Coastguard Worker        "srcs contains both .l and .ll files. Please use separate targets.",
311*7594170eSAndroid Build Coastguard Worker    )
312*7594170eSAndroid Build Coastguard Worker
313*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
314*7594170eSAndroid Build Coastguard Worker
315*7594170eSAndroid Build Coastguard Workerl_and_ll_files_fails_test = analysistest.make(
316*7594170eSAndroid Build Coastguard Worker    _l_and_ll_files_fails_test_impl,
317*7594170eSAndroid Build Coastguard Worker    expect_failure = True,
318*7594170eSAndroid Build Coastguard Worker)
319*7594170eSAndroid Build Coastguard Worker
320*7594170eSAndroid Build Coastguard Workerdef _test_l_and_ll_files_fails():
321*7594170eSAndroid Build Coastguard Worker    name = "l_and_ll_files_fails"
322*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
323*7594170eSAndroid Build Coastguard Worker    genlex(
324*7594170eSAndroid Build Coastguard Worker        name = name,
325*7594170eSAndroid Build Coastguard Worker        srcs = ["foo_fails.l", "bar_fails.ll"],
326*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
327*7594170eSAndroid Build Coastguard Worker    )
328*7594170eSAndroid Build Coastguard Worker    l_and_ll_files_fails_test(
329*7594170eSAndroid Build Coastguard Worker        name = test_name,
330*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
331*7594170eSAndroid Build Coastguard Worker    )
332*7594170eSAndroid Build Coastguard Worker    return test_name
333*7594170eSAndroid Build Coastguard Worker
334*7594170eSAndroid Build Coastguard Workerdef flex_test_suite(name):
335*7594170eSAndroid Build Coastguard Worker    native.test_suite(
336*7594170eSAndroid Build Coastguard Worker        name = name,
337*7594170eSAndroid Build Coastguard Worker        tests = [
338*7594170eSAndroid Build Coastguard Worker            _test_single_l_file_to_c(),
339*7594170eSAndroid Build Coastguard Worker            _test_single_ll_file_to_cc(),
340*7594170eSAndroid Build Coastguard Worker            _test_multiple_files_correct_type(),
341*7594170eSAndroid Build Coastguard Worker            _test_output_arg(),
342*7594170eSAndroid Build Coastguard Worker            _test_input_arg(),
343*7594170eSAndroid Build Coastguard Worker            _test_lexopts(),
344*7594170eSAndroid Build Coastguard Worker            _test_l_and_ll_files_fails(),
345*7594170eSAndroid Build Coastguard Worker        ],
346*7594170eSAndroid Build Coastguard Worker    )
347