Loading android/paths.go +19 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,9 @@ type Path interface { type WritablePath interface { Path // return the path to the build directory. buildDir() string // the writablePath method doesn't directly do anything, // but it allows a struct to distinguish between whether or not it implements the WritablePath interface writablePath() Loading Loading @@ -848,7 +851,12 @@ func (p OutputPath) WithoutRel() OutputPath { return p } func (p OutputPath) buildDir() string { return p.config.buildDir } var _ Path = OutputPath{} var _ WritablePath = OutputPath{} // PathForOutput joins the provided paths and returns an OutputPath that is // validated to not escape the build dir. Loading Loading @@ -1151,6 +1159,13 @@ type InstallPath struct { baseDir string // "../" for Make paths to convert "out/soong" to "out", "" for Soong paths } func (p InstallPath) buildDir() string { return p.config.buildDir } var _ Path = InstallPath{} var _ WritablePath = InstallPath{} func (p InstallPath) writablePath() {} func (p InstallPath) String() string { Loading Loading @@ -1302,6 +1317,10 @@ type PhonyPath struct { func (p PhonyPath) writablePath() {} func (p PhonyPath) buildDir() string { return p.config.buildDir } var _ Path = PhonyPath{} var _ WritablePath = PhonyPath{} Loading android/testing.go +31 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android import ( "fmt" "path/filepath" "regexp" "strings" "testing" Loading Loading @@ -411,3 +412,33 @@ func AndroidMkDataForTest(t *testing.T, config Config, bpPath string, mod bluepr data.fillInData(config, bpPath, mod) return data } // Normalize the path for testing. // // If the path is relative to the build directory then return the relative path // to avoid tests having to deal with the dynamically generated build directory. // // Otherwise, return the supplied path as it is almost certainly a source path // that is relative to the root of the source tree. // // The build and source paths should be distinguishable based on their contents. func NormalizePathForTesting(path Path) string { p := path.String() if w, ok := path.(WritablePath); ok { rel, err := filepath.Rel(w.buildDir(), p) if err != nil { panic(err) } return rel } return p } func NormalizePathsForTesting(paths Paths) []string { var result []string for _, path := range paths { relative := NormalizePathForTesting(path) result = append(result, relative) } return result } java/droiddoc.go +32 −6 Original line number Diff line number Diff line Loading @@ -1948,12 +1948,42 @@ type PrebuiltStubsSources struct { properties PrebuiltStubsSourcesProperties srcs android.Paths // The source directories containing stubs source files. srcDirs android.Paths stubsSrcJar android.ModuleOutPath } func (p *PrebuiltStubsSources) OutputFiles(tag string) (android.Paths, error) { switch tag { case "": return android.Paths{p.stubsSrcJar}, nil default: return nil, fmt.Errorf("unsupported module reference tag %q", tag) } } func (p *PrebuiltStubsSources) GenerateAndroidBuildActions(ctx android.ModuleContext) { p.srcs = android.PathsForModuleSrc(ctx, p.properties.Srcs) p.stubsSrcJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar") p.srcDirs = android.PathsForModuleSrc(ctx, p.properties.Srcs) rule := android.NewRuleBuilder() command := rule.Command(). BuiltTool(ctx, "soong_zip"). Flag("-write_if_changed"). Flag("-jar"). FlagWithOutput("-o ", p.stubsSrcJar) for _, d := range p.srcDirs { dir := d.String() command. FlagWithArg("-C ", dir). FlagWithInput("-D ", d) } rule.Restat() rule.Build(pctx, ctx, "zip src", "Create srcjar from prebuilt source") } func (p *PrebuiltStubsSources) Prebuilt() *android.Prebuilt { Loading @@ -1964,10 +1994,6 @@ func (p *PrebuiltStubsSources) Name() string { return p.prebuilt.Name(p.ModuleBase.Name()) } func (p *PrebuiltStubsSources) Srcs() android.Paths { return append(android.Paths{}, p.srcs...) } // prebuilt_stubs_sources imports a set of java source files as if they were // generated by droidstubs. // Loading java/java_test.go +15 −13 Original line number Diff line number Diff line Loading @@ -484,28 +484,24 @@ func TestPrebuilts(t *testing.T) { prebuilt_stubs_sources { name: "stubs-source", srcs: ["stubs/sources/**/*.java"], srcs: ["stubs/sources"], } `) javac := ctx.ModuleForTests("foo", "android_common").Rule("javac") fooModule := ctx.ModuleForTests("foo", "android_common") javac := fooModule.Rule("javac") combineJar := ctx.ModuleForTests("foo", "android_common").Description("for javac") barJar := ctx.ModuleForTests("bar", "android_common").Rule("combineJar").Output bazJar := ctx.ModuleForTests("baz", "android_common").Rule("combineJar").Output sdklibStubsJar := ctx.ModuleForTests("sdklib.stubs", "android_common").Rule("combineJar").Output inputs := []string{} for _, p := range javac.BuildParams.Inputs { inputs = append(inputs, p.String()) } fooLibrary := fooModule.Module().(*Library) assertDeepEquals(t, "foo java sources incorrect", []string{"a.java"}, fooLibrary.compiledJavaSrcs.Strings()) expected := []string{ "a.java", "stubs/sources/foo/Foo.java", } if !reflect.DeepEqual(expected, inputs) { t.Errorf("foo inputs incorrect: expected %q, found %q", expected, inputs) } assertDeepEquals(t, "foo java source jars incorrect", []string{".intermediates/stubs-source/android_common/stubs-source-stubs.srcjar"}, android.NormalizePathsForTesting(fooLibrary.compiledSrcJars)) if !strings.Contains(javac.Args["classpath"], barJar.String()) { t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], barJar.String()) Loading @@ -522,6 +518,12 @@ func TestPrebuilts(t *testing.T) { ctx.ModuleForTests("qux", "android_common").Rule("Cp") } func assertDeepEquals(t *testing.T, message string, expected interface{}, actual interface{}) { if !reflect.DeepEqual(expected, actual) { t.Errorf("%s: expected %q, found %q", message, expected, actual) } } func TestDefaults(t *testing.T) { ctx, _ := testJava(t, ` java_defaults { Loading sdk/testing.go +5 −18 Original line number Diff line number Diff line Loading @@ -183,7 +183,7 @@ func (r *testSdkResult) getSdkSnapshotBuildInfo(sdk *sdk) *snapshotBuildInfo { switch bp.Rule.String() { case android.Cp.String(): // Get source relative to build directory. src := r.pathRelativeToBuildDir(bp.Input) src := android.NormalizePathForTesting(bp.Input) // Get destination relative to the snapshot root dest := bp.Output.Rel() _, _ = fmt.Fprintf(copyRules, "%s -> %s\n", src, dest) Loading @@ -199,12 +199,12 @@ func (r *testSdkResult) getSdkSnapshotBuildInfo(sdk *sdk) *snapshotBuildInfo { // This could be an intermediate zip file and not the actual output zip. // In that case this will be overridden when the rule to merge the zips // is processed. info.outputZip = r.pathRelativeToBuildDir(bp.Output) info.outputZip = android.NormalizePathForTesting(bp.Output) case mergeZips.String(): // Copy the current outputZip to the intermediateZip. info.intermediateZip = info.outputZip mergeInput := r.pathRelativeToBuildDir(bp.Input) mergeInput := android.NormalizePathForTesting(bp.Input) if info.intermediateZip != mergeInput { r.t.Errorf("Expected intermediate zip %s to be an input to merge zips but found %s instead", info.intermediateZip, mergeInput) Loading @@ -212,10 +212,10 @@ func (r *testSdkResult) getSdkSnapshotBuildInfo(sdk *sdk) *snapshotBuildInfo { // Override output zip (which was actually the intermediate zip file) with the actual // output zip. info.outputZip = r.pathRelativeToBuildDir(bp.Output) info.outputZip = android.NormalizePathForTesting(bp.Output) // Save the zips to be merged into the intermediate zip. info.mergeZips = r.pathsRelativeToBuildDir(bp.Inputs) info.mergeZips = android.NormalizePathsForTesting(bp.Inputs) } } Loading @@ -232,19 +232,6 @@ func (r *testSdkResult) ModuleForTests(name string, variant string) android.Test return r.ctx.ModuleForTests(name, variant) } func (r *testSdkResult) pathRelativeToBuildDir(path android.Path) string { buildDir := filepath.Clean(r.config.BuildDir()) + "/" return strings.TrimPrefix(filepath.Clean(path.String()), buildDir) } func (r *testSdkResult) pathsRelativeToBuildDir(paths android.Paths) []string { var result []string for _, path := range paths { result = append(result, r.pathRelativeToBuildDir(path)) } return result } // Check the snapshot build rules. // // Takes a list of functions which check different facets of the snapshot build rules. Loading Loading
android/paths.go +19 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,9 @@ type Path interface { type WritablePath interface { Path // return the path to the build directory. buildDir() string // the writablePath method doesn't directly do anything, // but it allows a struct to distinguish between whether or not it implements the WritablePath interface writablePath() Loading Loading @@ -848,7 +851,12 @@ func (p OutputPath) WithoutRel() OutputPath { return p } func (p OutputPath) buildDir() string { return p.config.buildDir } var _ Path = OutputPath{} var _ WritablePath = OutputPath{} // PathForOutput joins the provided paths and returns an OutputPath that is // validated to not escape the build dir. Loading Loading @@ -1151,6 +1159,13 @@ type InstallPath struct { baseDir string // "../" for Make paths to convert "out/soong" to "out", "" for Soong paths } func (p InstallPath) buildDir() string { return p.config.buildDir } var _ Path = InstallPath{} var _ WritablePath = InstallPath{} func (p InstallPath) writablePath() {} func (p InstallPath) String() string { Loading Loading @@ -1302,6 +1317,10 @@ type PhonyPath struct { func (p PhonyPath) writablePath() {} func (p PhonyPath) buildDir() string { return p.config.buildDir } var _ Path = PhonyPath{} var _ WritablePath = PhonyPath{} Loading
android/testing.go +31 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android import ( "fmt" "path/filepath" "regexp" "strings" "testing" Loading Loading @@ -411,3 +412,33 @@ func AndroidMkDataForTest(t *testing.T, config Config, bpPath string, mod bluepr data.fillInData(config, bpPath, mod) return data } // Normalize the path for testing. // // If the path is relative to the build directory then return the relative path // to avoid tests having to deal with the dynamically generated build directory. // // Otherwise, return the supplied path as it is almost certainly a source path // that is relative to the root of the source tree. // // The build and source paths should be distinguishable based on their contents. func NormalizePathForTesting(path Path) string { p := path.String() if w, ok := path.(WritablePath); ok { rel, err := filepath.Rel(w.buildDir(), p) if err != nil { panic(err) } return rel } return p } func NormalizePathsForTesting(paths Paths) []string { var result []string for _, path := range paths { relative := NormalizePathForTesting(path) result = append(result, relative) } return result }
java/droiddoc.go +32 −6 Original line number Diff line number Diff line Loading @@ -1948,12 +1948,42 @@ type PrebuiltStubsSources struct { properties PrebuiltStubsSourcesProperties srcs android.Paths // The source directories containing stubs source files. srcDirs android.Paths stubsSrcJar android.ModuleOutPath } func (p *PrebuiltStubsSources) OutputFiles(tag string) (android.Paths, error) { switch tag { case "": return android.Paths{p.stubsSrcJar}, nil default: return nil, fmt.Errorf("unsupported module reference tag %q", tag) } } func (p *PrebuiltStubsSources) GenerateAndroidBuildActions(ctx android.ModuleContext) { p.srcs = android.PathsForModuleSrc(ctx, p.properties.Srcs) p.stubsSrcJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar") p.srcDirs = android.PathsForModuleSrc(ctx, p.properties.Srcs) rule := android.NewRuleBuilder() command := rule.Command(). BuiltTool(ctx, "soong_zip"). Flag("-write_if_changed"). Flag("-jar"). FlagWithOutput("-o ", p.stubsSrcJar) for _, d := range p.srcDirs { dir := d.String() command. FlagWithArg("-C ", dir). FlagWithInput("-D ", d) } rule.Restat() rule.Build(pctx, ctx, "zip src", "Create srcjar from prebuilt source") } func (p *PrebuiltStubsSources) Prebuilt() *android.Prebuilt { Loading @@ -1964,10 +1994,6 @@ func (p *PrebuiltStubsSources) Name() string { return p.prebuilt.Name(p.ModuleBase.Name()) } func (p *PrebuiltStubsSources) Srcs() android.Paths { return append(android.Paths{}, p.srcs...) } // prebuilt_stubs_sources imports a set of java source files as if they were // generated by droidstubs. // Loading
java/java_test.go +15 −13 Original line number Diff line number Diff line Loading @@ -484,28 +484,24 @@ func TestPrebuilts(t *testing.T) { prebuilt_stubs_sources { name: "stubs-source", srcs: ["stubs/sources/**/*.java"], srcs: ["stubs/sources"], } `) javac := ctx.ModuleForTests("foo", "android_common").Rule("javac") fooModule := ctx.ModuleForTests("foo", "android_common") javac := fooModule.Rule("javac") combineJar := ctx.ModuleForTests("foo", "android_common").Description("for javac") barJar := ctx.ModuleForTests("bar", "android_common").Rule("combineJar").Output bazJar := ctx.ModuleForTests("baz", "android_common").Rule("combineJar").Output sdklibStubsJar := ctx.ModuleForTests("sdklib.stubs", "android_common").Rule("combineJar").Output inputs := []string{} for _, p := range javac.BuildParams.Inputs { inputs = append(inputs, p.String()) } fooLibrary := fooModule.Module().(*Library) assertDeepEquals(t, "foo java sources incorrect", []string{"a.java"}, fooLibrary.compiledJavaSrcs.Strings()) expected := []string{ "a.java", "stubs/sources/foo/Foo.java", } if !reflect.DeepEqual(expected, inputs) { t.Errorf("foo inputs incorrect: expected %q, found %q", expected, inputs) } assertDeepEquals(t, "foo java source jars incorrect", []string{".intermediates/stubs-source/android_common/stubs-source-stubs.srcjar"}, android.NormalizePathsForTesting(fooLibrary.compiledSrcJars)) if !strings.Contains(javac.Args["classpath"], barJar.String()) { t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], barJar.String()) Loading @@ -522,6 +518,12 @@ func TestPrebuilts(t *testing.T) { ctx.ModuleForTests("qux", "android_common").Rule("Cp") } func assertDeepEquals(t *testing.T, message string, expected interface{}, actual interface{}) { if !reflect.DeepEqual(expected, actual) { t.Errorf("%s: expected %q, found %q", message, expected, actual) } } func TestDefaults(t *testing.T) { ctx, _ := testJava(t, ` java_defaults { Loading
sdk/testing.go +5 −18 Original line number Diff line number Diff line Loading @@ -183,7 +183,7 @@ func (r *testSdkResult) getSdkSnapshotBuildInfo(sdk *sdk) *snapshotBuildInfo { switch bp.Rule.String() { case android.Cp.String(): // Get source relative to build directory. src := r.pathRelativeToBuildDir(bp.Input) src := android.NormalizePathForTesting(bp.Input) // Get destination relative to the snapshot root dest := bp.Output.Rel() _, _ = fmt.Fprintf(copyRules, "%s -> %s\n", src, dest) Loading @@ -199,12 +199,12 @@ func (r *testSdkResult) getSdkSnapshotBuildInfo(sdk *sdk) *snapshotBuildInfo { // This could be an intermediate zip file and not the actual output zip. // In that case this will be overridden when the rule to merge the zips // is processed. info.outputZip = r.pathRelativeToBuildDir(bp.Output) info.outputZip = android.NormalizePathForTesting(bp.Output) case mergeZips.String(): // Copy the current outputZip to the intermediateZip. info.intermediateZip = info.outputZip mergeInput := r.pathRelativeToBuildDir(bp.Input) mergeInput := android.NormalizePathForTesting(bp.Input) if info.intermediateZip != mergeInput { r.t.Errorf("Expected intermediate zip %s to be an input to merge zips but found %s instead", info.intermediateZip, mergeInput) Loading @@ -212,10 +212,10 @@ func (r *testSdkResult) getSdkSnapshotBuildInfo(sdk *sdk) *snapshotBuildInfo { // Override output zip (which was actually the intermediate zip file) with the actual // output zip. info.outputZip = r.pathRelativeToBuildDir(bp.Output) info.outputZip = android.NormalizePathForTesting(bp.Output) // Save the zips to be merged into the intermediate zip. info.mergeZips = r.pathsRelativeToBuildDir(bp.Inputs) info.mergeZips = android.NormalizePathsForTesting(bp.Inputs) } } Loading @@ -232,19 +232,6 @@ func (r *testSdkResult) ModuleForTests(name string, variant string) android.Test return r.ctx.ModuleForTests(name, variant) } func (r *testSdkResult) pathRelativeToBuildDir(path android.Path) string { buildDir := filepath.Clean(r.config.BuildDir()) + "/" return strings.TrimPrefix(filepath.Clean(path.String()), buildDir) } func (r *testSdkResult) pathsRelativeToBuildDir(paths android.Paths) []string { var result []string for _, path := range paths { result = append(result, r.pathRelativeToBuildDir(path)) } return result } // Check the snapshot build rules. // // Takes a list of functions which check different facets of the snapshot build rules. Loading