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:paths.bzl", "paths") 17*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") 18*7594170eSAndroid Build Coastguard Workerload(":aidl_library.bzl", "AidlGenInfo", "aidl_library") 19*7594170eSAndroid Build Coastguard Worker 20*7594170eSAndroid Build Coastguard WorkerPACKAGE_ROOT = "build/bazel/rules/aidl" 21*7594170eSAndroid Build Coastguard Worker 22*7594170eSAndroid Build Coastguard Workerdef _test_include_dirs_are_transitive_impl(ctx): 23*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 24*7594170eSAndroid Build Coastguard Worker target_under_test = analysistest.target_under_test(env) 25*7594170eSAndroid Build Coastguard Worker 26*7594170eSAndroid Build Coastguard Worker asserts.equals( 27*7594170eSAndroid Build Coastguard Worker env, 28*7594170eSAndroid Build Coastguard Worker expected = [ 29*7594170eSAndroid Build Coastguard Worker # direct include dir is the first in the list returned from 30*7594170eSAndroid Build Coastguard Worker # transitive_include_dirs.to_list() because transitive_include_dir 31*7594170eSAndroid Build Coastguard Worker # is created with preorder 32*7594170eSAndroid Build Coastguard Worker # TODO(b/243825300): Move direct include_dir out of transitive_include_dir 33*7594170eSAndroid Build Coastguard Worker # so that we don't have to rely on preorder traversal 34*7594170eSAndroid Build Coastguard Worker paths.join(ctx.genfiles_dir.path, PACKAGE_ROOT, "_virtual_imports", "include_dirs_transitivity"), 35*7594170eSAndroid Build Coastguard Worker paths.join(ctx.genfiles_dir.path, PACKAGE_ROOT, "_virtual_imports", "include_dirs_transitivity_dependency"), 36*7594170eSAndroid Build Coastguard Worker ], 37*7594170eSAndroid Build Coastguard Worker actual = target_under_test[AidlGenInfo].transitive_include_dirs.to_list(), 38*7594170eSAndroid Build Coastguard Worker ) 39*7594170eSAndroid Build Coastguard Worker 40*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 41*7594170eSAndroid Build Coastguard Worker 42*7594170eSAndroid Build Coastguard Workerinclude_dirs_are_transitive_test = analysistest.make(_test_include_dirs_are_transitive_impl) 43*7594170eSAndroid Build Coastguard Worker 44*7594170eSAndroid Build Coastguard Workerdef _test_include_dirs_transitivity(): 45*7594170eSAndroid Build Coastguard Worker test_base_name = "include_dirs_transitivity" 46*7594170eSAndroid Build Coastguard Worker test_name = test_base_name + "_test" 47*7594170eSAndroid Build Coastguard Worker aidl_dep = test_base_name + "_dependency" 48*7594170eSAndroid Build Coastguard Worker aidl_library( 49*7594170eSAndroid Build Coastguard Worker name = test_base_name, 50*7594170eSAndroid Build Coastguard Worker strip_import_prefix = "testing", 51*7594170eSAndroid Build Coastguard Worker deps = [":" + aidl_dep], 52*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 53*7594170eSAndroid Build Coastguard Worker ) 54*7594170eSAndroid Build Coastguard Worker aidl_library( 55*7594170eSAndroid Build Coastguard Worker name = aidl_dep, 56*7594170eSAndroid Build Coastguard Worker strip_import_prefix = "testing2", 57*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 58*7594170eSAndroid Build Coastguard Worker ) 59*7594170eSAndroid Build Coastguard Worker include_dirs_are_transitive_test( 60*7594170eSAndroid Build Coastguard Worker name = test_name, 61*7594170eSAndroid Build Coastguard Worker target_under_test = test_base_name, 62*7594170eSAndroid Build Coastguard Worker ) 63*7594170eSAndroid Build Coastguard Worker return [ 64*7594170eSAndroid Build Coastguard Worker test_name, 65*7594170eSAndroid Build Coastguard Worker ] 66*7594170eSAndroid Build Coastguard Worker 67*7594170eSAndroid Build Coastguard Workerdef _test_empty_srcs_aggregates_deps_impl(ctx): 68*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 69*7594170eSAndroid Build Coastguard Worker target_under_test = analysistest.target_under_test(env) 70*7594170eSAndroid Build Coastguard Worker 71*7594170eSAndroid Build Coastguard Worker asserts.equals( 72*7594170eSAndroid Build Coastguard Worker env, 73*7594170eSAndroid Build Coastguard Worker expected = [], 74*7594170eSAndroid Build Coastguard Worker actual = target_under_test[AidlGenInfo].srcs.to_list(), 75*7594170eSAndroid Build Coastguard Worker ) 76*7594170eSAndroid Build Coastguard Worker 77*7594170eSAndroid Build Coastguard Worker import_path = paths.join( 78*7594170eSAndroid Build Coastguard Worker PACKAGE_ROOT, 79*7594170eSAndroid Build Coastguard Worker "_virtual_imports", 80*7594170eSAndroid Build Coastguard Worker ) 81*7594170eSAndroid Build Coastguard Worker 82*7594170eSAndroid Build Coastguard Worker asserts.equals( 83*7594170eSAndroid Build Coastguard Worker env, 84*7594170eSAndroid Build Coastguard Worker expected = [ 85*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency2", "b.aidl"), 86*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency2", "header_b.aidl"), 87*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency3", "c.aidl"), 88*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency3", "header_c.aidl"), 89*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency1", "a.aidl"), 90*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency1", "header_a.aidl"), 91*7594170eSAndroid Build Coastguard Worker ], 92*7594170eSAndroid Build Coastguard Worker actual = [ 93*7594170eSAndroid Build Coastguard Worker file.short_path 94*7594170eSAndroid Build Coastguard Worker for file in target_under_test[AidlGenInfo].transitive_srcs.to_list() 95*7594170eSAndroid Build Coastguard Worker ], 96*7594170eSAndroid Build Coastguard Worker ) 97*7594170eSAndroid Build Coastguard Worker 98*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 99*7594170eSAndroid Build Coastguard Worker 100*7594170eSAndroid Build Coastguard Workerempty_srcs_aggregates_deps_test = analysistest.make(_test_empty_srcs_aggregates_deps_impl) 101*7594170eSAndroid Build Coastguard Worker 102*7594170eSAndroid Build Coastguard Workerdef _test_hdrs_are_only_in_transitive_srcs_impl(ctx): 103*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 104*7594170eSAndroid Build Coastguard Worker target_under_test = analysistest.target_under_test(env) 105*7594170eSAndroid Build Coastguard Worker 106*7594170eSAndroid Build Coastguard Worker import_path = paths.join( 107*7594170eSAndroid Build Coastguard Worker PACKAGE_ROOT, 108*7594170eSAndroid Build Coastguard Worker "_virtual_imports", 109*7594170eSAndroid Build Coastguard Worker target_under_test.label.name, 110*7594170eSAndroid Build Coastguard Worker ) 111*7594170eSAndroid Build Coastguard Worker 112*7594170eSAndroid Build Coastguard Worker asserts.equals( 113*7594170eSAndroid Build Coastguard Worker env, 114*7594170eSAndroid Build Coastguard Worker expected = [ 115*7594170eSAndroid Build Coastguard Worker paths.join(import_path, "direct.aidl"), 116*7594170eSAndroid Build Coastguard Worker ], 117*7594170eSAndroid Build Coastguard Worker actual = [ 118*7594170eSAndroid Build Coastguard Worker file.short_path 119*7594170eSAndroid Build Coastguard Worker for file in target_under_test[AidlGenInfo].srcs.to_list() 120*7594170eSAndroid Build Coastguard Worker ], 121*7594170eSAndroid Build Coastguard Worker ) 122*7594170eSAndroid Build Coastguard Worker 123*7594170eSAndroid Build Coastguard Worker asserts.equals( 124*7594170eSAndroid Build Coastguard Worker env, 125*7594170eSAndroid Build Coastguard Worker expected = [ 126*7594170eSAndroid Build Coastguard Worker paths.join(import_path, "header_direct.aidl"), 127*7594170eSAndroid Build Coastguard Worker ], 128*7594170eSAndroid Build Coastguard Worker actual = [ 129*7594170eSAndroid Build Coastguard Worker file.short_path 130*7594170eSAndroid Build Coastguard Worker for file in target_under_test[AidlGenInfo].hdrs.to_list() 131*7594170eSAndroid Build Coastguard Worker ], 132*7594170eSAndroid Build Coastguard Worker ) 133*7594170eSAndroid Build Coastguard Worker 134*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 135*7594170eSAndroid Build Coastguard Worker 136*7594170eSAndroid Build Coastguard Workerhdrs_are_only_in_transitive_srcs_test = analysistest.make(_test_hdrs_are_only_in_transitive_srcs_impl) 137*7594170eSAndroid Build Coastguard Worker 138*7594170eSAndroid Build Coastguard Workerdef _test_transitive_srcs_contains_direct_and_transitive_srcs_impl(ctx): 139*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 140*7594170eSAndroid Build Coastguard Worker target_under_test = analysistest.target_under_test(env) 141*7594170eSAndroid Build Coastguard Worker 142*7594170eSAndroid Build Coastguard Worker import_path = paths.join( 143*7594170eSAndroid Build Coastguard Worker PACKAGE_ROOT, 144*7594170eSAndroid Build Coastguard Worker "_virtual_imports", 145*7594170eSAndroid Build Coastguard Worker ) 146*7594170eSAndroid Build Coastguard Worker 147*7594170eSAndroid Build Coastguard Worker asserts.equals( 148*7594170eSAndroid Build Coastguard Worker env, 149*7594170eSAndroid Build Coastguard Worker expected = [ 150*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name, "direct.aidl"), 151*7594170eSAndroid Build Coastguard Worker ], 152*7594170eSAndroid Build Coastguard Worker actual = [ 153*7594170eSAndroid Build Coastguard Worker file.short_path 154*7594170eSAndroid Build Coastguard Worker for file in target_under_test[AidlGenInfo].srcs.to_list() 155*7594170eSAndroid Build Coastguard Worker ], 156*7594170eSAndroid Build Coastguard Worker ) 157*7594170eSAndroid Build Coastguard Worker 158*7594170eSAndroid Build Coastguard Worker asserts.equals( 159*7594170eSAndroid Build Coastguard Worker env, 160*7594170eSAndroid Build Coastguard Worker expected = [ 161*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency2", "b.aidl"), 162*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency2", "header_b.aidl"), 163*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency3", "c.aidl"), 164*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency3", "header_c.aidl"), 165*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency1", "a.aidl"), 166*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name + "_dependency1", "header_a.aidl"), 167*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name, "direct.aidl"), 168*7594170eSAndroid Build Coastguard Worker paths.join(import_path, target_under_test.label.name, "header_direct.aidl"), 169*7594170eSAndroid Build Coastguard Worker ], 170*7594170eSAndroid Build Coastguard Worker actual = [ 171*7594170eSAndroid Build Coastguard Worker file.short_path 172*7594170eSAndroid Build Coastguard Worker for file in target_under_test[AidlGenInfo].transitive_srcs.to_list() 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 Workertransitive_srcs_contains_direct_and_transitive_srcs_test = analysistest.make( 179*7594170eSAndroid Build Coastguard Worker _test_transitive_srcs_contains_direct_and_transitive_srcs_impl, 180*7594170eSAndroid Build Coastguard Worker) 181*7594170eSAndroid Build Coastguard Worker 182*7594170eSAndroid Build Coastguard Workerdef _generate_test_targets(name): 183*7594170eSAndroid Build Coastguard Worker aidl_dep1 = name + "_dependency1" 184*7594170eSAndroid Build Coastguard Worker aidl_dep2 = name + "_dependency2" 185*7594170eSAndroid Build Coastguard Worker aidl_dep3 = name + "_dependency3" 186*7594170eSAndroid Build Coastguard Worker aidl_library( 187*7594170eSAndroid Build Coastguard Worker name = aidl_dep1, 188*7594170eSAndroid Build Coastguard Worker srcs = ["a.aidl"], 189*7594170eSAndroid Build Coastguard Worker hdrs = ["header_a.aidl"], 190*7594170eSAndroid Build Coastguard Worker deps = [ 191*7594170eSAndroid Build Coastguard Worker ":" + aidl_dep2, 192*7594170eSAndroid Build Coastguard Worker ":" + aidl_dep3, 193*7594170eSAndroid Build Coastguard Worker ], 194*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 195*7594170eSAndroid Build Coastguard Worker ) 196*7594170eSAndroid Build Coastguard Worker aidl_library( 197*7594170eSAndroid Build Coastguard Worker name = aidl_dep2, 198*7594170eSAndroid Build Coastguard Worker srcs = ["b.aidl"], 199*7594170eSAndroid Build Coastguard Worker hdrs = ["header_b.aidl"], 200*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 201*7594170eSAndroid Build Coastguard Worker ) 202*7594170eSAndroid Build Coastguard Worker aidl_library( 203*7594170eSAndroid Build Coastguard Worker name = aidl_dep3, 204*7594170eSAndroid Build Coastguard Worker srcs = ["c.aidl"], 205*7594170eSAndroid Build Coastguard Worker hdrs = ["header_c.aidl"], 206*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 207*7594170eSAndroid Build Coastguard Worker ) 208*7594170eSAndroid Build Coastguard Worker return aidl_dep1 209*7594170eSAndroid Build Coastguard Worker 210*7594170eSAndroid Build Coastguard Workerdef _test_empty_srcs_aggregates_deps(): 211*7594170eSAndroid Build Coastguard Worker test_base_name = "empty_srcs_aggregates_deps" 212*7594170eSAndroid Build Coastguard Worker test_name = test_base_name + "_test" 213*7594170eSAndroid Build Coastguard Worker 214*7594170eSAndroid Build Coastguard Worker aidl_dep1 = _generate_test_targets(test_base_name) 215*7594170eSAndroid Build Coastguard Worker aidl_library( 216*7594170eSAndroid Build Coastguard Worker name = test_base_name, 217*7594170eSAndroid Build Coastguard Worker deps = [":" + aidl_dep1], 218*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 219*7594170eSAndroid Build Coastguard Worker ) 220*7594170eSAndroid Build Coastguard Worker empty_srcs_aggregates_deps_test( 221*7594170eSAndroid Build Coastguard Worker name = test_name, 222*7594170eSAndroid Build Coastguard Worker target_under_test = test_base_name, 223*7594170eSAndroid Build Coastguard Worker ) 224*7594170eSAndroid Build Coastguard Worker return [ 225*7594170eSAndroid Build Coastguard Worker test_name, 226*7594170eSAndroid Build Coastguard Worker ] 227*7594170eSAndroid Build Coastguard Worker 228*7594170eSAndroid Build Coastguard Workerdef _test_transitive_srcs_contains_direct_and_transitive_srcs(): 229*7594170eSAndroid Build Coastguard Worker test_base_name = "transitive_srcs_contains_direct_and_transitive_srcs" 230*7594170eSAndroid Build Coastguard Worker srcs_test_name = test_base_name + "_srcs" 231*7594170eSAndroid Build Coastguard Worker hdrs_test_name = test_base_name + "_hdrs" 232*7594170eSAndroid Build Coastguard Worker 233*7594170eSAndroid Build Coastguard Worker aidl_dep1 = _generate_test_targets(test_base_name) 234*7594170eSAndroid Build Coastguard Worker aidl_library( 235*7594170eSAndroid Build Coastguard Worker name = test_base_name, 236*7594170eSAndroid Build Coastguard Worker srcs = ["direct.aidl"], 237*7594170eSAndroid Build Coastguard Worker hdrs = ["header_direct.aidl"], 238*7594170eSAndroid Build Coastguard Worker deps = [":" + aidl_dep1], 239*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 240*7594170eSAndroid Build Coastguard Worker ) 241*7594170eSAndroid Build Coastguard Worker transitive_srcs_contains_direct_and_transitive_srcs_test( 242*7594170eSAndroid Build Coastguard Worker name = srcs_test_name, 243*7594170eSAndroid Build Coastguard Worker target_under_test = test_base_name, 244*7594170eSAndroid Build Coastguard Worker ) 245*7594170eSAndroid Build Coastguard Worker hdrs_are_only_in_transitive_srcs_test( 246*7594170eSAndroid Build Coastguard Worker name = hdrs_test_name, 247*7594170eSAndroid Build Coastguard Worker target_under_test = test_base_name, 248*7594170eSAndroid Build Coastguard Worker ) 249*7594170eSAndroid Build Coastguard Worker return [ 250*7594170eSAndroid Build Coastguard Worker srcs_test_name, 251*7594170eSAndroid Build Coastguard Worker hdrs_test_name, 252*7594170eSAndroid Build Coastguard Worker ] 253*7594170eSAndroid Build Coastguard Worker 254*7594170eSAndroid Build Coastguard Workerdef aidl_library_test_suite(name): 255*7594170eSAndroid Build Coastguard Worker native.test_suite( 256*7594170eSAndroid Build Coastguard Worker name = name, 257*7594170eSAndroid Build Coastguard Worker tests = _test_include_dirs_transitivity() + 258*7594170eSAndroid Build Coastguard Worker _test_transitive_srcs_contains_direct_and_transitive_srcs() + 259*7594170eSAndroid Build Coastguard Worker _test_empty_srcs_aggregates_deps(), 260*7594170eSAndroid Build Coastguard Worker ) 261