1*333d2b36SAndroid Build Coastguard Worker// Copyright 2019 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage android 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "reflect" 19*333d2b36SAndroid Build Coastguard Worker "runtime" 20*333d2b36SAndroid Build Coastguard Worker "testing" 21*333d2b36SAndroid Build Coastguard Worker 22*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 23*333d2b36SAndroid Build Coastguard Worker) 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Workertype Named struct { 26*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 27*333d2b36SAndroid Build Coastguard Worker B *string 28*333d2b36SAndroid Build Coastguard Worker} 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Workertype NamedAllFiltered struct { 31*333d2b36SAndroid Build Coastguard Worker A *string 32*333d2b36SAndroid Build Coastguard Worker} 33*333d2b36SAndroid Build Coastguard Worker 34*333d2b36SAndroid Build Coastguard Workertype NamedNoneFiltered struct { 35*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 36*333d2b36SAndroid Build Coastguard Worker} 37*333d2b36SAndroid Build Coastguard Worker 38*333d2b36SAndroid Build Coastguard Workerfunc TestFilterArchStruct(t *testing.T) { 39*333d2b36SAndroid Build Coastguard Worker tests := []struct { 40*333d2b36SAndroid Build Coastguard Worker name string 41*333d2b36SAndroid Build Coastguard Worker in interface{} 42*333d2b36SAndroid Build Coastguard Worker out interface{} 43*333d2b36SAndroid Build Coastguard Worker filtered bool 44*333d2b36SAndroid Build Coastguard Worker }{ 45*333d2b36SAndroid Build Coastguard Worker // Property tests 46*333d2b36SAndroid Build Coastguard Worker { 47*333d2b36SAndroid Build Coastguard Worker name: "basic", 48*333d2b36SAndroid Build Coastguard Worker in: &struct { 49*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 50*333d2b36SAndroid Build Coastguard Worker B *string 51*333d2b36SAndroid Build Coastguard Worker }{}, 52*333d2b36SAndroid Build Coastguard Worker out: &struct { 53*333d2b36SAndroid Build Coastguard Worker A *string 54*333d2b36SAndroid Build Coastguard Worker }{}, 55*333d2b36SAndroid Build Coastguard Worker filtered: true, 56*333d2b36SAndroid Build Coastguard Worker }, 57*333d2b36SAndroid Build Coastguard Worker { 58*333d2b36SAndroid Build Coastguard Worker name: "tags", 59*333d2b36SAndroid Build Coastguard Worker in: &struct { 60*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 61*333d2b36SAndroid Build Coastguard Worker B *string `android:"arch_variant,path"` 62*333d2b36SAndroid Build Coastguard Worker C *string `android:"arch_variant,path,variant_prepend"` 63*333d2b36SAndroid Build Coastguard Worker D *string `android:"path,variant_prepend,arch_variant"` 64*333d2b36SAndroid Build Coastguard Worker E *string `android:"path"` 65*333d2b36SAndroid Build Coastguard Worker F *string 66*333d2b36SAndroid Build Coastguard Worker }{}, 67*333d2b36SAndroid Build Coastguard Worker out: &struct { 68*333d2b36SAndroid Build Coastguard Worker A *string 69*333d2b36SAndroid Build Coastguard Worker B *string 70*333d2b36SAndroid Build Coastguard Worker C *string 71*333d2b36SAndroid Build Coastguard Worker D *string 72*333d2b36SAndroid Build Coastguard Worker }{}, 73*333d2b36SAndroid Build Coastguard Worker filtered: true, 74*333d2b36SAndroid Build Coastguard Worker }, 75*333d2b36SAndroid Build Coastguard Worker { 76*333d2b36SAndroid Build Coastguard Worker name: "all filtered", 77*333d2b36SAndroid Build Coastguard Worker in: &struct { 78*333d2b36SAndroid Build Coastguard Worker A *string 79*333d2b36SAndroid Build Coastguard Worker }{}, 80*333d2b36SAndroid Build Coastguard Worker out: nil, 81*333d2b36SAndroid Build Coastguard Worker filtered: true, 82*333d2b36SAndroid Build Coastguard Worker }, 83*333d2b36SAndroid Build Coastguard Worker { 84*333d2b36SAndroid Build Coastguard Worker name: "none filtered", 85*333d2b36SAndroid Build Coastguard Worker in: &struct { 86*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 87*333d2b36SAndroid Build Coastguard Worker }{}, 88*333d2b36SAndroid Build Coastguard Worker out: &struct { 89*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 90*333d2b36SAndroid Build Coastguard Worker }{}, 91*333d2b36SAndroid Build Coastguard Worker filtered: false, 92*333d2b36SAndroid Build Coastguard Worker }, 93*333d2b36SAndroid Build Coastguard Worker 94*333d2b36SAndroid Build Coastguard Worker // Sub-struct tests 95*333d2b36SAndroid Build Coastguard Worker { 96*333d2b36SAndroid Build Coastguard Worker name: "substruct", 97*333d2b36SAndroid Build Coastguard Worker in: &struct { 98*333d2b36SAndroid Build Coastguard Worker A struct { 99*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 100*333d2b36SAndroid Build Coastguard Worker B *string 101*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 102*333d2b36SAndroid Build Coastguard Worker }{}, 103*333d2b36SAndroid Build Coastguard Worker out: &struct { 104*333d2b36SAndroid Build Coastguard Worker A struct { 105*333d2b36SAndroid Build Coastguard Worker A *string 106*333d2b36SAndroid Build Coastguard Worker } 107*333d2b36SAndroid Build Coastguard Worker }{}, 108*333d2b36SAndroid Build Coastguard Worker filtered: true, 109*333d2b36SAndroid Build Coastguard Worker }, 110*333d2b36SAndroid Build Coastguard Worker { 111*333d2b36SAndroid Build Coastguard Worker name: "substruct all filtered", 112*333d2b36SAndroid Build Coastguard Worker in: &struct { 113*333d2b36SAndroid Build Coastguard Worker A struct { 114*333d2b36SAndroid Build Coastguard Worker A *string 115*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 116*333d2b36SAndroid Build Coastguard Worker }{}, 117*333d2b36SAndroid Build Coastguard Worker out: nil, 118*333d2b36SAndroid Build Coastguard Worker filtered: true, 119*333d2b36SAndroid Build Coastguard Worker }, 120*333d2b36SAndroid Build Coastguard Worker { 121*333d2b36SAndroid Build Coastguard Worker name: "substruct none filtered", 122*333d2b36SAndroid Build Coastguard Worker in: &struct { 123*333d2b36SAndroid Build Coastguard Worker A struct { 124*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 125*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 126*333d2b36SAndroid Build Coastguard Worker }{}, 127*333d2b36SAndroid Build Coastguard Worker out: &struct { 128*333d2b36SAndroid Build Coastguard Worker A struct { 129*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 130*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 131*333d2b36SAndroid Build Coastguard Worker }{}, 132*333d2b36SAndroid Build Coastguard Worker filtered: false, 133*333d2b36SAndroid Build Coastguard Worker }, 134*333d2b36SAndroid Build Coastguard Worker 135*333d2b36SAndroid Build Coastguard Worker // Named sub-struct tests 136*333d2b36SAndroid Build Coastguard Worker { 137*333d2b36SAndroid Build Coastguard Worker name: "named substruct", 138*333d2b36SAndroid Build Coastguard Worker in: &struct { 139*333d2b36SAndroid Build Coastguard Worker A Named `android:"arch_variant"` 140*333d2b36SAndroid Build Coastguard Worker }{}, 141*333d2b36SAndroid Build Coastguard Worker out: &struct { 142*333d2b36SAndroid Build Coastguard Worker A struct { 143*333d2b36SAndroid Build Coastguard Worker A *string 144*333d2b36SAndroid Build Coastguard Worker } 145*333d2b36SAndroid Build Coastguard Worker }{}, 146*333d2b36SAndroid Build Coastguard Worker filtered: true, 147*333d2b36SAndroid Build Coastguard Worker }, 148*333d2b36SAndroid Build Coastguard Worker { 149*333d2b36SAndroid Build Coastguard Worker name: "substruct all filtered", 150*333d2b36SAndroid Build Coastguard Worker in: &struct { 151*333d2b36SAndroid Build Coastguard Worker A NamedAllFiltered `android:"arch_variant"` 152*333d2b36SAndroid Build Coastguard Worker }{}, 153*333d2b36SAndroid Build Coastguard Worker out: nil, 154*333d2b36SAndroid Build Coastguard Worker filtered: true, 155*333d2b36SAndroid Build Coastguard Worker }, 156*333d2b36SAndroid Build Coastguard Worker { 157*333d2b36SAndroid Build Coastguard Worker name: "substruct none filtered", 158*333d2b36SAndroid Build Coastguard Worker in: &struct { 159*333d2b36SAndroid Build Coastguard Worker A NamedNoneFiltered `android:"arch_variant"` 160*333d2b36SAndroid Build Coastguard Worker }{}, 161*333d2b36SAndroid Build Coastguard Worker out: &struct { 162*333d2b36SAndroid Build Coastguard Worker A NamedNoneFiltered `android:"arch_variant"` 163*333d2b36SAndroid Build Coastguard Worker }{}, 164*333d2b36SAndroid Build Coastguard Worker filtered: false, 165*333d2b36SAndroid Build Coastguard Worker }, 166*333d2b36SAndroid Build Coastguard Worker 167*333d2b36SAndroid Build Coastguard Worker // Pointer to sub-struct tests 168*333d2b36SAndroid Build Coastguard Worker { 169*333d2b36SAndroid Build Coastguard Worker name: "pointer substruct", 170*333d2b36SAndroid Build Coastguard Worker in: &struct { 171*333d2b36SAndroid Build Coastguard Worker A *struct { 172*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 173*333d2b36SAndroid Build Coastguard Worker B *string 174*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 175*333d2b36SAndroid Build Coastguard Worker }{}, 176*333d2b36SAndroid Build Coastguard Worker out: &struct { 177*333d2b36SAndroid Build Coastguard Worker A *struct { 178*333d2b36SAndroid Build Coastguard Worker A *string 179*333d2b36SAndroid Build Coastguard Worker } 180*333d2b36SAndroid Build Coastguard Worker }{}, 181*333d2b36SAndroid Build Coastguard Worker filtered: true, 182*333d2b36SAndroid Build Coastguard Worker }, 183*333d2b36SAndroid Build Coastguard Worker { 184*333d2b36SAndroid Build Coastguard Worker name: "pointer substruct all filtered", 185*333d2b36SAndroid Build Coastguard Worker in: &struct { 186*333d2b36SAndroid Build Coastguard Worker A *struct { 187*333d2b36SAndroid Build Coastguard Worker A *string 188*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 189*333d2b36SAndroid Build Coastguard Worker }{}, 190*333d2b36SAndroid Build Coastguard Worker out: nil, 191*333d2b36SAndroid Build Coastguard Worker filtered: true, 192*333d2b36SAndroid Build Coastguard Worker }, 193*333d2b36SAndroid Build Coastguard Worker { 194*333d2b36SAndroid Build Coastguard Worker name: "pointer substruct none filtered", 195*333d2b36SAndroid Build Coastguard Worker in: &struct { 196*333d2b36SAndroid Build Coastguard Worker A *struct { 197*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 198*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 199*333d2b36SAndroid Build Coastguard Worker }{}, 200*333d2b36SAndroid Build Coastguard Worker out: &struct { 201*333d2b36SAndroid Build Coastguard Worker A *struct { 202*333d2b36SAndroid Build Coastguard Worker A *string `android:"arch_variant"` 203*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 204*333d2b36SAndroid Build Coastguard Worker }{}, 205*333d2b36SAndroid Build Coastguard Worker filtered: false, 206*333d2b36SAndroid Build Coastguard Worker }, 207*333d2b36SAndroid Build Coastguard Worker 208*333d2b36SAndroid Build Coastguard Worker // Pointer to named sub-struct tests 209*333d2b36SAndroid Build Coastguard Worker { 210*333d2b36SAndroid Build Coastguard Worker name: "pointer named substruct", 211*333d2b36SAndroid Build Coastguard Worker in: &struct { 212*333d2b36SAndroid Build Coastguard Worker A *Named `android:"arch_variant"` 213*333d2b36SAndroid Build Coastguard Worker }{}, 214*333d2b36SAndroid Build Coastguard Worker out: &struct { 215*333d2b36SAndroid Build Coastguard Worker A *struct { 216*333d2b36SAndroid Build Coastguard Worker A *string 217*333d2b36SAndroid Build Coastguard Worker } 218*333d2b36SAndroid Build Coastguard Worker }{}, 219*333d2b36SAndroid Build Coastguard Worker filtered: true, 220*333d2b36SAndroid Build Coastguard Worker }, 221*333d2b36SAndroid Build Coastguard Worker { 222*333d2b36SAndroid Build Coastguard Worker name: "pointer substruct all filtered", 223*333d2b36SAndroid Build Coastguard Worker in: &struct { 224*333d2b36SAndroid Build Coastguard Worker A *NamedAllFiltered `android:"arch_variant"` 225*333d2b36SAndroid Build Coastguard Worker }{}, 226*333d2b36SAndroid Build Coastguard Worker out: nil, 227*333d2b36SAndroid Build Coastguard Worker filtered: true, 228*333d2b36SAndroid Build Coastguard Worker }, 229*333d2b36SAndroid Build Coastguard Worker { 230*333d2b36SAndroid Build Coastguard Worker name: "pointer substruct none filtered", 231*333d2b36SAndroid Build Coastguard Worker in: &struct { 232*333d2b36SAndroid Build Coastguard Worker A *NamedNoneFiltered `android:"arch_variant"` 233*333d2b36SAndroid Build Coastguard Worker }{}, 234*333d2b36SAndroid Build Coastguard Worker out: &struct { 235*333d2b36SAndroid Build Coastguard Worker A *NamedNoneFiltered `android:"arch_variant"` 236*333d2b36SAndroid Build Coastguard Worker }{}, 237*333d2b36SAndroid Build Coastguard Worker filtered: false, 238*333d2b36SAndroid Build Coastguard Worker }, 239*333d2b36SAndroid Build Coastguard Worker } 240*333d2b36SAndroid Build Coastguard Worker 241*333d2b36SAndroid Build Coastguard Worker for _, test := range tests { 242*333d2b36SAndroid Build Coastguard Worker t.Run(test.name, func(t *testing.T) { 243*333d2b36SAndroid Build Coastguard Worker out, filtered := proptools.FilterPropertyStruct(reflect.TypeOf(test.in), filterArchStruct) 244*333d2b36SAndroid Build Coastguard Worker if filtered != test.filtered { 245*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected filtered %v, got %v", test.filtered, filtered) 246*333d2b36SAndroid Build Coastguard Worker } 247*333d2b36SAndroid Build Coastguard Worker expected := reflect.TypeOf(test.out) 248*333d2b36SAndroid Build Coastguard Worker if out != expected { 249*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected type %v, got %v", expected, out) 250*333d2b36SAndroid Build Coastguard Worker } 251*333d2b36SAndroid Build Coastguard Worker }) 252*333d2b36SAndroid Build Coastguard Worker } 253*333d2b36SAndroid Build Coastguard Worker} 254*333d2b36SAndroid Build Coastguard Worker 255*333d2b36SAndroid Build Coastguard Workertype archTestModule struct { 256*333d2b36SAndroid Build Coastguard Worker ModuleBase 257*333d2b36SAndroid Build Coastguard Worker props struct { 258*333d2b36SAndroid Build Coastguard Worker Deps []string 259*333d2b36SAndroid Build Coastguard Worker } 260*333d2b36SAndroid Build Coastguard Worker} 261*333d2b36SAndroid Build Coastguard Worker 262*333d2b36SAndroid Build Coastguard Workerfunc (m *archTestMultiTargetsModule) GenerateAndroidBuildActions(ctx ModuleContext) { 263*333d2b36SAndroid Build Coastguard Worker} 264*333d2b36SAndroid Build Coastguard Worker 265*333d2b36SAndroid Build Coastguard Workerfunc (m *archTestMultiTargetsModule) DepsMutator(ctx BottomUpMutatorContext) { 266*333d2b36SAndroid Build Coastguard Worker ctx.AddDependency(ctx.Module(), nil, m.props.Deps...) 267*333d2b36SAndroid Build Coastguard Worker} 268*333d2b36SAndroid Build Coastguard Worker 269*333d2b36SAndroid Build Coastguard Workerfunc archTestMultiTargetsModuleFactory() Module { 270*333d2b36SAndroid Build Coastguard Worker m := &archTestMultiTargetsModule{} 271*333d2b36SAndroid Build Coastguard Worker m.AddProperties(&m.props) 272*333d2b36SAndroid Build Coastguard Worker InitAndroidMultiTargetsArchModule(m, HostAndDeviceSupported, MultilibCommon) 273*333d2b36SAndroid Build Coastguard Worker return m 274*333d2b36SAndroid Build Coastguard Worker} 275*333d2b36SAndroid Build Coastguard Worker 276*333d2b36SAndroid Build Coastguard Workertype archTestMultiTargetsModule struct { 277*333d2b36SAndroid Build Coastguard Worker ModuleBase 278*333d2b36SAndroid Build Coastguard Worker props struct { 279*333d2b36SAndroid Build Coastguard Worker Deps []string 280*333d2b36SAndroid Build Coastguard Worker } 281*333d2b36SAndroid Build Coastguard Worker} 282*333d2b36SAndroid Build Coastguard Worker 283*333d2b36SAndroid Build Coastguard Workerfunc (m *archTestModule) GenerateAndroidBuildActions(ctx ModuleContext) { 284*333d2b36SAndroid Build Coastguard Worker} 285*333d2b36SAndroid Build Coastguard Worker 286*333d2b36SAndroid Build Coastguard Workerfunc (m *archTestModule) DepsMutator(ctx BottomUpMutatorContext) { 287*333d2b36SAndroid Build Coastguard Worker ctx.AddDependency(ctx.Module(), nil, m.props.Deps...) 288*333d2b36SAndroid Build Coastguard Worker} 289*333d2b36SAndroid Build Coastguard Worker 290*333d2b36SAndroid Build Coastguard Workerfunc archTestModuleFactory() Module { 291*333d2b36SAndroid Build Coastguard Worker m := &archTestModule{} 292*333d2b36SAndroid Build Coastguard Worker m.AddProperties(&m.props) 293*333d2b36SAndroid Build Coastguard Worker InitAndroidArchModule(m, HostAndDeviceSupported, MultilibBoth) 294*333d2b36SAndroid Build Coastguard Worker return m 295*333d2b36SAndroid Build Coastguard Worker} 296*333d2b36SAndroid Build Coastguard Worker 297*333d2b36SAndroid Build Coastguard Workervar prepareForArchTest = GroupFixturePreparers( 298*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithArchMutator, 299*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 300*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("module", archTestModuleFactory) 301*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("multi_targets_module", archTestMultiTargetsModuleFactory) 302*333d2b36SAndroid Build Coastguard Worker }), 303*333d2b36SAndroid Build Coastguard Worker) 304*333d2b36SAndroid Build Coastguard Worker 305*333d2b36SAndroid Build Coastguard Workerfunc TestArchMutator(t *testing.T) { 306*333d2b36SAndroid Build Coastguard Worker var buildOSVariants []string 307*333d2b36SAndroid Build Coastguard Worker var buildOS64Variants []string 308*333d2b36SAndroid Build Coastguard Worker var buildOS32Variants []string 309*333d2b36SAndroid Build Coastguard Worker var buildOSCommonVariant string 310*333d2b36SAndroid Build Coastguard Worker 311*333d2b36SAndroid Build Coastguard Worker switch runtime.GOOS { 312*333d2b36SAndroid Build Coastguard Worker case "linux": 313*333d2b36SAndroid Build Coastguard Worker buildOSVariants = []string{"linux_glibc_x86_64", "linux_glibc_x86"} 314*333d2b36SAndroid Build Coastguard Worker buildOS64Variants = []string{"linux_glibc_x86_64"} 315*333d2b36SAndroid Build Coastguard Worker buildOS32Variants = []string{"linux_glibc_x86"} 316*333d2b36SAndroid Build Coastguard Worker buildOSCommonVariant = "linux_glibc_common" 317*333d2b36SAndroid Build Coastguard Worker case "darwin": 318*333d2b36SAndroid Build Coastguard Worker buildOSVariants = []string{"darwin_x86_64"} 319*333d2b36SAndroid Build Coastguard Worker buildOS64Variants = []string{"darwin_x86_64"} 320*333d2b36SAndroid Build Coastguard Worker buildOS32Variants = nil 321*333d2b36SAndroid Build Coastguard Worker buildOSCommonVariant = "darwin_common" 322*333d2b36SAndroid Build Coastguard Worker } 323*333d2b36SAndroid Build Coastguard Worker 324*333d2b36SAndroid Build Coastguard Worker bp := ` 325*333d2b36SAndroid Build Coastguard Worker module { 326*333d2b36SAndroid Build Coastguard Worker name: "foo", 327*333d2b36SAndroid Build Coastguard Worker } 328*333d2b36SAndroid Build Coastguard Worker 329*333d2b36SAndroid Build Coastguard Worker module { 330*333d2b36SAndroid Build Coastguard Worker name: "bar", 331*333d2b36SAndroid Build Coastguard Worker host_supported: true, 332*333d2b36SAndroid Build Coastguard Worker } 333*333d2b36SAndroid Build Coastguard Worker 334*333d2b36SAndroid Build Coastguard Worker module { 335*333d2b36SAndroid Build Coastguard Worker name: "nohostcross", 336*333d2b36SAndroid Build Coastguard Worker host_supported: true, 337*333d2b36SAndroid Build Coastguard Worker host_cross_supported: false, 338*333d2b36SAndroid Build Coastguard Worker } 339*333d2b36SAndroid Build Coastguard Worker 340*333d2b36SAndroid Build Coastguard Worker module { 341*333d2b36SAndroid Build Coastguard Worker name: "baz", 342*333d2b36SAndroid Build Coastguard Worker device_supported: false, 343*333d2b36SAndroid Build Coastguard Worker } 344*333d2b36SAndroid Build Coastguard Worker 345*333d2b36SAndroid Build Coastguard Worker module { 346*333d2b36SAndroid Build Coastguard Worker name: "qux", 347*333d2b36SAndroid Build Coastguard Worker host_supported: true, 348*333d2b36SAndroid Build Coastguard Worker compile_multilib: "32", 349*333d2b36SAndroid Build Coastguard Worker } 350*333d2b36SAndroid Build Coastguard Worker 351*333d2b36SAndroid Build Coastguard Worker module { 352*333d2b36SAndroid Build Coastguard Worker name: "first", 353*333d2b36SAndroid Build Coastguard Worker host_supported: true, 354*333d2b36SAndroid Build Coastguard Worker compile_multilib: "first", 355*333d2b36SAndroid Build Coastguard Worker } 356*333d2b36SAndroid Build Coastguard Worker 357*333d2b36SAndroid Build Coastguard Worker multi_targets_module { 358*333d2b36SAndroid Build Coastguard Worker name: "multi_targets", 359*333d2b36SAndroid Build Coastguard Worker host_supported: true, 360*333d2b36SAndroid Build Coastguard Worker } 361*333d2b36SAndroid Build Coastguard Worker ` 362*333d2b36SAndroid Build Coastguard Worker 363*333d2b36SAndroid Build Coastguard Worker testCases := []struct { 364*333d2b36SAndroid Build Coastguard Worker name string 365*333d2b36SAndroid Build Coastguard Worker preparer FixturePreparer 366*333d2b36SAndroid Build Coastguard Worker fooVariants []string 367*333d2b36SAndroid Build Coastguard Worker barVariants []string 368*333d2b36SAndroid Build Coastguard Worker noHostCrossVariants []string 369*333d2b36SAndroid Build Coastguard Worker bazVariants []string 370*333d2b36SAndroid Build Coastguard Worker quxVariants []string 371*333d2b36SAndroid Build Coastguard Worker firstVariants []string 372*333d2b36SAndroid Build Coastguard Worker 373*333d2b36SAndroid Build Coastguard Worker multiTargetVariants []string 374*333d2b36SAndroid Build Coastguard Worker multiTargetVariantsMap map[string][]string 375*333d2b36SAndroid Build Coastguard Worker 376*333d2b36SAndroid Build Coastguard Worker goOS string 377*333d2b36SAndroid Build Coastguard Worker }{ 378*333d2b36SAndroid Build Coastguard Worker { 379*333d2b36SAndroid Build Coastguard Worker name: "normal", 380*333d2b36SAndroid Build Coastguard Worker preparer: nil, 381*333d2b36SAndroid Build Coastguard Worker fooVariants: []string{"android_arm64_armv8-a", "android_arm_armv7-a-neon"}, 382*333d2b36SAndroid Build Coastguard Worker barVariants: append(buildOSVariants, "android_arm64_armv8-a", "android_arm_armv7-a-neon"), 383*333d2b36SAndroid Build Coastguard Worker noHostCrossVariants: append(buildOSVariants, "android_arm64_armv8-a", "android_arm_armv7-a-neon"), 384*333d2b36SAndroid Build Coastguard Worker bazVariants: nil, 385*333d2b36SAndroid Build Coastguard Worker quxVariants: append(buildOS32Variants, "android_arm_armv7-a-neon"), 386*333d2b36SAndroid Build Coastguard Worker firstVariants: append(buildOS64Variants, "android_arm64_armv8-a"), 387*333d2b36SAndroid Build Coastguard Worker multiTargetVariants: []string{buildOSCommonVariant, "android_common"}, 388*333d2b36SAndroid Build Coastguard Worker multiTargetVariantsMap: map[string][]string{ 389*333d2b36SAndroid Build Coastguard Worker buildOSCommonVariant: buildOS64Variants, 390*333d2b36SAndroid Build Coastguard Worker "android_common": {"android_arm64_armv8-a"}, 391*333d2b36SAndroid Build Coastguard Worker }}, 392*333d2b36SAndroid Build Coastguard Worker { 393*333d2b36SAndroid Build Coastguard Worker name: "host-only", 394*333d2b36SAndroid Build Coastguard Worker preparer: FixtureModifyConfig(func(config Config) { 395*333d2b36SAndroid Build Coastguard Worker config.BuildOSTarget = Target{} 396*333d2b36SAndroid Build Coastguard Worker config.BuildOSCommonTarget = Target{} 397*333d2b36SAndroid Build Coastguard Worker config.Targets[Android] = nil 398*333d2b36SAndroid Build Coastguard Worker }), 399*333d2b36SAndroid Build Coastguard Worker fooVariants: nil, 400*333d2b36SAndroid Build Coastguard Worker barVariants: buildOSVariants, 401*333d2b36SAndroid Build Coastguard Worker noHostCrossVariants: buildOSVariants, 402*333d2b36SAndroid Build Coastguard Worker bazVariants: nil, 403*333d2b36SAndroid Build Coastguard Worker quxVariants: buildOS32Variants, 404*333d2b36SAndroid Build Coastguard Worker firstVariants: buildOS64Variants, 405*333d2b36SAndroid Build Coastguard Worker multiTargetVariants: []string{buildOSCommonVariant}, 406*333d2b36SAndroid Build Coastguard Worker multiTargetVariantsMap: map[string][]string{ 407*333d2b36SAndroid Build Coastguard Worker buildOSCommonVariant: buildOS64Variants, 408*333d2b36SAndroid Build Coastguard Worker }, 409*333d2b36SAndroid Build Coastguard Worker }, 410*333d2b36SAndroid Build Coastguard Worker { 411*333d2b36SAndroid Build Coastguard Worker name: "same arch host and host cross", 412*333d2b36SAndroid Build Coastguard Worker preparer: FixtureModifyConfig(func(config Config) { 413*333d2b36SAndroid Build Coastguard Worker ModifyTestConfigForMusl(config) 414*333d2b36SAndroid Build Coastguard Worker modifyTestConfigForMuslArm64HostCross(config) 415*333d2b36SAndroid Build Coastguard Worker }), 416*333d2b36SAndroid Build Coastguard Worker fooVariants: []string{"android_arm64_armv8-a", "android_arm_armv7-a-neon"}, 417*333d2b36SAndroid Build Coastguard Worker barVariants: []string{"linux_musl_x86_64", "linux_musl_arm64", "linux_musl_x86", "android_arm64_armv8-a", "android_arm_armv7-a-neon"}, 418*333d2b36SAndroid Build Coastguard Worker noHostCrossVariants: []string{"linux_musl_x86_64", "linux_musl_x86", "android_arm64_armv8-a", "android_arm_armv7-a-neon"}, 419*333d2b36SAndroid Build Coastguard Worker bazVariants: nil, 420*333d2b36SAndroid Build Coastguard Worker quxVariants: []string{"linux_musl_x86", "android_arm_armv7-a-neon"}, 421*333d2b36SAndroid Build Coastguard Worker firstVariants: []string{"linux_musl_x86_64", "linux_musl_arm64", "android_arm64_armv8-a"}, 422*333d2b36SAndroid Build Coastguard Worker multiTargetVariants: []string{"linux_musl_common", "android_common"}, 423*333d2b36SAndroid Build Coastguard Worker multiTargetVariantsMap: map[string][]string{ 424*333d2b36SAndroid Build Coastguard Worker "linux_musl_common": {"linux_musl_x86_64"}, 425*333d2b36SAndroid Build Coastguard Worker "android_common": {"android_arm64_armv8-a"}, 426*333d2b36SAndroid Build Coastguard Worker }, 427*333d2b36SAndroid Build Coastguard Worker goOS: "linux", 428*333d2b36SAndroid Build Coastguard Worker }, 429*333d2b36SAndroid Build Coastguard Worker } 430*333d2b36SAndroid Build Coastguard Worker 431*333d2b36SAndroid Build Coastguard Worker enabledVariants := func(ctx *TestContext, name string) []string { 432*333d2b36SAndroid Build Coastguard Worker var ret []string 433*333d2b36SAndroid Build Coastguard Worker variants := ctx.ModuleVariantsForTests(name) 434*333d2b36SAndroid Build Coastguard Worker for _, variant := range variants { 435*333d2b36SAndroid Build Coastguard Worker m := ctx.ModuleForTests(name, variant) 436*333d2b36SAndroid Build Coastguard Worker if m.Module().Enabled(PanickingConfigAndErrorContext(ctx)) { 437*333d2b36SAndroid Build Coastguard Worker ret = append(ret, variant) 438*333d2b36SAndroid Build Coastguard Worker } 439*333d2b36SAndroid Build Coastguard Worker } 440*333d2b36SAndroid Build Coastguard Worker return ret 441*333d2b36SAndroid Build Coastguard Worker } 442*333d2b36SAndroid Build Coastguard Worker 443*333d2b36SAndroid Build Coastguard Worker moduleMultiTargets := func(ctx *TestContext, name string, variant string) []string { 444*333d2b36SAndroid Build Coastguard Worker var ret []string 445*333d2b36SAndroid Build Coastguard Worker targets := ctx.ModuleForTests(name, variant).Module().MultiTargets() 446*333d2b36SAndroid Build Coastguard Worker for _, t := range targets { 447*333d2b36SAndroid Build Coastguard Worker ret = append(ret, t.String()) 448*333d2b36SAndroid Build Coastguard Worker } 449*333d2b36SAndroid Build Coastguard Worker return ret 450*333d2b36SAndroid Build Coastguard Worker } 451*333d2b36SAndroid Build Coastguard Worker 452*333d2b36SAndroid Build Coastguard Worker for _, tt := range testCases { 453*333d2b36SAndroid Build Coastguard Worker t.Run(tt.name, func(t *testing.T) { 454*333d2b36SAndroid Build Coastguard Worker if tt.goOS != "" && tt.goOS != runtime.GOOS { 455*333d2b36SAndroid Build Coastguard Worker t.Skipf("requries runtime.GOOS %s", tt.goOS) 456*333d2b36SAndroid Build Coastguard Worker } 457*333d2b36SAndroid Build Coastguard Worker 458*333d2b36SAndroid Build Coastguard Worker result := GroupFixturePreparers( 459*333d2b36SAndroid Build Coastguard Worker prepareForArchTest, 460*333d2b36SAndroid Build Coastguard Worker // Test specific preparer 461*333d2b36SAndroid Build Coastguard Worker OptionalFixturePreparer(tt.preparer), 462*333d2b36SAndroid Build Coastguard Worker FixtureWithRootAndroidBp(bp), 463*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 464*333d2b36SAndroid Build Coastguard Worker ctx := result.TestContext 465*333d2b36SAndroid Build Coastguard Worker 466*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "foo"), tt.fooVariants; !reflect.DeepEqual(w, g) { 467*333d2b36SAndroid Build Coastguard Worker t.Errorf("want foo variants:\n%q\ngot:\n%q\n", w, g) 468*333d2b36SAndroid Build Coastguard Worker } 469*333d2b36SAndroid Build Coastguard Worker 470*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "bar"), tt.barVariants; !reflect.DeepEqual(w, g) { 471*333d2b36SAndroid Build Coastguard Worker t.Errorf("want bar variants:\n%q\ngot:\n%q\n", w, g) 472*333d2b36SAndroid Build Coastguard Worker } 473*333d2b36SAndroid Build Coastguard Worker 474*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "nohostcross"), tt.noHostCrossVariants; !reflect.DeepEqual(w, g) { 475*333d2b36SAndroid Build Coastguard Worker t.Errorf("want nohostcross variants:\n%q\ngot:\n%q\n", w, g) 476*333d2b36SAndroid Build Coastguard Worker } 477*333d2b36SAndroid Build Coastguard Worker 478*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "baz"), tt.bazVariants; !reflect.DeepEqual(w, g) { 479*333d2b36SAndroid Build Coastguard Worker t.Errorf("want baz variants:\n%q\ngot:\n%q\n", w, g) 480*333d2b36SAndroid Build Coastguard Worker } 481*333d2b36SAndroid Build Coastguard Worker 482*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "qux"), tt.quxVariants; !reflect.DeepEqual(w, g) { 483*333d2b36SAndroid Build Coastguard Worker t.Errorf("want qux variants:\n%q\ngot:\n%q\n", w, g) 484*333d2b36SAndroid Build Coastguard Worker } 485*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "first"), tt.firstVariants; !reflect.DeepEqual(w, g) { 486*333d2b36SAndroid Build Coastguard Worker t.Errorf("want first variants:\n%q\ngot:\n%q\n", w, g) 487*333d2b36SAndroid Build Coastguard Worker } 488*333d2b36SAndroid Build Coastguard Worker 489*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "multi_targets"), tt.multiTargetVariants; !reflect.DeepEqual(w, g) { 490*333d2b36SAndroid Build Coastguard Worker t.Fatalf("want multi_target variants:\n%q\ngot:\n%q\n", w, g) 491*333d2b36SAndroid Build Coastguard Worker } 492*333d2b36SAndroid Build Coastguard Worker 493*333d2b36SAndroid Build Coastguard Worker for _, variant := range tt.multiTargetVariants { 494*333d2b36SAndroid Build Coastguard Worker targets := moduleMultiTargets(ctx, "multi_targets", variant) 495*333d2b36SAndroid Build Coastguard Worker if g, w := targets, tt.multiTargetVariantsMap[variant]; !reflect.DeepEqual(w, g) { 496*333d2b36SAndroid Build Coastguard Worker t.Errorf("want ctx.MultiTarget() for %q:\n%q\ngot:\n%q\n", variant, w, g) 497*333d2b36SAndroid Build Coastguard Worker } 498*333d2b36SAndroid Build Coastguard Worker } 499*333d2b36SAndroid Build Coastguard Worker }) 500*333d2b36SAndroid Build Coastguard Worker } 501*333d2b36SAndroid Build Coastguard Worker} 502*333d2b36SAndroid Build Coastguard Worker 503*333d2b36SAndroid Build Coastguard Workerfunc TestArchMutatorNativeBridge(t *testing.T) { 504*333d2b36SAndroid Build Coastguard Worker bp := ` 505*333d2b36SAndroid Build Coastguard Worker // This module is only enabled for x86. 506*333d2b36SAndroid Build Coastguard Worker module { 507*333d2b36SAndroid Build Coastguard Worker name: "foo", 508*333d2b36SAndroid Build Coastguard Worker } 509*333d2b36SAndroid Build Coastguard Worker 510*333d2b36SAndroid Build Coastguard Worker // This module is enabled for x86 and arm (via native bridge). 511*333d2b36SAndroid Build Coastguard Worker module { 512*333d2b36SAndroid Build Coastguard Worker name: "bar", 513*333d2b36SAndroid Build Coastguard Worker native_bridge_supported: true, 514*333d2b36SAndroid Build Coastguard Worker } 515*333d2b36SAndroid Build Coastguard Worker 516*333d2b36SAndroid Build Coastguard Worker // This module is enabled for arm (native_bridge) only. 517*333d2b36SAndroid Build Coastguard Worker module { 518*333d2b36SAndroid Build Coastguard Worker name: "baz", 519*333d2b36SAndroid Build Coastguard Worker native_bridge_supported: true, 520*333d2b36SAndroid Build Coastguard Worker enabled: false, 521*333d2b36SAndroid Build Coastguard Worker target: { 522*333d2b36SAndroid Build Coastguard Worker native_bridge: { 523*333d2b36SAndroid Build Coastguard Worker enabled: true, 524*333d2b36SAndroid Build Coastguard Worker } 525*333d2b36SAndroid Build Coastguard Worker } 526*333d2b36SAndroid Build Coastguard Worker } 527*333d2b36SAndroid Build Coastguard Worker ` 528*333d2b36SAndroid Build Coastguard Worker 529*333d2b36SAndroid Build Coastguard Worker testCases := []struct { 530*333d2b36SAndroid Build Coastguard Worker name string 531*333d2b36SAndroid Build Coastguard Worker preparer FixturePreparer 532*333d2b36SAndroid Build Coastguard Worker fooVariants []string 533*333d2b36SAndroid Build Coastguard Worker barVariants []string 534*333d2b36SAndroid Build Coastguard Worker bazVariants []string 535*333d2b36SAndroid Build Coastguard Worker }{ 536*333d2b36SAndroid Build Coastguard Worker { 537*333d2b36SAndroid Build Coastguard Worker name: "normal", 538*333d2b36SAndroid Build Coastguard Worker preparer: nil, 539*333d2b36SAndroid Build Coastguard Worker fooVariants: []string{"android_x86_64_silvermont", "android_x86_silvermont"}, 540*333d2b36SAndroid Build Coastguard Worker barVariants: []string{"android_x86_64_silvermont", "android_native_bridge_arm64_armv8-a", "android_x86_silvermont", "android_native_bridge_arm_armv7-a-neon"}, 541*333d2b36SAndroid Build Coastguard Worker bazVariants: []string{"android_native_bridge_arm64_armv8-a", "android_native_bridge_arm_armv7-a-neon"}, 542*333d2b36SAndroid Build Coastguard Worker }, 543*333d2b36SAndroid Build Coastguard Worker } 544*333d2b36SAndroid Build Coastguard Worker 545*333d2b36SAndroid Build Coastguard Worker enabledVariants := func(ctx *TestContext, name string) []string { 546*333d2b36SAndroid Build Coastguard Worker var ret []string 547*333d2b36SAndroid Build Coastguard Worker variants := ctx.ModuleVariantsForTests(name) 548*333d2b36SAndroid Build Coastguard Worker for _, variant := range variants { 549*333d2b36SAndroid Build Coastguard Worker m := ctx.ModuleForTests(name, variant) 550*333d2b36SAndroid Build Coastguard Worker if m.Module().Enabled(PanickingConfigAndErrorContext(ctx)) { 551*333d2b36SAndroid Build Coastguard Worker ret = append(ret, variant) 552*333d2b36SAndroid Build Coastguard Worker } 553*333d2b36SAndroid Build Coastguard Worker } 554*333d2b36SAndroid Build Coastguard Worker return ret 555*333d2b36SAndroid Build Coastguard Worker } 556*333d2b36SAndroid Build Coastguard Worker 557*333d2b36SAndroid Build Coastguard Worker for _, tt := range testCases { 558*333d2b36SAndroid Build Coastguard Worker t.Run(tt.name, func(t *testing.T) { 559*333d2b36SAndroid Build Coastguard Worker result := GroupFixturePreparers( 560*333d2b36SAndroid Build Coastguard Worker prepareForArchTest, 561*333d2b36SAndroid Build Coastguard Worker // Test specific preparer 562*333d2b36SAndroid Build Coastguard Worker OptionalFixturePreparer(tt.preparer), 563*333d2b36SAndroid Build Coastguard Worker PrepareForNativeBridgeEnabled, 564*333d2b36SAndroid Build Coastguard Worker FixtureWithRootAndroidBp(bp), 565*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 566*333d2b36SAndroid Build Coastguard Worker 567*333d2b36SAndroid Build Coastguard Worker ctx := result.TestContext 568*333d2b36SAndroid Build Coastguard Worker 569*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "foo"), tt.fooVariants; !reflect.DeepEqual(w, g) { 570*333d2b36SAndroid Build Coastguard Worker t.Errorf("want foo variants:\n%q\ngot:\n%q\n", w, g) 571*333d2b36SAndroid Build Coastguard Worker } 572*333d2b36SAndroid Build Coastguard Worker 573*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "bar"), tt.barVariants; !reflect.DeepEqual(w, g) { 574*333d2b36SAndroid Build Coastguard Worker t.Errorf("want bar variants:\n%q\ngot:\n%q\n", w, g) 575*333d2b36SAndroid Build Coastguard Worker } 576*333d2b36SAndroid Build Coastguard Worker 577*333d2b36SAndroid Build Coastguard Worker if g, w := enabledVariants(ctx, "baz"), tt.bazVariants; !reflect.DeepEqual(w, g) { 578*333d2b36SAndroid Build Coastguard Worker t.Errorf("want qux variants:\n%q\ngot:\n%q\n", w, g) 579*333d2b36SAndroid Build Coastguard Worker } 580*333d2b36SAndroid Build Coastguard Worker }) 581*333d2b36SAndroid Build Coastguard Worker } 582*333d2b36SAndroid Build Coastguard Worker} 583*333d2b36SAndroid Build Coastguard Worker 584*333d2b36SAndroid Build Coastguard Workertype testArchPropertiesModule struct { 585*333d2b36SAndroid Build Coastguard Worker ModuleBase 586*333d2b36SAndroid Build Coastguard Worker properties struct { 587*333d2b36SAndroid Build Coastguard Worker A []string `android:"arch_variant"` 588*333d2b36SAndroid Build Coastguard Worker } 589*333d2b36SAndroid Build Coastguard Worker} 590*333d2b36SAndroid Build Coastguard Worker 591*333d2b36SAndroid Build Coastguard Workerfunc (testArchPropertiesModule) GenerateAndroidBuildActions(ctx ModuleContext) {} 592*333d2b36SAndroid Build Coastguard Worker 593*333d2b36SAndroid Build Coastguard Worker// Module property "a" does not have "variant_prepend" tag. 594*333d2b36SAndroid Build Coastguard Worker// Expected variant property orders are based on this fact. 595*333d2b36SAndroid Build Coastguard Workerfunc TestArchProperties(t *testing.T) { 596*333d2b36SAndroid Build Coastguard Worker bp := ` 597*333d2b36SAndroid Build Coastguard Worker module { 598*333d2b36SAndroid Build Coastguard Worker name: "foo", 599*333d2b36SAndroid Build Coastguard Worker a: ["root"], 600*333d2b36SAndroid Build Coastguard Worker arch: { 601*333d2b36SAndroid Build Coastguard Worker arm: { 602*333d2b36SAndroid Build Coastguard Worker a: ["arm"], 603*333d2b36SAndroid Build Coastguard Worker }, 604*333d2b36SAndroid Build Coastguard Worker arm64: { 605*333d2b36SAndroid Build Coastguard Worker a: ["arm64"], 606*333d2b36SAndroid Build Coastguard Worker }, 607*333d2b36SAndroid Build Coastguard Worker riscv64: { a: ["riscv64"] }, 608*333d2b36SAndroid Build Coastguard Worker x86: { a: ["x86"] }, 609*333d2b36SAndroid Build Coastguard Worker x86_64: { a: ["x86_64"] }, 610*333d2b36SAndroid Build Coastguard Worker }, 611*333d2b36SAndroid Build Coastguard Worker multilib: { 612*333d2b36SAndroid Build Coastguard Worker lib32: { a: ["lib32"] }, 613*333d2b36SAndroid Build Coastguard Worker lib64: { a: ["lib64"] }, 614*333d2b36SAndroid Build Coastguard Worker }, 615*333d2b36SAndroid Build Coastguard Worker target: { 616*333d2b36SAndroid Build Coastguard Worker bionic: { a: ["bionic"] }, 617*333d2b36SAndroid Build Coastguard Worker host: { a: ["host"] }, 618*333d2b36SAndroid Build Coastguard Worker android: { a: ["android"] }, 619*333d2b36SAndroid Build Coastguard Worker glibc: { a: ["glibc"] }, 620*333d2b36SAndroid Build Coastguard Worker musl: { a: ["musl"] }, 621*333d2b36SAndroid Build Coastguard Worker linux_bionic: { a: ["linux_bionic"] }, 622*333d2b36SAndroid Build Coastguard Worker linux: { a: ["linux"] }, 623*333d2b36SAndroid Build Coastguard Worker host_linux: { a: ["host_linux"] }, 624*333d2b36SAndroid Build Coastguard Worker linux_glibc: { a: ["linux_glibc"] }, 625*333d2b36SAndroid Build Coastguard Worker linux_musl: { a: ["linux_musl"] }, 626*333d2b36SAndroid Build Coastguard Worker windows: { a: ["windows"], enabled: true }, 627*333d2b36SAndroid Build Coastguard Worker darwin: { a: ["darwin"] }, 628*333d2b36SAndroid Build Coastguard Worker not_windows: { a: ["not_windows"] }, 629*333d2b36SAndroid Build Coastguard Worker android32: { a: ["android32"] }, 630*333d2b36SAndroid Build Coastguard Worker android64: { a: ["android64"] }, 631*333d2b36SAndroid Build Coastguard Worker android_arm: { a: ["android_arm"] }, 632*333d2b36SAndroid Build Coastguard Worker android_arm64: { a: ["android_arm64"] }, 633*333d2b36SAndroid Build Coastguard Worker linux_x86: { a: ["linux_x86"] }, 634*333d2b36SAndroid Build Coastguard Worker linux_x86_64: { a: ["linux_x86_64"] }, 635*333d2b36SAndroid Build Coastguard Worker linux_glibc_x86: { a: ["linux_glibc_x86"] }, 636*333d2b36SAndroid Build Coastguard Worker linux_glibc_x86_64: { a: ["linux_glibc_x86_64"] }, 637*333d2b36SAndroid Build Coastguard Worker linux_musl_x86: { a: ["linux_musl_x86"] }, 638*333d2b36SAndroid Build Coastguard Worker linux_musl_x86_64: { a: ["linux_musl_x86_64"] }, 639*333d2b36SAndroid Build Coastguard Worker darwin_x86_64: { a: ["darwin_x86_64"] }, 640*333d2b36SAndroid Build Coastguard Worker windows_x86: { a: ["windows_x86"] }, 641*333d2b36SAndroid Build Coastguard Worker windows_x86_64: { a: ["windows_x86_64"] }, 642*333d2b36SAndroid Build Coastguard Worker }, 643*333d2b36SAndroid Build Coastguard Worker } 644*333d2b36SAndroid Build Coastguard Worker ` 645*333d2b36SAndroid Build Coastguard Worker 646*333d2b36SAndroid Build Coastguard Worker type result struct { 647*333d2b36SAndroid Build Coastguard Worker module string 648*333d2b36SAndroid Build Coastguard Worker variant string 649*333d2b36SAndroid Build Coastguard Worker property []string 650*333d2b36SAndroid Build Coastguard Worker } 651*333d2b36SAndroid Build Coastguard Worker 652*333d2b36SAndroid Build Coastguard Worker testCases := []struct { 653*333d2b36SAndroid Build Coastguard Worker name string 654*333d2b36SAndroid Build Coastguard Worker goOS string 655*333d2b36SAndroid Build Coastguard Worker preparer FixturePreparer 656*333d2b36SAndroid Build Coastguard Worker results []result 657*333d2b36SAndroid Build Coastguard Worker }{ 658*333d2b36SAndroid Build Coastguard Worker { 659*333d2b36SAndroid Build Coastguard Worker name: "default", 660*333d2b36SAndroid Build Coastguard Worker results: []result{ 661*333d2b36SAndroid Build Coastguard Worker { 662*333d2b36SAndroid Build Coastguard Worker module: "foo", 663*333d2b36SAndroid Build Coastguard Worker variant: "android_arm64_armv8-a", 664*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "linux", "bionic", "android", "android64", "arm64", "lib64", "android_arm64"}, 665*333d2b36SAndroid Build Coastguard Worker }, 666*333d2b36SAndroid Build Coastguard Worker { 667*333d2b36SAndroid Build Coastguard Worker module: "foo", 668*333d2b36SAndroid Build Coastguard Worker variant: "android_arm_armv7-a-neon", 669*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "linux", "bionic", "android", "android64", "arm", "lib32", "android_arm"}, 670*333d2b36SAndroid Build Coastguard Worker }, 671*333d2b36SAndroid Build Coastguard Worker }, 672*333d2b36SAndroid Build Coastguard Worker }, 673*333d2b36SAndroid Build Coastguard Worker { 674*333d2b36SAndroid Build Coastguard Worker name: "linux", 675*333d2b36SAndroid Build Coastguard Worker goOS: "linux", 676*333d2b36SAndroid Build Coastguard Worker results: []result{ 677*333d2b36SAndroid Build Coastguard Worker { 678*333d2b36SAndroid Build Coastguard Worker module: "foo", 679*333d2b36SAndroid Build Coastguard Worker variant: "linux_glibc_x86_64", 680*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "host", "linux", "host_linux", "glibc", "linux_glibc", "not_windows", "x86_64", "lib64", "linux_x86_64", "linux_glibc_x86_64"}, 681*333d2b36SAndroid Build Coastguard Worker }, 682*333d2b36SAndroid Build Coastguard Worker { 683*333d2b36SAndroid Build Coastguard Worker module: "foo", 684*333d2b36SAndroid Build Coastguard Worker variant: "linux_glibc_x86", 685*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "host", "linux", "host_linux", "glibc", "linux_glibc", "not_windows", "x86", "lib32", "linux_x86", "linux_glibc_x86"}, 686*333d2b36SAndroid Build Coastguard Worker }, 687*333d2b36SAndroid Build Coastguard Worker }, 688*333d2b36SAndroid Build Coastguard Worker }, 689*333d2b36SAndroid Build Coastguard Worker { 690*333d2b36SAndroid Build Coastguard Worker name: "windows", 691*333d2b36SAndroid Build Coastguard Worker goOS: "linux", 692*333d2b36SAndroid Build Coastguard Worker preparer: FixtureModifyConfig(func(config Config) { 693*333d2b36SAndroid Build Coastguard Worker config.Targets[Windows] = []Target{ 694*333d2b36SAndroid Build Coastguard Worker {Windows, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", true}, 695*333d2b36SAndroid Build Coastguard Worker {Windows, Arch{ArchType: X86}, NativeBridgeDisabled, "", "", true}, 696*333d2b36SAndroid Build Coastguard Worker } 697*333d2b36SAndroid Build Coastguard Worker }), 698*333d2b36SAndroid Build Coastguard Worker results: []result{ 699*333d2b36SAndroid Build Coastguard Worker { 700*333d2b36SAndroid Build Coastguard Worker module: "foo", 701*333d2b36SAndroid Build Coastguard Worker variant: "windows_x86_64", 702*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "host", "windows", "x86_64", "lib64", "windows_x86_64"}, 703*333d2b36SAndroid Build Coastguard Worker }, 704*333d2b36SAndroid Build Coastguard Worker { 705*333d2b36SAndroid Build Coastguard Worker module: "foo", 706*333d2b36SAndroid Build Coastguard Worker variant: "windows_x86", 707*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "host", "windows", "x86", "lib32", "windows_x86"}, 708*333d2b36SAndroid Build Coastguard Worker }, 709*333d2b36SAndroid Build Coastguard Worker }, 710*333d2b36SAndroid Build Coastguard Worker }, 711*333d2b36SAndroid Build Coastguard Worker { 712*333d2b36SAndroid Build Coastguard Worker name: "linux_musl", 713*333d2b36SAndroid Build Coastguard Worker goOS: "linux", 714*333d2b36SAndroid Build Coastguard Worker preparer: FixtureModifyConfig(ModifyTestConfigForMusl), 715*333d2b36SAndroid Build Coastguard Worker results: []result{ 716*333d2b36SAndroid Build Coastguard Worker { 717*333d2b36SAndroid Build Coastguard Worker module: "foo", 718*333d2b36SAndroid Build Coastguard Worker variant: "linux_musl_x86_64", 719*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "host", "linux", "host_linux", "musl", "linux_musl", "not_windows", "x86_64", "lib64", "linux_x86_64", "linux_musl_x86_64"}, 720*333d2b36SAndroid Build Coastguard Worker }, 721*333d2b36SAndroid Build Coastguard Worker { 722*333d2b36SAndroid Build Coastguard Worker module: "foo", 723*333d2b36SAndroid Build Coastguard Worker variant: "linux_musl_x86", 724*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "host", "linux", "host_linux", "musl", "linux_musl", "not_windows", "x86", "lib32", "linux_x86", "linux_musl_x86"}, 725*333d2b36SAndroid Build Coastguard Worker }, 726*333d2b36SAndroid Build Coastguard Worker }, 727*333d2b36SAndroid Build Coastguard Worker }, 728*333d2b36SAndroid Build Coastguard Worker { 729*333d2b36SAndroid Build Coastguard Worker name: "darwin", 730*333d2b36SAndroid Build Coastguard Worker goOS: "darwin", 731*333d2b36SAndroid Build Coastguard Worker results: []result{ 732*333d2b36SAndroid Build Coastguard Worker { 733*333d2b36SAndroid Build Coastguard Worker module: "foo", 734*333d2b36SAndroid Build Coastguard Worker variant: "darwin_x86_64", 735*333d2b36SAndroid Build Coastguard Worker property: []string{"root", "host", "darwin", "not_windows", "x86_64", "lib64", "darwin_x86_64"}, 736*333d2b36SAndroid Build Coastguard Worker }, 737*333d2b36SAndroid Build Coastguard Worker }, 738*333d2b36SAndroid Build Coastguard Worker }, 739*333d2b36SAndroid Build Coastguard Worker } 740*333d2b36SAndroid Build Coastguard Worker 741*333d2b36SAndroid Build Coastguard Worker for _, tt := range testCases { 742*333d2b36SAndroid Build Coastguard Worker t.Run(tt.name, func(t *testing.T) { 743*333d2b36SAndroid Build Coastguard Worker if tt.goOS != "" && tt.goOS != runtime.GOOS { 744*333d2b36SAndroid Build Coastguard Worker t.Skipf("test requires runtime.GOOS==%s, got %s", tt.goOS, runtime.GOOS) 745*333d2b36SAndroid Build Coastguard Worker } 746*333d2b36SAndroid Build Coastguard Worker result := GroupFixturePreparers( 747*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithArchMutator, 748*333d2b36SAndroid Build Coastguard Worker OptionalFixturePreparer(tt.preparer), 749*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 750*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("module", func() Module { 751*333d2b36SAndroid Build Coastguard Worker module := &testArchPropertiesModule{} 752*333d2b36SAndroid Build Coastguard Worker module.AddProperties(&module.properties) 753*333d2b36SAndroid Build Coastguard Worker InitAndroidArchModule(module, HostAndDeviceDefault, MultilibBoth) 754*333d2b36SAndroid Build Coastguard Worker return module 755*333d2b36SAndroid Build Coastguard Worker }) 756*333d2b36SAndroid Build Coastguard Worker }), 757*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, bp) 758*333d2b36SAndroid Build Coastguard Worker 759*333d2b36SAndroid Build Coastguard Worker for _, want := range tt.results { 760*333d2b36SAndroid Build Coastguard Worker t.Run(want.module+"_"+want.variant, func(t *testing.T) { 761*333d2b36SAndroid Build Coastguard Worker got := result.ModuleForTests(want.module, want.variant).Module().(*testArchPropertiesModule).properties.A 762*333d2b36SAndroid Build Coastguard Worker AssertArrayString(t, "arch mutator property", want.property, got) 763*333d2b36SAndroid Build Coastguard Worker }) 764*333d2b36SAndroid Build Coastguard Worker } 765*333d2b36SAndroid Build Coastguard Worker }) 766*333d2b36SAndroid Build Coastguard Worker } 767*333d2b36SAndroid Build Coastguard Worker} 768