Loading android/mutator.go +3 −0 Original line number Diff line number Diff line Loading @@ -516,6 +516,9 @@ type androidTransitionMutator struct { } func (a *androidTransitionMutator) Split(ctx blueprint.BaseModuleContext) []string { if a.finalPhase { panic("TransitionMutator not allowed in FinalDepsMutators") } if m, ok := ctx.Module().(Module); ok { moduleContext := m.base().baseModuleContextFactory(ctx) return a.mutator.Split(&moduleContext) Loading android/mutator_test.go +69 −31 Original line number Diff line number Diff line Loading @@ -81,6 +81,40 @@ func TestMutatorAddMissingDependencies(t *testing.T) { AssertDeepEquals(t, "foo missing deps", []string{"added_missing_dep", "regular_missing_dep"}, foo.missingDeps) } type testTransitionMutator struct { split func(ctx BaseModuleContext) []string outgoingTransition func(ctx OutgoingTransitionContext, sourceVariation string) string incomingTransition func(ctx IncomingTransitionContext, incomingVariation string) string mutate func(ctx BottomUpMutatorContext, variation string) } func (t *testTransitionMutator) Split(ctx BaseModuleContext) []string { if t.split != nil { return t.split(ctx) } return []string{""} } func (t *testTransitionMutator) OutgoingTransition(ctx OutgoingTransitionContext, sourceVariation string) string { if t.outgoingTransition != nil { return t.outgoingTransition(ctx, sourceVariation) } return sourceVariation } func (t *testTransitionMutator) IncomingTransition(ctx IncomingTransitionContext, incomingVariation string) string { if t.incomingTransition != nil { return t.incomingTransition(ctx, incomingVariation) } return incomingVariation } func (t *testTransitionMutator) Mutate(ctx BottomUpMutatorContext, variation string) { if t.mutate != nil { t.mutate(ctx, variation) } } func TestModuleString(t *testing.T) { bp := ` test { Loading @@ -94,9 +128,11 @@ func TestModuleString(t *testing.T) { FixtureRegisterWithContext(func(ctx RegistrationContext) { ctx.PreArchMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("pre_arch", func(ctx BottomUpMutatorContext) { ctx.Transition("pre_arch", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { moduleStrings = append(moduleStrings, ctx.Module().String()) ctx.CreateVariations("a", "b") return []string{"a", "b"} }, }) ctx.TopDown("rename_top_down", func(ctx TopDownMutatorContext) { moduleStrings = append(moduleStrings, ctx.Module().String()) Loading @@ -105,16 +141,23 @@ func TestModuleString(t *testing.T) { }) ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("pre_deps", func(ctx BottomUpMutatorContext) { ctx.Transition("pre_deps", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { moduleStrings = append(moduleStrings, ctx.Module().String()) ctx.CreateVariations("c", "d") return []string{"c", "d"} }, }) }) ctx.PostDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("post_deps", func(ctx BottomUpMutatorContext) { ctx.Transition("post_deps", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { moduleStrings = append(moduleStrings, ctx.Module().String()) ctx.CreateLocalVariations("e", "f") return []string{"e", "f"} }, outgoingTransition: func(ctx OutgoingTransitionContext, sourceVariation string) string { return "" }, }) ctx.BottomUp("rename_bottom_up", func(ctx BottomUpMutatorContext) { moduleStrings = append(moduleStrings, ctx.Module().String()) Loading @@ -138,15 +181,15 @@ func TestModuleString(t *testing.T) { "foo{pre_arch:b}", "foo{pre_arch:a}", // After rename_top_down. "foo_renamed1{pre_arch:a}", // After rename_top_down (reversed because pre_deps TransitionMutator.Split is TopDown). "foo_renamed1{pre_arch:b}", "foo_renamed1{pre_arch:a}", // After pre_deps. "foo_renamed1{pre_arch:a,pre_deps:c}", "foo_renamed1{pre_arch:a,pre_deps:d}", "foo_renamed1{pre_arch:b,pre_deps:c}", // After pre_deps (reversed because post_deps TransitionMutator.Split is TopDown). "foo_renamed1{pre_arch:b,pre_deps:d}", "foo_renamed1{pre_arch:b,pre_deps:c}", "foo_renamed1{pre_arch:a,pre_deps:d}", "foo_renamed1{pre_arch:a,pre_deps:c}", // After post_deps. "foo_renamed1{pre_arch:a,pre_deps:c,post_deps:e}", Loading Loading @@ -202,8 +245,10 @@ func TestFinalDepsPhase(t *testing.T) { ctx.AddFarVariationDependencies([]blueprint.Variation{}, dep1Tag, "common_dep_1") } }) ctx.BottomUp("variant", func(ctx BottomUpMutatorContext) { ctx.CreateLocalVariations("a", "b") ctx.Transition("variant", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { return []string{"a", "b"} }, }) }) Loading Loading @@ -243,27 +288,20 @@ func TestFinalDepsPhase(t *testing.T) { } func TestNoCreateVariationsInFinalDeps(t *testing.T) { checkErr := func() { if err := recover(); err == nil || !strings.Contains(fmt.Sprintf("%s", err), "not allowed in FinalDepsMutators") { panic("Expected FinalDepsMutators consistency check to fail") } } GroupFixturePreparers( FixtureRegisterWithContext(func(ctx RegistrationContext) { ctx.FinalDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("vars", func(ctx BottomUpMutatorContext) { defer checkErr() ctx.CreateVariations("a", "b") }) ctx.BottomUp("local_vars", func(ctx BottomUpMutatorContext) { defer checkErr() ctx.CreateLocalVariations("a", "b") ctx.Transition("vars", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { return []string{"a", "b"} }, }) }) ctx.RegisterModuleType("test", mutatorTestModuleFactory) }), FixtureWithRootAndroidBp(`test {name: "foo"}`), ).RunTest(t) ). ExtendWithErrorHandler(FixtureExpectsOneErrorPattern("not allowed in FinalDepsMutators")). RunTest(t) } android/singleton_module_test.go +5 −7 Original line number Diff line number Diff line Loading @@ -96,12 +96,6 @@ func TestUnusedSingletonModule(t *testing.T) { } } func testVariantSingletonModuleMutator(ctx BottomUpMutatorContext) { if _, ok := ctx.Module().(*testSingletonModule); ok { ctx.CreateVariations("a", "b") } } func TestVariantSingletonModule(t *testing.T) { if testing.Short() { t.Skip("test fails with data race enabled") Loading @@ -116,7 +110,11 @@ func TestVariantSingletonModule(t *testing.T) { prepareForSingletonModuleTest, FixtureRegisterWithContext(func(ctx RegistrationContext) { ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("test_singleton_module_mutator", testVariantSingletonModuleMutator) ctx.Transition("test_singleton_module_mutator", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { return []string{"a", "b"} }, }) }) }), ). Loading cc/cc_test.go +17 −4 Original line number Diff line number Diff line Loading @@ -49,17 +49,30 @@ var apexVersion = "28" func registerTestMutators(ctx android.RegistrationContext) { ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("apex", testApexMutator).Parallel() ctx.Transition("apex", &testApexTransitionMutator{}) }) } func testApexMutator(mctx android.BottomUpMutatorContext) { modules := mctx.CreateVariations(apexVariationName) type testApexTransitionMutator struct{} func (t *testApexTransitionMutator) Split(ctx android.BaseModuleContext) []string { return []string{apexVariationName} } func (t *testApexTransitionMutator) OutgoingTransition(ctx android.OutgoingTransitionContext, sourceVariation string) string { return sourceVariation } func (t *testApexTransitionMutator) IncomingTransition(ctx android.IncomingTransitionContext, incomingVariation string) string { return incomingVariation } func (t *testApexTransitionMutator) Mutate(ctx android.BottomUpMutatorContext, variation string) { apexInfo := android.ApexInfo{ ApexVariationName: apexVariationName, MinSdkVersion: android.ApiLevelForTest(apexVersion), } mctx.SetVariationProvider(modules[0], android.ApexInfoProvider, apexInfo) android.SetProvider(ctx, android.ApexInfoProvider, apexInfo) } // testCcWithConfig runs tests using the prepareForCcTest Loading Loading
android/mutator.go +3 −0 Original line number Diff line number Diff line Loading @@ -516,6 +516,9 @@ type androidTransitionMutator struct { } func (a *androidTransitionMutator) Split(ctx blueprint.BaseModuleContext) []string { if a.finalPhase { panic("TransitionMutator not allowed in FinalDepsMutators") } if m, ok := ctx.Module().(Module); ok { moduleContext := m.base().baseModuleContextFactory(ctx) return a.mutator.Split(&moduleContext) Loading
android/mutator_test.go +69 −31 Original line number Diff line number Diff line Loading @@ -81,6 +81,40 @@ func TestMutatorAddMissingDependencies(t *testing.T) { AssertDeepEquals(t, "foo missing deps", []string{"added_missing_dep", "regular_missing_dep"}, foo.missingDeps) } type testTransitionMutator struct { split func(ctx BaseModuleContext) []string outgoingTransition func(ctx OutgoingTransitionContext, sourceVariation string) string incomingTransition func(ctx IncomingTransitionContext, incomingVariation string) string mutate func(ctx BottomUpMutatorContext, variation string) } func (t *testTransitionMutator) Split(ctx BaseModuleContext) []string { if t.split != nil { return t.split(ctx) } return []string{""} } func (t *testTransitionMutator) OutgoingTransition(ctx OutgoingTransitionContext, sourceVariation string) string { if t.outgoingTransition != nil { return t.outgoingTransition(ctx, sourceVariation) } return sourceVariation } func (t *testTransitionMutator) IncomingTransition(ctx IncomingTransitionContext, incomingVariation string) string { if t.incomingTransition != nil { return t.incomingTransition(ctx, incomingVariation) } return incomingVariation } func (t *testTransitionMutator) Mutate(ctx BottomUpMutatorContext, variation string) { if t.mutate != nil { t.mutate(ctx, variation) } } func TestModuleString(t *testing.T) { bp := ` test { Loading @@ -94,9 +128,11 @@ func TestModuleString(t *testing.T) { FixtureRegisterWithContext(func(ctx RegistrationContext) { ctx.PreArchMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("pre_arch", func(ctx BottomUpMutatorContext) { ctx.Transition("pre_arch", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { moduleStrings = append(moduleStrings, ctx.Module().String()) ctx.CreateVariations("a", "b") return []string{"a", "b"} }, }) ctx.TopDown("rename_top_down", func(ctx TopDownMutatorContext) { moduleStrings = append(moduleStrings, ctx.Module().String()) Loading @@ -105,16 +141,23 @@ func TestModuleString(t *testing.T) { }) ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("pre_deps", func(ctx BottomUpMutatorContext) { ctx.Transition("pre_deps", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { moduleStrings = append(moduleStrings, ctx.Module().String()) ctx.CreateVariations("c", "d") return []string{"c", "d"} }, }) }) ctx.PostDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("post_deps", func(ctx BottomUpMutatorContext) { ctx.Transition("post_deps", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { moduleStrings = append(moduleStrings, ctx.Module().String()) ctx.CreateLocalVariations("e", "f") return []string{"e", "f"} }, outgoingTransition: func(ctx OutgoingTransitionContext, sourceVariation string) string { return "" }, }) ctx.BottomUp("rename_bottom_up", func(ctx BottomUpMutatorContext) { moduleStrings = append(moduleStrings, ctx.Module().String()) Loading @@ -138,15 +181,15 @@ func TestModuleString(t *testing.T) { "foo{pre_arch:b}", "foo{pre_arch:a}", // After rename_top_down. "foo_renamed1{pre_arch:a}", // After rename_top_down (reversed because pre_deps TransitionMutator.Split is TopDown). "foo_renamed1{pre_arch:b}", "foo_renamed1{pre_arch:a}", // After pre_deps. "foo_renamed1{pre_arch:a,pre_deps:c}", "foo_renamed1{pre_arch:a,pre_deps:d}", "foo_renamed1{pre_arch:b,pre_deps:c}", // After pre_deps (reversed because post_deps TransitionMutator.Split is TopDown). "foo_renamed1{pre_arch:b,pre_deps:d}", "foo_renamed1{pre_arch:b,pre_deps:c}", "foo_renamed1{pre_arch:a,pre_deps:d}", "foo_renamed1{pre_arch:a,pre_deps:c}", // After post_deps. "foo_renamed1{pre_arch:a,pre_deps:c,post_deps:e}", Loading Loading @@ -202,8 +245,10 @@ func TestFinalDepsPhase(t *testing.T) { ctx.AddFarVariationDependencies([]blueprint.Variation{}, dep1Tag, "common_dep_1") } }) ctx.BottomUp("variant", func(ctx BottomUpMutatorContext) { ctx.CreateLocalVariations("a", "b") ctx.Transition("variant", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { return []string{"a", "b"} }, }) }) Loading Loading @@ -243,27 +288,20 @@ func TestFinalDepsPhase(t *testing.T) { } func TestNoCreateVariationsInFinalDeps(t *testing.T) { checkErr := func() { if err := recover(); err == nil || !strings.Contains(fmt.Sprintf("%s", err), "not allowed in FinalDepsMutators") { panic("Expected FinalDepsMutators consistency check to fail") } } GroupFixturePreparers( FixtureRegisterWithContext(func(ctx RegistrationContext) { ctx.FinalDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("vars", func(ctx BottomUpMutatorContext) { defer checkErr() ctx.CreateVariations("a", "b") }) ctx.BottomUp("local_vars", func(ctx BottomUpMutatorContext) { defer checkErr() ctx.CreateLocalVariations("a", "b") ctx.Transition("vars", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { return []string{"a", "b"} }, }) }) ctx.RegisterModuleType("test", mutatorTestModuleFactory) }), FixtureWithRootAndroidBp(`test {name: "foo"}`), ).RunTest(t) ). ExtendWithErrorHandler(FixtureExpectsOneErrorPattern("not allowed in FinalDepsMutators")). RunTest(t) }
android/singleton_module_test.go +5 −7 Original line number Diff line number Diff line Loading @@ -96,12 +96,6 @@ func TestUnusedSingletonModule(t *testing.T) { } } func testVariantSingletonModuleMutator(ctx BottomUpMutatorContext) { if _, ok := ctx.Module().(*testSingletonModule); ok { ctx.CreateVariations("a", "b") } } func TestVariantSingletonModule(t *testing.T) { if testing.Short() { t.Skip("test fails with data race enabled") Loading @@ -116,7 +110,11 @@ func TestVariantSingletonModule(t *testing.T) { prepareForSingletonModuleTest, FixtureRegisterWithContext(func(ctx RegistrationContext) { ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("test_singleton_module_mutator", testVariantSingletonModuleMutator) ctx.Transition("test_singleton_module_mutator", &testTransitionMutator{ split: func(ctx BaseModuleContext) []string { return []string{"a", "b"} }, }) }) }), ). Loading
cc/cc_test.go +17 −4 Original line number Diff line number Diff line Loading @@ -49,17 +49,30 @@ var apexVersion = "28" func registerTestMutators(ctx android.RegistrationContext) { ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("apex", testApexMutator).Parallel() ctx.Transition("apex", &testApexTransitionMutator{}) }) } func testApexMutator(mctx android.BottomUpMutatorContext) { modules := mctx.CreateVariations(apexVariationName) type testApexTransitionMutator struct{} func (t *testApexTransitionMutator) Split(ctx android.BaseModuleContext) []string { return []string{apexVariationName} } func (t *testApexTransitionMutator) OutgoingTransition(ctx android.OutgoingTransitionContext, sourceVariation string) string { return sourceVariation } func (t *testApexTransitionMutator) IncomingTransition(ctx android.IncomingTransitionContext, incomingVariation string) string { return incomingVariation } func (t *testApexTransitionMutator) Mutate(ctx android.BottomUpMutatorContext, variation string) { apexInfo := android.ApexInfo{ ApexVariationName: apexVariationName, MinSdkVersion: android.ApiLevelForTest(apexVersion), } mctx.SetVariationProvider(modules[0], android.ApexInfoProvider, apexInfo) android.SetProvider(ctx, android.ApexInfoProvider, apexInfo) } // testCcWithConfig runs tests using the prepareForCcTest Loading