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 "fmt" 19*333d2b36SAndroid Build Coastguard Worker "io" 20*333d2b36SAndroid Build Coastguard Worker "reflect" 21*333d2b36SAndroid Build Coastguard Worker "runtime" 22*333d2b36SAndroid Build Coastguard Worker "strings" 23*333d2b36SAndroid Build Coastguard Worker "testing" 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 26*333d2b36SAndroid Build Coastguard Worker) 27*333d2b36SAndroid Build Coastguard Worker 28*333d2b36SAndroid Build Coastguard Workertype customModule struct { 29*333d2b36SAndroid Build Coastguard Worker ModuleBase 30*333d2b36SAndroid Build Coastguard Worker 31*333d2b36SAndroid Build Coastguard Worker properties struct { 32*333d2b36SAndroid Build Coastguard Worker Default_dist_files *string 33*333d2b36SAndroid Build Coastguard Worker Dist_output_file *bool 34*333d2b36SAndroid Build Coastguard Worker } 35*333d2b36SAndroid Build Coastguard Worker 36*333d2b36SAndroid Build Coastguard Worker data AndroidMkData 37*333d2b36SAndroid Build Coastguard Worker distFiles TaggedDistFiles 38*333d2b36SAndroid Build Coastguard Worker outputFile OptionalPath 39*333d2b36SAndroid Build Coastguard Worker} 40*333d2b36SAndroid Build Coastguard Worker 41*333d2b36SAndroid Build Coastguard Workerconst ( 42*333d2b36SAndroid Build Coastguard Worker defaultDistFiles_None = "none" 43*333d2b36SAndroid Build Coastguard Worker defaultDistFiles_Default = "default" 44*333d2b36SAndroid Build Coastguard Worker defaultDistFiles_Tagged = "tagged" 45*333d2b36SAndroid Build Coastguard Worker) 46*333d2b36SAndroid Build Coastguard Worker 47*333d2b36SAndroid Build Coastguard Workerfunc (m *customModule) GenerateAndroidBuildActions(ctx ModuleContext) { 48*333d2b36SAndroid Build Coastguard Worker 49*333d2b36SAndroid Build Coastguard Worker var defaultDistPaths Paths 50*333d2b36SAndroid Build Coastguard Worker 51*333d2b36SAndroid Build Coastguard Worker // If the dist_output_file: true then create an output file that is stored in 52*333d2b36SAndroid Build Coastguard Worker // the OutputFile property of the AndroidMkEntry. 53*333d2b36SAndroid Build Coastguard Worker if proptools.BoolDefault(m.properties.Dist_output_file, true) { 54*333d2b36SAndroid Build Coastguard Worker path := PathForTesting("dist-output-file.out") 55*333d2b36SAndroid Build Coastguard Worker m.outputFile = OptionalPathForPath(path) 56*333d2b36SAndroid Build Coastguard Worker 57*333d2b36SAndroid Build Coastguard Worker // Previous code would prioritize the DistFiles property over the OutputFile 58*333d2b36SAndroid Build Coastguard Worker // property in AndroidMkEntry when determining the default dist paths. 59*333d2b36SAndroid Build Coastguard Worker // Setting this first allows it to be overridden based on the 60*333d2b36SAndroid Build Coastguard Worker // default_dist_files setting replicating that previous behavior. 61*333d2b36SAndroid Build Coastguard Worker defaultDistPaths = Paths{path} 62*333d2b36SAndroid Build Coastguard Worker } 63*333d2b36SAndroid Build Coastguard Worker 64*333d2b36SAndroid Build Coastguard Worker // Based on the setting of the default_dist_files property possibly create a 65*333d2b36SAndroid Build Coastguard Worker // TaggedDistFiles structure that will be stored in the DistFiles property of 66*333d2b36SAndroid Build Coastguard Worker // the AndroidMkEntry. 67*333d2b36SAndroid Build Coastguard Worker defaultDistFiles := proptools.StringDefault(m.properties.Default_dist_files, defaultDistFiles_Tagged) 68*333d2b36SAndroid Build Coastguard Worker switch defaultDistFiles { 69*333d2b36SAndroid Build Coastguard Worker case defaultDistFiles_None: 70*333d2b36SAndroid Build Coastguard Worker m.setOutputFiles(ctx, defaultDistPaths) 71*333d2b36SAndroid Build Coastguard Worker 72*333d2b36SAndroid Build Coastguard Worker case defaultDistFiles_Default: 73*333d2b36SAndroid Build Coastguard Worker path := PathForTesting("default-dist.out") 74*333d2b36SAndroid Build Coastguard Worker defaultDistPaths = Paths{path} 75*333d2b36SAndroid Build Coastguard Worker m.setOutputFiles(ctx, defaultDistPaths) 76*333d2b36SAndroid Build Coastguard Worker m.distFiles = MakeDefaultDistFiles(path) 77*333d2b36SAndroid Build Coastguard Worker 78*333d2b36SAndroid Build Coastguard Worker case defaultDistFiles_Tagged: 79*333d2b36SAndroid Build Coastguard Worker // Module types that set AndroidMkEntry.DistFiles to the result of calling 80*333d2b36SAndroid Build Coastguard Worker // GenerateTaggedDistFiles(ctx) relied on no tag being treated as "" which 81*333d2b36SAndroid Build Coastguard Worker // meant that the default dist paths would be the same as empty-string-tag 82*333d2b36SAndroid Build Coastguard Worker // output files. In order to preserve that behavior when treating no tag 83*333d2b36SAndroid Build Coastguard Worker // as being equal to DefaultDistTag this ensures that DefaultDistTag output 84*333d2b36SAndroid Build Coastguard Worker // will be the same as empty-string-tag output. 85*333d2b36SAndroid Build Coastguard Worker defaultDistPaths = PathsForTesting("one.out") 86*333d2b36SAndroid Build Coastguard Worker m.setOutputFiles(ctx, defaultDistPaths) 87*333d2b36SAndroid Build Coastguard Worker 88*333d2b36SAndroid Build Coastguard Worker // This must be called after setting defaultDistPaths/outputFile as 89*333d2b36SAndroid Build Coastguard Worker // GenerateTaggedDistFiles calls into outputFiles property which may use 90*333d2b36SAndroid Build Coastguard Worker // those fields. 91*333d2b36SAndroid Build Coastguard Worker m.distFiles = m.GenerateTaggedDistFiles(ctx) 92*333d2b36SAndroid Build Coastguard Worker } 93*333d2b36SAndroid Build Coastguard Worker} 94*333d2b36SAndroid Build Coastguard Worker 95*333d2b36SAndroid Build Coastguard Workerfunc (m *customModule) setOutputFiles(ctx ModuleContext, defaultDistPaths Paths) { 96*333d2b36SAndroid Build Coastguard Worker ctx.SetOutputFiles(PathsForTesting("one.out"), "") 97*333d2b36SAndroid Build Coastguard Worker ctx.SetOutputFiles(PathsForTesting("two.out", "three/four.out"), ".multiple") 98*333d2b36SAndroid Build Coastguard Worker ctx.SetOutputFiles(PathsForTesting("another.out"), ".another-tag") 99*333d2b36SAndroid Build Coastguard Worker if defaultDistPaths != nil { 100*333d2b36SAndroid Build Coastguard Worker ctx.SetOutputFiles(defaultDistPaths, DefaultDistTag) 101*333d2b36SAndroid Build Coastguard Worker } 102*333d2b36SAndroid Build Coastguard Worker} 103*333d2b36SAndroid Build Coastguard Worker 104*333d2b36SAndroid Build Coastguard Workerfunc (m *customModule) AndroidMk() AndroidMkData { 105*333d2b36SAndroid Build Coastguard Worker return AndroidMkData{ 106*333d2b36SAndroid Build Coastguard Worker Custom: func(w io.Writer, name, prefix, moduleDir string, data AndroidMkData) { 107*333d2b36SAndroid Build Coastguard Worker m.data = data 108*333d2b36SAndroid Build Coastguard Worker }, 109*333d2b36SAndroid Build Coastguard Worker } 110*333d2b36SAndroid Build Coastguard Worker} 111*333d2b36SAndroid Build Coastguard Worker 112*333d2b36SAndroid Build Coastguard Workerfunc (m *customModule) AndroidMkEntries() []AndroidMkEntries { 113*333d2b36SAndroid Build Coastguard Worker return []AndroidMkEntries{ 114*333d2b36SAndroid Build Coastguard Worker { 115*333d2b36SAndroid Build Coastguard Worker Class: "CUSTOM_MODULE", 116*333d2b36SAndroid Build Coastguard Worker DistFiles: m.distFiles, 117*333d2b36SAndroid Build Coastguard Worker OutputFile: m.outputFile, 118*333d2b36SAndroid Build Coastguard Worker }, 119*333d2b36SAndroid Build Coastguard Worker } 120*333d2b36SAndroid Build Coastguard Worker} 121*333d2b36SAndroid Build Coastguard Worker 122*333d2b36SAndroid Build Coastguard Workerfunc customModuleFactory() Module { 123*333d2b36SAndroid Build Coastguard Worker module := &customModule{} 124*333d2b36SAndroid Build Coastguard Worker 125*333d2b36SAndroid Build Coastguard Worker module.AddProperties(&module.properties) 126*333d2b36SAndroid Build Coastguard Worker 127*333d2b36SAndroid Build Coastguard Worker InitAndroidModule(module) 128*333d2b36SAndroid Build Coastguard Worker return module 129*333d2b36SAndroid Build Coastguard Worker} 130*333d2b36SAndroid Build Coastguard Worker 131*333d2b36SAndroid Build Coastguard Worker// buildContextAndCustomModuleFoo creates a config object, processes the supplied 132*333d2b36SAndroid Build Coastguard Worker// bp module and then returns the config and the custom module called "foo". 133*333d2b36SAndroid Build Coastguard Workerfunc buildContextAndCustomModuleFoo(t *testing.T, bp string) (*TestContext, *customModule) { 134*333d2b36SAndroid Build Coastguard Worker t.Helper() 135*333d2b36SAndroid Build Coastguard Worker result := GroupFixturePreparers( 136*333d2b36SAndroid Build Coastguard Worker // Enable androidmk Singleton 137*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithAndroidMk, 138*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 139*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("custom", customModuleFactory) 140*333d2b36SAndroid Build Coastguard Worker }), 141*333d2b36SAndroid Build Coastguard Worker FixtureModifyProductVariables(func(variables FixtureProductVariables) { 142*333d2b36SAndroid Build Coastguard Worker variables.DeviceProduct = proptools.StringPtr("bar") 143*333d2b36SAndroid Build Coastguard Worker }), 144*333d2b36SAndroid Build Coastguard Worker FixtureWithRootAndroidBp(bp), 145*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 146*333d2b36SAndroid Build Coastguard Worker 147*333d2b36SAndroid Build Coastguard Worker module := result.ModuleForTests("foo", "").Module().(*customModule) 148*333d2b36SAndroid Build Coastguard Worker return result.TestContext, module 149*333d2b36SAndroid Build Coastguard Worker} 150*333d2b36SAndroid Build Coastguard Worker 151*333d2b36SAndroid Build Coastguard Workerfunc TestAndroidMkSingleton_PassesUpdatedAndroidMkDataToCustomCallback(t *testing.T) { 152*333d2b36SAndroid Build Coastguard Worker if runtime.GOOS == "darwin" { 153*333d2b36SAndroid Build Coastguard Worker // Device modules are not exported on Mac, so this test doesn't work. 154*333d2b36SAndroid Build Coastguard Worker t.SkipNow() 155*333d2b36SAndroid Build Coastguard Worker } 156*333d2b36SAndroid Build Coastguard Worker 157*333d2b36SAndroid Build Coastguard Worker bp := ` 158*333d2b36SAndroid Build Coastguard Worker custom { 159*333d2b36SAndroid Build Coastguard Worker name: "foo", 160*333d2b36SAndroid Build Coastguard Worker required: ["bar"], 161*333d2b36SAndroid Build Coastguard Worker host_required: ["baz"], 162*333d2b36SAndroid Build Coastguard Worker target_required: ["qux"], 163*333d2b36SAndroid Build Coastguard Worker } 164*333d2b36SAndroid Build Coastguard Worker ` 165*333d2b36SAndroid Build Coastguard Worker 166*333d2b36SAndroid Build Coastguard Worker _, m := buildContextAndCustomModuleFoo(t, bp) 167*333d2b36SAndroid Build Coastguard Worker 168*333d2b36SAndroid Build Coastguard Worker assertEqual := func(expected interface{}, actual interface{}) { 169*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(expected, actual) { 170*333d2b36SAndroid Build Coastguard Worker t.Errorf("%q expected, but got %q", expected, actual) 171*333d2b36SAndroid Build Coastguard Worker } 172*333d2b36SAndroid Build Coastguard Worker } 173*333d2b36SAndroid Build Coastguard Worker assertEqual([]string{"bar"}, m.data.Required) 174*333d2b36SAndroid Build Coastguard Worker assertEqual([]string{"baz"}, m.data.Host_required) 175*333d2b36SAndroid Build Coastguard Worker assertEqual([]string{"qux"}, m.data.Target_required) 176*333d2b36SAndroid Build Coastguard Worker} 177*333d2b36SAndroid Build Coastguard Worker 178*333d2b36SAndroid Build Coastguard Workerfunc TestGenerateDistContributionsForMake(t *testing.T) { 179*333d2b36SAndroid Build Coastguard Worker dc := &distContributions{ 180*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 181*333d2b36SAndroid Build Coastguard Worker { 182*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 183*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 184*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.out"), 185*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "other.out"), 186*333d2b36SAndroid Build Coastguard Worker }, 187*333d2b36SAndroid Build Coastguard Worker }, 188*333d2b36SAndroid Build Coastguard Worker }, 189*333d2b36SAndroid Build Coastguard Worker } 190*333d2b36SAndroid Build Coastguard Worker 191*333d2b36SAndroid Build Coastguard Worker dc.licenseMetadataFile = PathForTesting("meta_lic") 192*333d2b36SAndroid Build Coastguard Worker makeOutput := generateDistContributionsForMake(dc) 193*333d2b36SAndroid Build Coastguard Worker 194*333d2b36SAndroid Build Coastguard Worker assertStringEquals(t, `.PHONY: my_goal 195*333d2b36SAndroid Build Coastguard Worker$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic)) 196*333d2b36SAndroid Build Coastguard Worker$(call dist-for-goals,my_goal,one.out:one.out) 197*333d2b36SAndroid Build Coastguard Worker$(if $(strip $(ALL_TARGETS.two.out.META_LIC)),,$(eval ALL_TARGETS.two.out.META_LIC := meta_lic)) 198*333d2b36SAndroid Build Coastguard Worker$(call dist-for-goals,my_goal,two.out:other.out)`, strings.Join(makeOutput, "\n")) 199*333d2b36SAndroid Build Coastguard Worker} 200*333d2b36SAndroid Build Coastguard Worker 201*333d2b36SAndroid Build Coastguard Workerfunc TestGetDistForGoals(t *testing.T) { 202*333d2b36SAndroid Build Coastguard Worker bp := ` 203*333d2b36SAndroid Build Coastguard Worker custom { 204*333d2b36SAndroid Build Coastguard Worker name: "foo", 205*333d2b36SAndroid Build Coastguard Worker dist: { 206*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal", "my_other_goal"], 207*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 208*333d2b36SAndroid Build Coastguard Worker }, 209*333d2b36SAndroid Build Coastguard Worker dists: [ 210*333d2b36SAndroid Build Coastguard Worker { 211*333d2b36SAndroid Build Coastguard Worker targets: ["my_second_goal"], 212*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 213*333d2b36SAndroid Build Coastguard Worker }, 214*333d2b36SAndroid Build Coastguard Worker { 215*333d2b36SAndroid Build Coastguard Worker targets: ["my_third_goal"], 216*333d2b36SAndroid Build Coastguard Worker dir: "test/dir", 217*333d2b36SAndroid Build Coastguard Worker }, 218*333d2b36SAndroid Build Coastguard Worker { 219*333d2b36SAndroid Build Coastguard Worker targets: ["my_fourth_goal"], 220*333d2b36SAndroid Build Coastguard Worker suffix: ".suffix", 221*333d2b36SAndroid Build Coastguard Worker }, 222*333d2b36SAndroid Build Coastguard Worker { 223*333d2b36SAndroid Build Coastguard Worker targets: ["my_fifth_goal"], 224*333d2b36SAndroid Build Coastguard Worker dest: "new-name", 225*333d2b36SAndroid Build Coastguard Worker }, 226*333d2b36SAndroid Build Coastguard Worker { 227*333d2b36SAndroid Build Coastguard Worker targets: ["my_sixth_goal"], 228*333d2b36SAndroid Build Coastguard Worker dest: "new-name", 229*333d2b36SAndroid Build Coastguard Worker dir: "some/dir", 230*333d2b36SAndroid Build Coastguard Worker suffix: ".suffix", 231*333d2b36SAndroid Build Coastguard Worker }, 232*333d2b36SAndroid Build Coastguard Worker ], 233*333d2b36SAndroid Build Coastguard Worker } 234*333d2b36SAndroid Build Coastguard Worker ` 235*333d2b36SAndroid Build Coastguard Worker 236*333d2b36SAndroid Build Coastguard Worker expectedAndroidMkLines := []string{ 237*333d2b36SAndroid Build Coastguard Worker ".PHONY: my_second_goal", 238*333d2b36SAndroid Build Coastguard Worker "$(if $(strip $(ALL_TARGETS.two.out.META_LIC)),,$(eval ALL_TARGETS.two.out.META_LIC := meta_lic))", 239*333d2b36SAndroid Build Coastguard Worker "$(call dist-for-goals,my_second_goal,two.out:two.out)", 240*333d2b36SAndroid Build Coastguard Worker "$(if $(strip $(ALL_TARGETS.three/four.out.META_LIC)),,$(eval ALL_TARGETS.three/four.out.META_LIC := meta_lic))", 241*333d2b36SAndroid Build Coastguard Worker "$(call dist-for-goals,my_second_goal,three/four.out:four.out)", 242*333d2b36SAndroid Build Coastguard Worker ".PHONY: my_third_goal", 243*333d2b36SAndroid Build Coastguard Worker "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))", 244*333d2b36SAndroid Build Coastguard Worker "$(call dist-for-goals,my_third_goal,one.out:test/dir/one.out)", 245*333d2b36SAndroid Build Coastguard Worker ".PHONY: my_fourth_goal", 246*333d2b36SAndroid Build Coastguard Worker "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))", 247*333d2b36SAndroid Build Coastguard Worker "$(call dist-for-goals,my_fourth_goal,one.out:one.suffix.out)", 248*333d2b36SAndroid Build Coastguard Worker ".PHONY: my_fifth_goal", 249*333d2b36SAndroid Build Coastguard Worker "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))", 250*333d2b36SAndroid Build Coastguard Worker "$(call dist-for-goals,my_fifth_goal,one.out:new-name)", 251*333d2b36SAndroid Build Coastguard Worker ".PHONY: my_sixth_goal", 252*333d2b36SAndroid Build Coastguard Worker "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))", 253*333d2b36SAndroid Build Coastguard Worker "$(call dist-for-goals,my_sixth_goal,one.out:some/dir/new-name.suffix)", 254*333d2b36SAndroid Build Coastguard Worker ".PHONY: my_goal my_other_goal", 255*333d2b36SAndroid Build Coastguard Worker "$(if $(strip $(ALL_TARGETS.two.out.META_LIC)),,$(eval ALL_TARGETS.two.out.META_LIC := meta_lic))", 256*333d2b36SAndroid Build Coastguard Worker "$(call dist-for-goals,my_goal my_other_goal,two.out:two.out)", 257*333d2b36SAndroid Build Coastguard Worker "$(if $(strip $(ALL_TARGETS.three/four.out.META_LIC)),,$(eval ALL_TARGETS.three/four.out.META_LIC := meta_lic))", 258*333d2b36SAndroid Build Coastguard Worker "$(call dist-for-goals,my_goal my_other_goal,three/four.out:four.out)", 259*333d2b36SAndroid Build Coastguard Worker } 260*333d2b36SAndroid Build Coastguard Worker 261*333d2b36SAndroid Build Coastguard Worker ctx, module := buildContextAndCustomModuleFoo(t, bp) 262*333d2b36SAndroid Build Coastguard Worker entries := AndroidMkEntriesForTest(t, ctx, module) 263*333d2b36SAndroid Build Coastguard Worker if len(entries) != 1 { 264*333d2b36SAndroid Build Coastguard Worker t.Errorf("Expected a single AndroidMk entry, got %d", len(entries)) 265*333d2b36SAndroid Build Coastguard Worker } 266*333d2b36SAndroid Build Coastguard Worker androidMkLines := entries[0].GetDistForGoals(module) 267*333d2b36SAndroid Build Coastguard Worker 268*333d2b36SAndroid Build Coastguard Worker if len(androidMkLines) != len(expectedAndroidMkLines) { 269*333d2b36SAndroid Build Coastguard Worker t.Errorf( 270*333d2b36SAndroid Build Coastguard Worker "Expected %d AndroidMk lines, got %d:\n%v", 271*333d2b36SAndroid Build Coastguard Worker len(expectedAndroidMkLines), 272*333d2b36SAndroid Build Coastguard Worker len(androidMkLines), 273*333d2b36SAndroid Build Coastguard Worker androidMkLines, 274*333d2b36SAndroid Build Coastguard Worker ) 275*333d2b36SAndroid Build Coastguard Worker } 276*333d2b36SAndroid Build Coastguard Worker for idx, line := range androidMkLines { 277*333d2b36SAndroid Build Coastguard Worker expectedLine := strings.ReplaceAll(expectedAndroidMkLines[idx], "meta_lic", 278*333d2b36SAndroid Build Coastguard Worker OtherModuleProviderOrDefault(ctx, module, InstallFilesProvider).LicenseMetadataFile.String()) 279*333d2b36SAndroid Build Coastguard Worker if line != expectedLine { 280*333d2b36SAndroid Build Coastguard Worker t.Errorf( 281*333d2b36SAndroid Build Coastguard Worker "Expected AndroidMk line to be '%s', got '%s'", 282*333d2b36SAndroid Build Coastguard Worker expectedLine, 283*333d2b36SAndroid Build Coastguard Worker line, 284*333d2b36SAndroid Build Coastguard Worker ) 285*333d2b36SAndroid Build Coastguard Worker } 286*333d2b36SAndroid Build Coastguard Worker } 287*333d2b36SAndroid Build Coastguard Worker} 288*333d2b36SAndroid Build Coastguard Worker 289*333d2b36SAndroid Build Coastguard Workerfunc distCopyForTest(from, to string) distCopy { 290*333d2b36SAndroid Build Coastguard Worker return distCopy{PathForTesting(from), to} 291*333d2b36SAndroid Build Coastguard Worker} 292*333d2b36SAndroid Build Coastguard Worker 293*333d2b36SAndroid Build Coastguard Workerfunc TestGetDistContributions(t *testing.T) { 294*333d2b36SAndroid Build Coastguard Worker compareContributions := func(d1 *distContributions, d2 *distContributions) error { 295*333d2b36SAndroid Build Coastguard Worker if d1 == nil || d2 == nil { 296*333d2b36SAndroid Build Coastguard Worker if d1 != d2 { 297*333d2b36SAndroid Build Coastguard Worker return fmt.Errorf("pointer mismatch, expected both to be nil but they were %p and %p", d1, d2) 298*333d2b36SAndroid Build Coastguard Worker } else { 299*333d2b36SAndroid Build Coastguard Worker return nil 300*333d2b36SAndroid Build Coastguard Worker } 301*333d2b36SAndroid Build Coastguard Worker } 302*333d2b36SAndroid Build Coastguard Worker if expected, actual := len(d1.copiesForGoals), len(d2.copiesForGoals); expected != actual { 303*333d2b36SAndroid Build Coastguard Worker return fmt.Errorf("length mismatch, expected %d found %d", expected, actual) 304*333d2b36SAndroid Build Coastguard Worker } 305*333d2b36SAndroid Build Coastguard Worker 306*333d2b36SAndroid Build Coastguard Worker for i, copies1 := range d1.copiesForGoals { 307*333d2b36SAndroid Build Coastguard Worker copies2 := d2.copiesForGoals[i] 308*333d2b36SAndroid Build Coastguard Worker if expected, actual := copies1.goals, copies2.goals; expected != actual { 309*333d2b36SAndroid Build Coastguard Worker return fmt.Errorf("goals mismatch at position %d: expected %q found %q", i, expected, actual) 310*333d2b36SAndroid Build Coastguard Worker } 311*333d2b36SAndroid Build Coastguard Worker 312*333d2b36SAndroid Build Coastguard Worker if expected, actual := len(copies1.copies), len(copies2.copies); expected != actual { 313*333d2b36SAndroid Build Coastguard Worker return fmt.Errorf("length mismatch in copy instructions at position %d, expected %d found %d", i, expected, actual) 314*333d2b36SAndroid Build Coastguard Worker } 315*333d2b36SAndroid Build Coastguard Worker 316*333d2b36SAndroid Build Coastguard Worker for j, c1 := range copies1.copies { 317*333d2b36SAndroid Build Coastguard Worker c2 := copies2.copies[j] 318*333d2b36SAndroid Build Coastguard Worker if expected, actual := NormalizePathForTesting(c1.from), NormalizePathForTesting(c2.from); expected != actual { 319*333d2b36SAndroid Build Coastguard Worker return fmt.Errorf("paths mismatch at position %d.%d: expected %q found %q", i, j, expected, actual) 320*333d2b36SAndroid Build Coastguard Worker } 321*333d2b36SAndroid Build Coastguard Worker 322*333d2b36SAndroid Build Coastguard Worker if expected, actual := c1.dest, c2.dest; expected != actual { 323*333d2b36SAndroid Build Coastguard Worker return fmt.Errorf("dest mismatch at position %d.%d: expected %q found %q", i, j, expected, actual) 324*333d2b36SAndroid Build Coastguard Worker } 325*333d2b36SAndroid Build Coastguard Worker } 326*333d2b36SAndroid Build Coastguard Worker } 327*333d2b36SAndroid Build Coastguard Worker 328*333d2b36SAndroid Build Coastguard Worker return nil 329*333d2b36SAndroid Build Coastguard Worker } 330*333d2b36SAndroid Build Coastguard Worker 331*333d2b36SAndroid Build Coastguard Worker formatContributions := func(d *distContributions) string { 332*333d2b36SAndroid Build Coastguard Worker buf := &strings.Builder{} 333*333d2b36SAndroid Build Coastguard Worker if d == nil { 334*333d2b36SAndroid Build Coastguard Worker fmt.Fprint(buf, "nil") 335*333d2b36SAndroid Build Coastguard Worker } else { 336*333d2b36SAndroid Build Coastguard Worker for _, copiesForGoals := range d.copiesForGoals { 337*333d2b36SAndroid Build Coastguard Worker fmt.Fprintf(buf, " Goals: %q {\n", copiesForGoals.goals) 338*333d2b36SAndroid Build Coastguard Worker for _, c := range copiesForGoals.copies { 339*333d2b36SAndroid Build Coastguard Worker fmt.Fprintf(buf, " %s -> %s\n", NormalizePathForTesting(c.from), c.dest) 340*333d2b36SAndroid Build Coastguard Worker } 341*333d2b36SAndroid Build Coastguard Worker fmt.Fprint(buf, " }\n") 342*333d2b36SAndroid Build Coastguard Worker } 343*333d2b36SAndroid Build Coastguard Worker } 344*333d2b36SAndroid Build Coastguard Worker return buf.String() 345*333d2b36SAndroid Build Coastguard Worker } 346*333d2b36SAndroid Build Coastguard Worker 347*333d2b36SAndroid Build Coastguard Worker testHelper := func(t *testing.T, name, bp string, expectedContributions *distContributions) { 348*333d2b36SAndroid Build Coastguard Worker t.Helper() 349*333d2b36SAndroid Build Coastguard Worker t.Run(name, func(t *testing.T) { 350*333d2b36SAndroid Build Coastguard Worker t.Helper() 351*333d2b36SAndroid Build Coastguard Worker 352*333d2b36SAndroid Build Coastguard Worker ctx, module := buildContextAndCustomModuleFoo(t, bp) 353*333d2b36SAndroid Build Coastguard Worker entries := AndroidMkEntriesForTest(t, ctx, module) 354*333d2b36SAndroid Build Coastguard Worker if len(entries) != 1 { 355*333d2b36SAndroid Build Coastguard Worker t.Errorf("Expected a single AndroidMk entry, got %d", len(entries)) 356*333d2b36SAndroid Build Coastguard Worker } 357*333d2b36SAndroid Build Coastguard Worker distContributions := entries[0].getDistContributions(module) 358*333d2b36SAndroid Build Coastguard Worker 359*333d2b36SAndroid Build Coastguard Worker if err := compareContributions(expectedContributions, distContributions); err != nil { 360*333d2b36SAndroid Build Coastguard Worker t.Errorf("%s\nExpected Contributions\n%sActualContributions\n%s", 361*333d2b36SAndroid Build Coastguard Worker err, 362*333d2b36SAndroid Build Coastguard Worker formatContributions(expectedContributions), 363*333d2b36SAndroid Build Coastguard Worker formatContributions(distContributions)) 364*333d2b36SAndroid Build Coastguard Worker } 365*333d2b36SAndroid Build Coastguard Worker }) 366*333d2b36SAndroid Build Coastguard Worker } 367*333d2b36SAndroid Build Coastguard Worker 368*333d2b36SAndroid Build Coastguard Worker testHelper(t, "dist-without-tag", ` 369*333d2b36SAndroid Build Coastguard Worker custom { 370*333d2b36SAndroid Build Coastguard Worker name: "foo", 371*333d2b36SAndroid Build Coastguard Worker dist: { 372*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"] 373*333d2b36SAndroid Build Coastguard Worker } 374*333d2b36SAndroid Build Coastguard Worker } 375*333d2b36SAndroid Build Coastguard Worker`, 376*333d2b36SAndroid Build Coastguard Worker &distContributions{ 377*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 378*333d2b36SAndroid Build Coastguard Worker { 379*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 380*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 381*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.out"), 382*333d2b36SAndroid Build Coastguard Worker }, 383*333d2b36SAndroid Build Coastguard Worker }, 384*333d2b36SAndroid Build Coastguard Worker }, 385*333d2b36SAndroid Build Coastguard Worker }) 386*333d2b36SAndroid Build Coastguard Worker 387*333d2b36SAndroid Build Coastguard Worker testHelper(t, "dist-with-tag", ` 388*333d2b36SAndroid Build Coastguard Worker custom { 389*333d2b36SAndroid Build Coastguard Worker name: "foo", 390*333d2b36SAndroid Build Coastguard Worker dist: { 391*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 392*333d2b36SAndroid Build Coastguard Worker tag: ".another-tag", 393*333d2b36SAndroid Build Coastguard Worker } 394*333d2b36SAndroid Build Coastguard Worker } 395*333d2b36SAndroid Build Coastguard Worker`, 396*333d2b36SAndroid Build Coastguard Worker &distContributions{ 397*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 398*333d2b36SAndroid Build Coastguard Worker { 399*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 400*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 401*333d2b36SAndroid Build Coastguard Worker distCopyForTest("another.out", "another.out"), 402*333d2b36SAndroid Build Coastguard Worker }, 403*333d2b36SAndroid Build Coastguard Worker }, 404*333d2b36SAndroid Build Coastguard Worker }, 405*333d2b36SAndroid Build Coastguard Worker }) 406*333d2b36SAndroid Build Coastguard Worker 407*333d2b36SAndroid Build Coastguard Worker testHelper(t, "append-artifact-with-product", ` 408*333d2b36SAndroid Build Coastguard Worker custom { 409*333d2b36SAndroid Build Coastguard Worker name: "foo", 410*333d2b36SAndroid Build Coastguard Worker dist: { 411*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 412*333d2b36SAndroid Build Coastguard Worker append_artifact_with_product: true, 413*333d2b36SAndroid Build Coastguard Worker } 414*333d2b36SAndroid Build Coastguard Worker } 415*333d2b36SAndroid Build Coastguard Worker`, &distContributions{ 416*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 417*333d2b36SAndroid Build Coastguard Worker { 418*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 419*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 420*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one_bar.out"), 421*333d2b36SAndroid Build Coastguard Worker }, 422*333d2b36SAndroid Build Coastguard Worker }, 423*333d2b36SAndroid Build Coastguard Worker }, 424*333d2b36SAndroid Build Coastguard Worker }) 425*333d2b36SAndroid Build Coastguard Worker 426*333d2b36SAndroid Build Coastguard Worker testHelper(t, "dists-with-tag", ` 427*333d2b36SAndroid Build Coastguard Worker custom { 428*333d2b36SAndroid Build Coastguard Worker name: "foo", 429*333d2b36SAndroid Build Coastguard Worker dists: [ 430*333d2b36SAndroid Build Coastguard Worker { 431*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 432*333d2b36SAndroid Build Coastguard Worker tag: ".another-tag", 433*333d2b36SAndroid Build Coastguard Worker }, 434*333d2b36SAndroid Build Coastguard Worker ], 435*333d2b36SAndroid Build Coastguard Worker } 436*333d2b36SAndroid Build Coastguard Worker`, 437*333d2b36SAndroid Build Coastguard Worker &distContributions{ 438*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 439*333d2b36SAndroid Build Coastguard Worker { 440*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 441*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 442*333d2b36SAndroid Build Coastguard Worker distCopyForTest("another.out", "another.out"), 443*333d2b36SAndroid Build Coastguard Worker }, 444*333d2b36SAndroid Build Coastguard Worker }, 445*333d2b36SAndroid Build Coastguard Worker }, 446*333d2b36SAndroid Build Coastguard Worker }) 447*333d2b36SAndroid Build Coastguard Worker 448*333d2b36SAndroid Build Coastguard Worker testHelper(t, "multiple-dists-with-and-without-tag", ` 449*333d2b36SAndroid Build Coastguard Worker custom { 450*333d2b36SAndroid Build Coastguard Worker name: "foo", 451*333d2b36SAndroid Build Coastguard Worker dists: [ 452*333d2b36SAndroid Build Coastguard Worker { 453*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 454*333d2b36SAndroid Build Coastguard Worker }, 455*333d2b36SAndroid Build Coastguard Worker { 456*333d2b36SAndroid Build Coastguard Worker targets: ["my_second_goal", "my_third_goal"], 457*333d2b36SAndroid Build Coastguard Worker }, 458*333d2b36SAndroid Build Coastguard Worker ], 459*333d2b36SAndroid Build Coastguard Worker } 460*333d2b36SAndroid Build Coastguard Worker`, 461*333d2b36SAndroid Build Coastguard Worker &distContributions{ 462*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 463*333d2b36SAndroid Build Coastguard Worker { 464*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 465*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 466*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.out"), 467*333d2b36SAndroid Build Coastguard Worker }, 468*333d2b36SAndroid Build Coastguard Worker }, 469*333d2b36SAndroid Build Coastguard Worker { 470*333d2b36SAndroid Build Coastguard Worker goals: "my_second_goal my_third_goal", 471*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 472*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.out"), 473*333d2b36SAndroid Build Coastguard Worker }, 474*333d2b36SAndroid Build Coastguard Worker }, 475*333d2b36SAndroid Build Coastguard Worker }, 476*333d2b36SAndroid Build Coastguard Worker }) 477*333d2b36SAndroid Build Coastguard Worker 478*333d2b36SAndroid Build Coastguard Worker testHelper(t, "dist-plus-dists-without-tags", ` 479*333d2b36SAndroid Build Coastguard Worker custom { 480*333d2b36SAndroid Build Coastguard Worker name: "foo", 481*333d2b36SAndroid Build Coastguard Worker dist: { 482*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 483*333d2b36SAndroid Build Coastguard Worker }, 484*333d2b36SAndroid Build Coastguard Worker dists: [ 485*333d2b36SAndroid Build Coastguard Worker { 486*333d2b36SAndroid Build Coastguard Worker targets: ["my_second_goal", "my_third_goal"], 487*333d2b36SAndroid Build Coastguard Worker }, 488*333d2b36SAndroid Build Coastguard Worker ], 489*333d2b36SAndroid Build Coastguard Worker } 490*333d2b36SAndroid Build Coastguard Worker`, 491*333d2b36SAndroid Build Coastguard Worker &distContributions{ 492*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 493*333d2b36SAndroid Build Coastguard Worker { 494*333d2b36SAndroid Build Coastguard Worker goals: "my_second_goal my_third_goal", 495*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 496*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.out"), 497*333d2b36SAndroid Build Coastguard Worker }, 498*333d2b36SAndroid Build Coastguard Worker }, 499*333d2b36SAndroid Build Coastguard Worker { 500*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 501*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 502*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.out"), 503*333d2b36SAndroid Build Coastguard Worker }, 504*333d2b36SAndroid Build Coastguard Worker }, 505*333d2b36SAndroid Build Coastguard Worker }, 506*333d2b36SAndroid Build Coastguard Worker }) 507*333d2b36SAndroid Build Coastguard Worker 508*333d2b36SAndroid Build Coastguard Worker testHelper(t, "dist-plus-dists-with-tags", ` 509*333d2b36SAndroid Build Coastguard Worker custom { 510*333d2b36SAndroid Build Coastguard Worker name: "foo", 511*333d2b36SAndroid Build Coastguard Worker dist: { 512*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal", "my_other_goal"], 513*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 514*333d2b36SAndroid Build Coastguard Worker }, 515*333d2b36SAndroid Build Coastguard Worker dists: [ 516*333d2b36SAndroid Build Coastguard Worker { 517*333d2b36SAndroid Build Coastguard Worker targets: ["my_second_goal"], 518*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 519*333d2b36SAndroid Build Coastguard Worker }, 520*333d2b36SAndroid Build Coastguard Worker { 521*333d2b36SAndroid Build Coastguard Worker targets: ["my_third_goal"], 522*333d2b36SAndroid Build Coastguard Worker dir: "test/dir", 523*333d2b36SAndroid Build Coastguard Worker }, 524*333d2b36SAndroid Build Coastguard Worker { 525*333d2b36SAndroid Build Coastguard Worker targets: ["my_fourth_goal"], 526*333d2b36SAndroid Build Coastguard Worker suffix: ".suffix", 527*333d2b36SAndroid Build Coastguard Worker }, 528*333d2b36SAndroid Build Coastguard Worker { 529*333d2b36SAndroid Build Coastguard Worker targets: ["my_fifth_goal"], 530*333d2b36SAndroid Build Coastguard Worker dest: "new-name", 531*333d2b36SAndroid Build Coastguard Worker }, 532*333d2b36SAndroid Build Coastguard Worker { 533*333d2b36SAndroid Build Coastguard Worker targets: ["my_sixth_goal"], 534*333d2b36SAndroid Build Coastguard Worker dest: "new-name", 535*333d2b36SAndroid Build Coastguard Worker dir: "some/dir", 536*333d2b36SAndroid Build Coastguard Worker suffix: ".suffix", 537*333d2b36SAndroid Build Coastguard Worker }, 538*333d2b36SAndroid Build Coastguard Worker ], 539*333d2b36SAndroid Build Coastguard Worker } 540*333d2b36SAndroid Build Coastguard Worker`, 541*333d2b36SAndroid Build Coastguard Worker &distContributions{ 542*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 543*333d2b36SAndroid Build Coastguard Worker { 544*333d2b36SAndroid Build Coastguard Worker goals: "my_second_goal", 545*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 546*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "two.out"), 547*333d2b36SAndroid Build Coastguard Worker distCopyForTest("three/four.out", "four.out"), 548*333d2b36SAndroid Build Coastguard Worker }, 549*333d2b36SAndroid Build Coastguard Worker }, 550*333d2b36SAndroid Build Coastguard Worker { 551*333d2b36SAndroid Build Coastguard Worker goals: "my_third_goal", 552*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 553*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "test/dir/one.out"), 554*333d2b36SAndroid Build Coastguard Worker }, 555*333d2b36SAndroid Build Coastguard Worker }, 556*333d2b36SAndroid Build Coastguard Worker { 557*333d2b36SAndroid Build Coastguard Worker goals: "my_fourth_goal", 558*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 559*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.suffix.out"), 560*333d2b36SAndroid Build Coastguard Worker }, 561*333d2b36SAndroid Build Coastguard Worker }, 562*333d2b36SAndroid Build Coastguard Worker { 563*333d2b36SAndroid Build Coastguard Worker goals: "my_fifth_goal", 564*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 565*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "new-name"), 566*333d2b36SAndroid Build Coastguard Worker }, 567*333d2b36SAndroid Build Coastguard Worker }, 568*333d2b36SAndroid Build Coastguard Worker { 569*333d2b36SAndroid Build Coastguard Worker goals: "my_sixth_goal", 570*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 571*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "some/dir/new-name.suffix"), 572*333d2b36SAndroid Build Coastguard Worker }, 573*333d2b36SAndroid Build Coastguard Worker }, 574*333d2b36SAndroid Build Coastguard Worker { 575*333d2b36SAndroid Build Coastguard Worker goals: "my_goal my_other_goal", 576*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 577*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "two.out"), 578*333d2b36SAndroid Build Coastguard Worker distCopyForTest("three/four.out", "four.out"), 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 Worker // The above test the default values of default_dist_files and use_output_file. 585*333d2b36SAndroid Build Coastguard Worker 586*333d2b36SAndroid Build Coastguard Worker // The following tests explicitly test the different combinations of those settings. 587*333d2b36SAndroid Build Coastguard Worker testHelper(t, "tagged-dist-files-no-output", ` 588*333d2b36SAndroid Build Coastguard Worker custom { 589*333d2b36SAndroid Build Coastguard Worker name: "foo", 590*333d2b36SAndroid Build Coastguard Worker default_dist_files: "tagged", 591*333d2b36SAndroid Build Coastguard Worker dist_output_file: false, 592*333d2b36SAndroid Build Coastguard Worker dists: [ 593*333d2b36SAndroid Build Coastguard Worker { 594*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 595*333d2b36SAndroid Build Coastguard Worker }, 596*333d2b36SAndroid Build Coastguard Worker { 597*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 598*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 599*333d2b36SAndroid Build Coastguard Worker }, 600*333d2b36SAndroid Build Coastguard Worker ], 601*333d2b36SAndroid Build Coastguard Worker } 602*333d2b36SAndroid Build Coastguard Worker`, &distContributions{ 603*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 604*333d2b36SAndroid Build Coastguard Worker { 605*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 606*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 607*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.out"), 608*333d2b36SAndroid Build Coastguard Worker }, 609*333d2b36SAndroid Build Coastguard Worker }, 610*333d2b36SAndroid Build Coastguard Worker { 611*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 612*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 613*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "two.out"), 614*333d2b36SAndroid Build Coastguard Worker distCopyForTest("three/four.out", "four.out"), 615*333d2b36SAndroid Build Coastguard Worker }, 616*333d2b36SAndroid Build Coastguard Worker }, 617*333d2b36SAndroid Build Coastguard Worker }, 618*333d2b36SAndroid Build Coastguard Worker }) 619*333d2b36SAndroid Build Coastguard Worker 620*333d2b36SAndroid Build Coastguard Worker testHelper(t, "default-dist-files-no-output", ` 621*333d2b36SAndroid Build Coastguard Worker custom { 622*333d2b36SAndroid Build Coastguard Worker name: "foo", 623*333d2b36SAndroid Build Coastguard Worker default_dist_files: "default", 624*333d2b36SAndroid Build Coastguard Worker dist_output_file: false, 625*333d2b36SAndroid Build Coastguard Worker dists: [ 626*333d2b36SAndroid Build Coastguard Worker { 627*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 628*333d2b36SAndroid Build Coastguard Worker }, 629*333d2b36SAndroid Build Coastguard Worker { 630*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 631*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 632*333d2b36SAndroid Build Coastguard Worker }, 633*333d2b36SAndroid Build Coastguard Worker ], 634*333d2b36SAndroid Build Coastguard Worker } 635*333d2b36SAndroid Build Coastguard Worker`, &distContributions{ 636*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 637*333d2b36SAndroid Build Coastguard Worker { 638*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 639*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 640*333d2b36SAndroid Build Coastguard Worker distCopyForTest("default-dist.out", "default-dist.out"), 641*333d2b36SAndroid Build Coastguard Worker }, 642*333d2b36SAndroid Build Coastguard Worker }, 643*333d2b36SAndroid Build Coastguard Worker { 644*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 645*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 646*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "two.out"), 647*333d2b36SAndroid Build Coastguard Worker distCopyForTest("three/four.out", "four.out"), 648*333d2b36SAndroid Build Coastguard Worker }, 649*333d2b36SAndroid Build Coastguard Worker }, 650*333d2b36SAndroid Build Coastguard Worker }, 651*333d2b36SAndroid Build Coastguard Worker }) 652*333d2b36SAndroid Build Coastguard Worker 653*333d2b36SAndroid Build Coastguard Worker testHelper(t, "no-dist-files-no-output", ` 654*333d2b36SAndroid Build Coastguard Worker custom { 655*333d2b36SAndroid Build Coastguard Worker name: "foo", 656*333d2b36SAndroid Build Coastguard Worker default_dist_files: "none", 657*333d2b36SAndroid Build Coastguard Worker dist_output_file: false, 658*333d2b36SAndroid Build Coastguard Worker dists: [ 659*333d2b36SAndroid Build Coastguard Worker // The following is silently ignored because there is not default file 660*333d2b36SAndroid Build Coastguard Worker // in either the dist files or the output file. 661*333d2b36SAndroid Build Coastguard Worker { 662*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 663*333d2b36SAndroid Build Coastguard Worker }, 664*333d2b36SAndroid Build Coastguard Worker { 665*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 666*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 667*333d2b36SAndroid Build Coastguard Worker }, 668*333d2b36SAndroid Build Coastguard Worker ], 669*333d2b36SAndroid Build Coastguard Worker } 670*333d2b36SAndroid Build Coastguard Worker`, &distContributions{ 671*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 672*333d2b36SAndroid Build Coastguard Worker { 673*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 674*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 675*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "two.out"), 676*333d2b36SAndroid Build Coastguard Worker distCopyForTest("three/four.out", "four.out"), 677*333d2b36SAndroid Build Coastguard Worker }, 678*333d2b36SAndroid Build Coastguard Worker }, 679*333d2b36SAndroid Build Coastguard Worker }, 680*333d2b36SAndroid Build Coastguard Worker }) 681*333d2b36SAndroid Build Coastguard Worker 682*333d2b36SAndroid Build Coastguard Worker testHelper(t, "tagged-dist-files-default-output", ` 683*333d2b36SAndroid Build Coastguard Worker custom { 684*333d2b36SAndroid Build Coastguard Worker name: "foo", 685*333d2b36SAndroid Build Coastguard Worker default_dist_files: "tagged", 686*333d2b36SAndroid Build Coastguard Worker dist_output_file: true, 687*333d2b36SAndroid Build Coastguard Worker dists: [ 688*333d2b36SAndroid Build Coastguard Worker { 689*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 690*333d2b36SAndroid Build Coastguard Worker }, 691*333d2b36SAndroid Build Coastguard Worker { 692*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 693*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 694*333d2b36SAndroid Build Coastguard Worker }, 695*333d2b36SAndroid Build Coastguard Worker ], 696*333d2b36SAndroid Build Coastguard Worker } 697*333d2b36SAndroid Build Coastguard Worker`, &distContributions{ 698*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 699*333d2b36SAndroid Build Coastguard Worker { 700*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 701*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 702*333d2b36SAndroid Build Coastguard Worker distCopyForTest("one.out", "one.out"), 703*333d2b36SAndroid Build Coastguard Worker }, 704*333d2b36SAndroid Build Coastguard Worker }, 705*333d2b36SAndroid Build Coastguard Worker { 706*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 707*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 708*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "two.out"), 709*333d2b36SAndroid Build Coastguard Worker distCopyForTest("three/four.out", "four.out"), 710*333d2b36SAndroid Build Coastguard Worker }, 711*333d2b36SAndroid Build Coastguard Worker }, 712*333d2b36SAndroid Build Coastguard Worker }, 713*333d2b36SAndroid Build Coastguard Worker }) 714*333d2b36SAndroid Build Coastguard Worker 715*333d2b36SAndroid Build Coastguard Worker testHelper(t, "default-dist-files-default-output", ` 716*333d2b36SAndroid Build Coastguard Worker custom { 717*333d2b36SAndroid Build Coastguard Worker name: "foo", 718*333d2b36SAndroid Build Coastguard Worker default_dist_files: "default", 719*333d2b36SAndroid Build Coastguard Worker dist_output_file: true, 720*333d2b36SAndroid Build Coastguard Worker dists: [ 721*333d2b36SAndroid Build Coastguard Worker { 722*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 723*333d2b36SAndroid Build Coastguard Worker }, 724*333d2b36SAndroid Build Coastguard Worker { 725*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 726*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 727*333d2b36SAndroid Build Coastguard Worker }, 728*333d2b36SAndroid Build Coastguard Worker ], 729*333d2b36SAndroid Build Coastguard Worker } 730*333d2b36SAndroid Build Coastguard Worker`, &distContributions{ 731*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 732*333d2b36SAndroid Build Coastguard Worker { 733*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 734*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 735*333d2b36SAndroid Build Coastguard Worker distCopyForTest("default-dist.out", "default-dist.out"), 736*333d2b36SAndroid Build Coastguard Worker }, 737*333d2b36SAndroid Build Coastguard Worker }, 738*333d2b36SAndroid Build Coastguard Worker { 739*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 740*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 741*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "two.out"), 742*333d2b36SAndroid Build Coastguard Worker distCopyForTest("three/four.out", "four.out"), 743*333d2b36SAndroid Build Coastguard Worker }, 744*333d2b36SAndroid Build Coastguard Worker }, 745*333d2b36SAndroid Build Coastguard Worker }, 746*333d2b36SAndroid Build Coastguard Worker }) 747*333d2b36SAndroid Build Coastguard Worker 748*333d2b36SAndroid Build Coastguard Worker testHelper(t, "no-dist-files-default-output", ` 749*333d2b36SAndroid Build Coastguard Worker custom { 750*333d2b36SAndroid Build Coastguard Worker name: "foo", 751*333d2b36SAndroid Build Coastguard Worker default_dist_files: "none", 752*333d2b36SAndroid Build Coastguard Worker dist_output_file: true, 753*333d2b36SAndroid Build Coastguard Worker dists: [ 754*333d2b36SAndroid Build Coastguard Worker { 755*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 756*333d2b36SAndroid Build Coastguard Worker }, 757*333d2b36SAndroid Build Coastguard Worker { 758*333d2b36SAndroid Build Coastguard Worker targets: ["my_goal"], 759*333d2b36SAndroid Build Coastguard Worker tag: ".multiple", 760*333d2b36SAndroid Build Coastguard Worker }, 761*333d2b36SAndroid Build Coastguard Worker ], 762*333d2b36SAndroid Build Coastguard Worker } 763*333d2b36SAndroid Build Coastguard Worker`, &distContributions{ 764*333d2b36SAndroid Build Coastguard Worker copiesForGoals: []*copiesForGoals{ 765*333d2b36SAndroid Build Coastguard Worker { 766*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 767*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 768*333d2b36SAndroid Build Coastguard Worker distCopyForTest("dist-output-file.out", "dist-output-file.out"), 769*333d2b36SAndroid Build Coastguard Worker }, 770*333d2b36SAndroid Build Coastguard Worker }, 771*333d2b36SAndroid Build Coastguard Worker { 772*333d2b36SAndroid Build Coastguard Worker goals: "my_goal", 773*333d2b36SAndroid Build Coastguard Worker copies: []distCopy{ 774*333d2b36SAndroid Build Coastguard Worker distCopyForTest("two.out", "two.out"), 775*333d2b36SAndroid Build Coastguard Worker distCopyForTest("three/four.out", "four.out"), 776*333d2b36SAndroid Build Coastguard Worker }, 777*333d2b36SAndroid Build Coastguard Worker }, 778*333d2b36SAndroid Build Coastguard Worker }, 779*333d2b36SAndroid Build Coastguard Worker }) 780*333d2b36SAndroid Build Coastguard Worker} 781