summaryrefslogtreecommitdiff
path: root/android/paths_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'android/paths_test.go')
-rw-r--r--android/paths_test.go240
1 files changed, 190 insertions, 50 deletions
diff --git a/android/paths_test.go b/android/paths_test.go
index f5902b538..2e0e0e86d 100644
--- a/android/paths_test.go
+++ b/android/paths_test.go
@@ -24,6 +24,7 @@ import (
"testing"
"github.com/google/blueprint/pathtools"
+ "github.com/google/blueprint/proptools"
)
type strsTestCase struct {
@@ -706,39 +707,117 @@ func TestPathForSource(t *testing.T) {
}
}
-type expandSourcesTestModule struct {
+type pathForModuleSrcTestModule struct {
ModuleBase
props struct {
Srcs []string `android:"path"`
Exclude_srcs []string `android:"path"`
+
+ Src *string `android:"path"`
}
- srcs Paths
+ src string
+ rel string
+
+ srcs []string
rels []string
+
+ missingDeps []string
}
-func expandSourcesTestModuleFactory() Module {
- module := &expandSourcesTestModule{}
+func pathForModuleSrcTestModuleFactory() Module {
+ module := &pathForModuleSrcTestModule{}
module.AddProperties(&module.props)
InitAndroidModule(module)
return module
}
-func (p *expandSourcesTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
- p.srcs = ctx.ExpandSources(p.props.Srcs, p.props.Exclude_srcs)
+func (p *pathForModuleSrcTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
+ srcs := PathsForModuleSrcExcludes(ctx, p.props.Srcs, p.props.Exclude_srcs)
+ p.srcs = srcs.Strings()
- for _, src := range p.srcs {
+ for _, src := range srcs {
p.rels = append(p.rels, src.Rel())
}
+
+ if p.props.Src != nil {
+ src := PathForModuleSrc(ctx, *p.props.Src)
+ if src != nil {
+ p.src = src.String()
+ p.rel = src.Rel()
+ }
+ }
+
+ p.missingDeps = ctx.GetMissingDependencies()
}
-func TestExpandSources(t *testing.T) {
- tests := []struct {
- name string
- bp string
- srcs []string
- rels []string
- }{
+type pathForModuleSrcTestCase struct {
+ name string
+ bp string
+ srcs []string
+ rels []string
+ src string
+ rel string
+}
+
+func testPathForModuleSrc(t *testing.T, buildDir string, tests []pathForModuleSrcTestCase) {
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ config := TestConfig(buildDir, nil)
+ ctx := NewTestContext()
+
+ ctx.RegisterModuleType("test", ModuleFactoryAdaptor(pathForModuleSrcTestModuleFactory))
+ ctx.RegisterModuleType("filegroup", ModuleFactoryAdaptor(FileGroupFactory))
+
+ fgBp := `
+ filegroup {
+ name: "a",
+ srcs: ["src/a"],
+ }
+ `
+
+ mockFS := map[string][]byte{
+ "fg/Android.bp": []byte(fgBp),
+ "foo/Android.bp": []byte(test.bp),
+ "fg/src/a": nil,
+ "foo/src/b": nil,
+ "foo/src/c": nil,
+ "foo/src/d": nil,
+ "foo/src/e/e": nil,
+ "foo/src_special/$": nil,
+ }
+
+ ctx.MockFileSystem(mockFS)
+
+ ctx.Register()
+ _, errs := ctx.ParseFileList(".", []string{"fg/Android.bp", "foo/Android.bp"})
+ FailIfErrored(t, errs)
+ _, errs = ctx.PrepareBuildActions(config)
+ FailIfErrored(t, errs)
+
+ m := ctx.ModuleForTests("foo", "").Module().(*pathForModuleSrcTestModule)
+
+ if g, w := m.srcs, test.srcs; !reflect.DeepEqual(g, w) {
+ t.Errorf("want srcs %q, got %q", w, g)
+ }
+
+ if g, w := m.rels, test.rels; !reflect.DeepEqual(g, w) {
+ t.Errorf("want rels %q, got %q", w, g)
+ }
+
+ if g, w := m.src, test.src; g != w {
+ t.Errorf("want src %q, got %q", w, g)
+ }
+
+ if g, w := m.rel, test.rel; g != w {
+ t.Errorf("want rel %q, got %q", w, g)
+ }
+ })
+ }
+}
+
+func TestPathsForModuleSrc(t *testing.T) {
+ tests := []pathForModuleSrcTestCase{
{
name: "path",
bp: `
@@ -794,57 +873,118 @@ func TestExpandSources(t *testing.T) {
},
}
+ buildDir, err := ioutil.TempDir("", "soong_paths_for_module_src_test")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(buildDir)
+
+ testPathForModuleSrc(t, buildDir, tests)
+}
+
+func TestPathForModuleSrc(t *testing.T) {
+ tests := []pathForModuleSrcTestCase{
+ {
+ name: "path",
+ bp: `
+ test {
+ name: "foo",
+ src: "src/b",
+ }`,
+ src: "foo/src/b",
+ rel: "src/b",
+ },
+ {
+ name: "glob",
+ bp: `
+ test {
+ name: "foo",
+ src: "src/e/*",
+ }`,
+ src: "foo/src/e/e",
+ rel: "src/e/e",
+ },
+ {
+ name: "filegroup",
+ bp: `
+ test {
+ name: "foo",
+ src: ":a",
+ }`,
+ src: "fg/src/a",
+ rel: "src/a",
+ },
+ {
+ name: "special characters glob",
+ bp: `
+ test {
+ name: "foo",
+ src: "src_special/*",
+ }`,
+ src: "foo/src_special/$",
+ rel: "src_special/$",
+ },
+ }
+
buildDir, err := ioutil.TempDir("", "soong_path_for_module_src_test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(buildDir)
- for _, test := range tests {
- t.Run(test.name, func(t *testing.T) {
- config := TestConfig(buildDir, nil)
- ctx := NewTestContext()
+ testPathForModuleSrc(t, buildDir, tests)
+}
- ctx.RegisterModuleType("test", ModuleFactoryAdaptor(expandSourcesTestModuleFactory))
- ctx.RegisterModuleType("filegroup", ModuleFactoryAdaptor(FileGroupFactory))
+func TestPathsForModuleSrc_AllowMissingDependencies(t *testing.T) {
+ buildDir, err := ioutil.TempDir("", "soong_paths_for_module_src_allow_missing_dependencies_test")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(buildDir)
- fgBp := `
- filegroup {
- name: "a",
- srcs: ["src/a"],
- }
- `
+ config := TestConfig(buildDir, nil)
+ config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
- mockFS := map[string][]byte{
- "fg/Android.bp": []byte(fgBp),
- "foo/Android.bp": []byte(test.bp),
- "fg/src/a": nil,
- "foo/src/b": nil,
- "foo/src/c": nil,
- "foo/src/d": nil,
- "foo/src/e/e": nil,
- "foo/src_special/$": nil,
- }
+ ctx := NewTestContext()
+ ctx.SetAllowMissingDependencies(true)
- ctx.MockFileSystem(mockFS)
+ ctx.RegisterModuleType("test", ModuleFactoryAdaptor(pathForModuleSrcTestModuleFactory))
- ctx.Register()
- _, errs := ctx.ParseFileList(".", []string{"fg/Android.bp", "foo/Android.bp"})
- FailIfErrored(t, errs)
- _, errs = ctx.PrepareBuildActions(config)
- FailIfErrored(t, errs)
+ bp := `
+ test {
+ name: "foo",
+ srcs: [":a"],
+ exclude_srcs: [":b"],
+ src: ":c",
+ }
+ `
- m := ctx.ModuleForTests("foo", "").Module().(*expandSourcesTestModule)
+ mockFS := map[string][]byte{
+ "Android.bp": []byte(bp),
+ }
- if g, w := m.srcs.Strings(), test.srcs; !reflect.DeepEqual(g, w) {
- t.Errorf("want srcs %q, got %q", w, g)
- }
+ ctx.MockFileSystem(mockFS)
- if g, w := m.rels, test.rels; !reflect.DeepEqual(g, w) {
- t.Errorf("want rels %q, got %q", w, g)
- }
- })
+ ctx.Register()
+ _, errs := ctx.ParseFileList(".", []string{"Android.bp"})
+ FailIfErrored(t, errs)
+ _, errs = ctx.PrepareBuildActions(config)
+ FailIfErrored(t, errs)
+
+ foo := ctx.ModuleForTests("foo", "").Module().(*pathForModuleSrcTestModule)
+
+ if g, w := foo.missingDeps, []string{"a", "b", "c"}; !reflect.DeepEqual(g, w) {
+ t.Errorf("want missing deps %q, got %q", w, g)
}
+
+ if g, w := foo.srcs, []string{}; !reflect.DeepEqual(g, w) {
+ t.Errorf("want srcs %q, got %q", w, g)
+ }
+
+ if g, w := foo.src, ""; g != w {
+ t.Errorf("want src %q, got %q", w, g)
+ }
+
}
func ExampleOutputPath_ReplaceExtension() {