Loading Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ bootstrap_go_package { ], testSrcs: [ "android/android_test.go", "android/androidmk_test.go", "android/arch_test.go", "android/config_test.go", "android/expand_test.go", Loading Loading @@ -291,6 +292,7 @@ bootstrap_go_package { "java/testing.go", ], testSrcs: [ "java/androidmk_test.go", "java/app_test.go", "java/device_host_converter_test.go", "java/dexpreopt_test.go", Loading android/androidmk.go +24 −14 Original line number Diff line number Diff line Loading @@ -391,19 +391,7 @@ func translateGoBinaryModule(ctx SingletonContext, w io.Writer, mod blueprint.Mo return nil } func translateAndroidModule(ctx SingletonContext, w io.Writer, mod blueprint.Module, provider AndroidMkDataProvider) error { amod := mod.(Module).base() if shouldSkipAndroidMkProcessing(amod) { return nil } data := provider.AndroidMk() if data.Include == "" { data.Include = "$(BUILD_PREBUILT)" } func (data *AndroidMkData) fillInData(config Config, bpPath string, mod blueprint.Module) { // Get the preamble content through AndroidMkEntries logic. entries := AndroidMkEntries{ Class: data.Class, Loading @@ -416,11 +404,33 @@ func translateAndroidModule(ctx SingletonContext, w io.Writer, mod blueprint.Mod Host_required: data.Host_required, Target_required: data.Target_required, } entries.fillInEntries(ctx.Config(), ctx.BlueprintFile(mod), mod) entries.fillInEntries(config, bpPath, mod) // preamble doesn't need the footer content. entries.footer = bytes.Buffer{} entries.write(&data.preamble) // copy entries back to data since it is used in Custom data.Required = entries.Required data.Host_required = entries.Host_required data.Target_required = entries.Target_required } func translateAndroidModule(ctx SingletonContext, w io.Writer, mod blueprint.Module, provider AndroidMkDataProvider) error { amod := mod.(Module).base() if shouldSkipAndroidMkProcessing(amod) { return nil } data := provider.AndroidMk() if data.Include == "" { data.Include = "$(BUILD_PREBUILT)" } data.fillInData(ctx.Config(), ctx.BlueprintFile(mod), mod) prefix := "" if amod.ArchSpecific() { switch amod.Os().Class { Loading android/androidmk_test.go 0 → 100644 +82 −0 Original line number Diff line number Diff line // Copyright 2019 Google Inc. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package android import ( "io" "reflect" "testing" ) type customModule struct { ModuleBase data AndroidMkData } func (m *customModule) GenerateAndroidBuildActions(ctx ModuleContext) { } func (m *customModule) AndroidMk() AndroidMkData { return AndroidMkData{ Custom: func(w io.Writer, name, prefix, moduleDir string, data AndroidMkData) { m.data = data }, } } func customModuleFactory() Module { module := &customModule{} InitAndroidModule(module) return module } func TestAndroidMkSingleton_PassesUpdatedAndroidMkDataToCustomCallback(t *testing.T) { config := TestConfig(buildDir, nil) config.inMake = true // Enable androidmk Singleton ctx := NewTestContext() ctx.RegisterSingletonType("androidmk", SingletonFactoryAdaptor(AndroidMkSingleton)) ctx.RegisterModuleType("custom", ModuleFactoryAdaptor(customModuleFactory)) ctx.Register() bp := ` custom { name: "foo", required: ["bar"], host_required: ["baz"], target_required: ["qux"], } ` ctx.MockFileSystem(map[string][]byte{ "Android.bp": []byte(bp), }) _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) FailIfErrored(t, errs) _, errs = ctx.PrepareBuildActions(config) FailIfErrored(t, errs) m := ctx.ModuleForTests("foo", "").Module().(*customModule) assertEqual := func(expected interface{}, actual interface{}) { if !reflect.DeepEqual(expected, actual) { t.Errorf("%q expected, but got %q", expected, actual) } } assertEqual([]string{"bar"}, m.data.Required) assertEqual([]string{"baz"}, m.data.Host_required) assertEqual([]string{"qux"}, m.data.Target_required) } android/testing.go +11 −0 Original line number Diff line number Diff line Loading @@ -382,3 +382,14 @@ func AndroidMkEntriesForTest(t *testing.T, config Config, bpPath string, mod blu entries.fillInEntries(config, bpPath, mod) return entries } func AndroidMkDataForTest(t *testing.T, config Config, bpPath string, mod blueprint.Module) AndroidMkData { var p AndroidMkDataProvider var ok bool if p, ok = mod.(AndroidMkDataProvider); !ok { t.Errorf("module does not implmement AndroidMkDataProvider: " + mod.Name()) } data := p.AndroidMk() data.fillInData(config, bpPath, mod) return data } android/util.go +11 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,17 @@ func PrefixInList(s string, list []string) bool { return false } // IndexListPred returns the index of the element which in the given `list` satisfying the predicate, or -1 if there is no such element. func IndexListPred(pred func(s string) bool, list []string) int { for i, l := range list { if pred(l) { return i } } return -1 } func FilterList(list []string, filter []string) (remainder []string, filtered []string) { for _, l := range list { if InList(l, filter) { Loading Loading
Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ bootstrap_go_package { ], testSrcs: [ "android/android_test.go", "android/androidmk_test.go", "android/arch_test.go", "android/config_test.go", "android/expand_test.go", Loading Loading @@ -291,6 +292,7 @@ bootstrap_go_package { "java/testing.go", ], testSrcs: [ "java/androidmk_test.go", "java/app_test.go", "java/device_host_converter_test.go", "java/dexpreopt_test.go", Loading
android/androidmk.go +24 −14 Original line number Diff line number Diff line Loading @@ -391,19 +391,7 @@ func translateGoBinaryModule(ctx SingletonContext, w io.Writer, mod blueprint.Mo return nil } func translateAndroidModule(ctx SingletonContext, w io.Writer, mod blueprint.Module, provider AndroidMkDataProvider) error { amod := mod.(Module).base() if shouldSkipAndroidMkProcessing(amod) { return nil } data := provider.AndroidMk() if data.Include == "" { data.Include = "$(BUILD_PREBUILT)" } func (data *AndroidMkData) fillInData(config Config, bpPath string, mod blueprint.Module) { // Get the preamble content through AndroidMkEntries logic. entries := AndroidMkEntries{ Class: data.Class, Loading @@ -416,11 +404,33 @@ func translateAndroidModule(ctx SingletonContext, w io.Writer, mod blueprint.Mod Host_required: data.Host_required, Target_required: data.Target_required, } entries.fillInEntries(ctx.Config(), ctx.BlueprintFile(mod), mod) entries.fillInEntries(config, bpPath, mod) // preamble doesn't need the footer content. entries.footer = bytes.Buffer{} entries.write(&data.preamble) // copy entries back to data since it is used in Custom data.Required = entries.Required data.Host_required = entries.Host_required data.Target_required = entries.Target_required } func translateAndroidModule(ctx SingletonContext, w io.Writer, mod blueprint.Module, provider AndroidMkDataProvider) error { amod := mod.(Module).base() if shouldSkipAndroidMkProcessing(amod) { return nil } data := provider.AndroidMk() if data.Include == "" { data.Include = "$(BUILD_PREBUILT)" } data.fillInData(ctx.Config(), ctx.BlueprintFile(mod), mod) prefix := "" if amod.ArchSpecific() { switch amod.Os().Class { Loading
android/androidmk_test.go 0 → 100644 +82 −0 Original line number Diff line number Diff line // Copyright 2019 Google Inc. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package android import ( "io" "reflect" "testing" ) type customModule struct { ModuleBase data AndroidMkData } func (m *customModule) GenerateAndroidBuildActions(ctx ModuleContext) { } func (m *customModule) AndroidMk() AndroidMkData { return AndroidMkData{ Custom: func(w io.Writer, name, prefix, moduleDir string, data AndroidMkData) { m.data = data }, } } func customModuleFactory() Module { module := &customModule{} InitAndroidModule(module) return module } func TestAndroidMkSingleton_PassesUpdatedAndroidMkDataToCustomCallback(t *testing.T) { config := TestConfig(buildDir, nil) config.inMake = true // Enable androidmk Singleton ctx := NewTestContext() ctx.RegisterSingletonType("androidmk", SingletonFactoryAdaptor(AndroidMkSingleton)) ctx.RegisterModuleType("custom", ModuleFactoryAdaptor(customModuleFactory)) ctx.Register() bp := ` custom { name: "foo", required: ["bar"], host_required: ["baz"], target_required: ["qux"], } ` ctx.MockFileSystem(map[string][]byte{ "Android.bp": []byte(bp), }) _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) FailIfErrored(t, errs) _, errs = ctx.PrepareBuildActions(config) FailIfErrored(t, errs) m := ctx.ModuleForTests("foo", "").Module().(*customModule) assertEqual := func(expected interface{}, actual interface{}) { if !reflect.DeepEqual(expected, actual) { t.Errorf("%q expected, but got %q", expected, actual) } } assertEqual([]string{"bar"}, m.data.Required) assertEqual([]string{"baz"}, m.data.Host_required) assertEqual([]string{"qux"}, m.data.Target_required) }
android/testing.go +11 −0 Original line number Diff line number Diff line Loading @@ -382,3 +382,14 @@ func AndroidMkEntriesForTest(t *testing.T, config Config, bpPath string, mod blu entries.fillInEntries(config, bpPath, mod) return entries } func AndroidMkDataForTest(t *testing.T, config Config, bpPath string, mod blueprint.Module) AndroidMkData { var p AndroidMkDataProvider var ok bool if p, ok = mod.(AndroidMkDataProvider); !ok { t.Errorf("module does not implmement AndroidMkDataProvider: " + mod.Name()) } data := p.AndroidMk() data.fillInData(config, bpPath, mod) return data }
android/util.go +11 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,17 @@ func PrefixInList(s string, list []string) bool { return false } // IndexListPred returns the index of the element which in the given `list` satisfying the predicate, or -1 if there is no such element. func IndexListPred(pred func(s string) bool, list []string) int { for i, l := range list { if pred(l) { return i } } return -1 } func FilterList(list []string, filter []string) (remainder []string, filtered []string) { for _, l := range list { if InList(l, filter) { Loading