diff --git a/android/androidmk.go b/android/androidmk.go index fafbfd61e..882193bba 100644 --- a/android/androidmk.go +++ b/android/androidmk.go @@ -634,3 +634,21 @@ func shouldSkipAndroidMkProcessing(module *ModuleBase) bool { // Make does not understand LinuxBionic module.Os() == LinuxBionic } + +func AndroidMkDataPaths(data []DataPath) []string { + var testFiles []string + for _, d := range data { + rel := d.SrcPath.Rel() + path := d.SrcPath.String() + if !strings.HasSuffix(path, rel) { + panic(fmt.Errorf("path %q does not end with %q", path, rel)) + } + path = strings.TrimSuffix(path, rel) + testFileString := path + ":" + rel + if len(d.RelativeInstallPath) > 0 { + testFileString += ":" + d.RelativeInstallPath + } + testFiles = append(testFiles, testFileString) + } + return testFiles +} diff --git a/apex/androidmk.go b/apex/androidmk.go index af2ec3d2a..024f1cacd 100644 --- a/apex/androidmk.go +++ b/apex/androidmk.go @@ -133,7 +133,7 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexBundleName, apexName, mo } } if len(newDataPaths) > 0 { - fmt.Fprintln(w, "LOCAL_TEST_DATA :=", strings.Join(cc.AndroidMkDataPaths(newDataPaths), " ")) + fmt.Fprintln(w, "LOCAL_TEST_DATA :=", strings.Join(android.AndroidMkDataPaths(newDataPaths), " ")) } if fi.module != nil && len(fi.module.NoticeFiles()) > 0 { diff --git a/cc/androidmk.go b/cc/androidmk.go index 380b4e92f..76a86f39a 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -149,24 +149,6 @@ func (c *Module) AndroidMkEntries() []android.AndroidMkEntries { return []android.AndroidMkEntries{entries} } -func AndroidMkDataPaths(data []android.DataPath) []string { - var testFiles []string - for _, d := range data { - rel := d.SrcPath.Rel() - path := d.SrcPath.String() - if !strings.HasSuffix(path, rel) { - panic(fmt.Errorf("path %q does not end with %q", path, rel)) - } - path = strings.TrimSuffix(path, rel) - testFileString := path + ":" + rel - if len(d.RelativeInstallPath) > 0 { - testFileString += ":" + d.RelativeInstallPath - } - testFiles = append(testFiles, testFileString) - } - return testFiles -} - func androidMkWriteExtraTestConfigs(extraTestConfigs android.Paths, entries *android.AndroidMkEntries) { if len(extraTestConfigs) > 0 { entries.ExtraEntries = append(entries.ExtraEntries, func(entries *android.AndroidMkEntries) { @@ -176,7 +158,7 @@ func androidMkWriteExtraTestConfigs(extraTestConfigs android.Paths, entries *and } func androidMkWriteTestData(data []android.DataPath, ctx AndroidMkContext, entries *android.AndroidMkEntries) { - testFiles := AndroidMkDataPaths(data) + testFiles := android.AndroidMkDataPaths(data) if len(testFiles) > 0 { entries.ExtraEntries = append(entries.ExtraEntries, func(entries *android.AndroidMkEntries) { entries.AddStrings("LOCAL_TEST_DATA", testFiles...) diff --git a/python/androidmk.go b/python/androidmk.go index 247b80dc0..8ad5889b5 100644 --- a/python/androidmk.go +++ b/python/androidmk.go @@ -15,11 +15,12 @@ package python import ( - "android/soong/android" "fmt" "io" "path/filepath" "strings" + + "android/soong/android" ) type subAndroidMkProvider interface { @@ -74,6 +75,11 @@ func (p *testDecorator) AndroidMk(base *Module, ret *android.AndroidMkData) { if !BoolDefault(p.binaryProperties.Auto_gen_config, true) { fmt.Fprintln(w, "LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG := true") } + + if len(p.data) > 0 { + fmt.Fprintln(w, "LOCAL_TEST_DATA :=", + strings.Join(android.AndroidMkDataPaths(p.data), " ")) + } }) base.subAndroidMk(ret, p.binaryDecorator.pythonInstaller) } diff --git a/python/test.go b/python/test.go index a669c73a6..434e71abf 100644 --- a/python/test.go +++ b/python/test.go @@ -34,6 +34,10 @@ type TestProperties struct { // the name of the test configuration template (for example "AndroidTestTemplate.xml") that // should be installed with the module. Test_config_template *string `android:"path,arch_variant"` + + // list of files or filegroup modules that provide data that should be installed alongside + // the test + Data []string `android:"path,arch_variant"` } type testDecorator struct { @@ -42,6 +46,8 @@ type testDecorator struct { testProperties TestProperties testConfig android.Path + + data []android.DataPath } func (test *testDecorator) bootstrapperProps() []interface{} { @@ -59,6 +65,12 @@ func (test *testDecorator) install(ctx android.ModuleContext, file android.Path) test.binaryDecorator.pythonInstaller.relative = ctx.ModuleName() test.binaryDecorator.pythonInstaller.install(ctx, file) + + dataSrcPaths := android.PathsForModuleSrc(ctx, test.testProperties.Data) + + for _, dataSrcPath := range dataSrcPaths { + test.data = append(test.data, android.DataPath{SrcPath: dataSrcPath}) + } } func NewTest(hod android.HostOrDeviceSupported) *Module {