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