Merge "Convert test mutators to TransitionMutators" into main
This commit is contained in:
@@ -516,6 +516,9 @@ type androidTransitionMutator struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *androidTransitionMutator) Split(ctx blueprint.BaseModuleContext) []string {
|
func (a *androidTransitionMutator) Split(ctx blueprint.BaseModuleContext) []string {
|
||||||
|
if a.finalPhase {
|
||||||
|
panic("TransitionMutator not allowed in FinalDepsMutators")
|
||||||
|
}
|
||||||
if m, ok := ctx.Module().(Module); ok {
|
if m, ok := ctx.Module().(Module); ok {
|
||||||
moduleContext := m.base().baseModuleContextFactory(ctx)
|
moduleContext := m.base().baseModuleContextFactory(ctx)
|
||||||
return a.mutator.Split(&moduleContext)
|
return a.mutator.Split(&moduleContext)
|
||||||
|
@@ -81,6 +81,40 @@ func TestMutatorAddMissingDependencies(t *testing.T) {
|
|||||||
AssertDeepEquals(t, "foo missing deps", []string{"added_missing_dep", "regular_missing_dep"}, foo.missingDeps)
|
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) {
|
func TestModuleString(t *testing.T) {
|
||||||
bp := `
|
bp := `
|
||||||
test {
|
test {
|
||||||
@@ -94,9 +128,11 @@ func TestModuleString(t *testing.T) {
|
|||||||
FixtureRegisterWithContext(func(ctx RegistrationContext) {
|
FixtureRegisterWithContext(func(ctx RegistrationContext) {
|
||||||
|
|
||||||
ctx.PreArchMutators(func(ctx RegisterMutatorsContext) {
|
ctx.PreArchMutators(func(ctx RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("pre_arch", func(ctx BottomUpMutatorContext) {
|
ctx.Transition("pre_arch", &testTransitionMutator{
|
||||||
moduleStrings = append(moduleStrings, ctx.Module().String())
|
split: func(ctx BaseModuleContext) []string {
|
||||||
ctx.CreateVariations("a", "b")
|
moduleStrings = append(moduleStrings, ctx.Module().String())
|
||||||
|
return []string{"a", "b"}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
ctx.TopDown("rename_top_down", func(ctx TopDownMutatorContext) {
|
ctx.TopDown("rename_top_down", func(ctx TopDownMutatorContext) {
|
||||||
moduleStrings = append(moduleStrings, ctx.Module().String())
|
moduleStrings = append(moduleStrings, ctx.Module().String())
|
||||||
@@ -105,16 +141,23 @@ func TestModuleString(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
|
ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("pre_deps", func(ctx BottomUpMutatorContext) {
|
ctx.Transition("pre_deps", &testTransitionMutator{
|
||||||
moduleStrings = append(moduleStrings, ctx.Module().String())
|
split: func(ctx BaseModuleContext) []string {
|
||||||
ctx.CreateVariations("c", "d")
|
moduleStrings = append(moduleStrings, ctx.Module().String())
|
||||||
|
return []string{"c", "d"}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
ctx.PostDepsMutators(func(ctx RegisterMutatorsContext) {
|
ctx.PostDepsMutators(func(ctx RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("post_deps", func(ctx BottomUpMutatorContext) {
|
ctx.Transition("post_deps", &testTransitionMutator{
|
||||||
moduleStrings = append(moduleStrings, ctx.Module().String())
|
split: func(ctx BaseModuleContext) []string {
|
||||||
ctx.CreateLocalVariations("e", "f")
|
moduleStrings = append(moduleStrings, ctx.Module().String())
|
||||||
|
return []string{"e", "f"}
|
||||||
|
},
|
||||||
|
outgoingTransition: func(ctx OutgoingTransitionContext, sourceVariation string) string {
|
||||||
|
return ""
|
||||||
|
},
|
||||||
})
|
})
|
||||||
ctx.BottomUp("rename_bottom_up", func(ctx BottomUpMutatorContext) {
|
ctx.BottomUp("rename_bottom_up", func(ctx BottomUpMutatorContext) {
|
||||||
moduleStrings = append(moduleStrings, ctx.Module().String())
|
moduleStrings = append(moduleStrings, ctx.Module().String())
|
||||||
@@ -138,15 +181,15 @@ func TestModuleString(t *testing.T) {
|
|||||||
"foo{pre_arch:b}",
|
"foo{pre_arch:b}",
|
||||||
"foo{pre_arch:a}",
|
"foo{pre_arch:a}",
|
||||||
|
|
||||||
// After rename_top_down.
|
// After rename_top_down (reversed because pre_deps TransitionMutator.Split is TopDown).
|
||||||
"foo_renamed1{pre_arch:a}",
|
|
||||||
"foo_renamed1{pre_arch:b}",
|
"foo_renamed1{pre_arch:b}",
|
||||||
|
"foo_renamed1{pre_arch:a}",
|
||||||
|
|
||||||
// After pre_deps.
|
// After pre_deps (reversed because post_deps TransitionMutator.Split is TopDown).
|
||||||
"foo_renamed1{pre_arch:a,pre_deps:c}",
|
|
||||||
"foo_renamed1{pre_arch:a,pre_deps:d}",
|
|
||||||
"foo_renamed1{pre_arch:b,pre_deps:c}",
|
|
||||||
"foo_renamed1{pre_arch:b,pre_deps:d}",
|
"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.
|
// After post_deps.
|
||||||
"foo_renamed1{pre_arch:a,pre_deps:c,post_deps:e}",
|
"foo_renamed1{pre_arch:a,pre_deps:c,post_deps:e}",
|
||||||
@@ -202,8 +245,10 @@ func TestFinalDepsPhase(t *testing.T) {
|
|||||||
ctx.AddFarVariationDependencies([]blueprint.Variation{}, dep1Tag, "common_dep_1")
|
ctx.AddFarVariationDependencies([]blueprint.Variation{}, dep1Tag, "common_dep_1")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
ctx.BottomUp("variant", func(ctx BottomUpMutatorContext) {
|
ctx.Transition("variant", &testTransitionMutator{
|
||||||
ctx.CreateLocalVariations("a", "b")
|
split: func(ctx BaseModuleContext) []string {
|
||||||
|
return []string{"a", "b"}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -243,27 +288,20 @@ func TestFinalDepsPhase(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNoCreateVariationsInFinalDeps(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(
|
GroupFixturePreparers(
|
||||||
FixtureRegisterWithContext(func(ctx RegistrationContext) {
|
FixtureRegisterWithContext(func(ctx RegistrationContext) {
|
||||||
ctx.FinalDepsMutators(func(ctx RegisterMutatorsContext) {
|
ctx.FinalDepsMutators(func(ctx RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("vars", func(ctx BottomUpMutatorContext) {
|
ctx.Transition("vars", &testTransitionMutator{
|
||||||
defer checkErr()
|
split: func(ctx BaseModuleContext) []string {
|
||||||
ctx.CreateVariations("a", "b")
|
return []string{"a", "b"}
|
||||||
})
|
},
|
||||||
ctx.BottomUp("local_vars", func(ctx BottomUpMutatorContext) {
|
|
||||||
defer checkErr()
|
|
||||||
ctx.CreateLocalVariations("a", "b")
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
ctx.RegisterModuleType("test", mutatorTestModuleFactory)
|
ctx.RegisterModuleType("test", mutatorTestModuleFactory)
|
||||||
}),
|
}),
|
||||||
FixtureWithRootAndroidBp(`test {name: "foo"}`),
|
FixtureWithRootAndroidBp(`test {name: "foo"}`),
|
||||||
).RunTest(t)
|
).
|
||||||
|
ExtendWithErrorHandler(FixtureExpectsOneErrorPattern("not allowed in FinalDepsMutators")).
|
||||||
|
RunTest(t)
|
||||||
}
|
}
|
||||||
|
@@ -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) {
|
func TestVariantSingletonModule(t *testing.T) {
|
||||||
if testing.Short() {
|
if testing.Short() {
|
||||||
t.Skip("test fails with data race enabled")
|
t.Skip("test fails with data race enabled")
|
||||||
@@ -116,7 +110,11 @@ func TestVariantSingletonModule(t *testing.T) {
|
|||||||
prepareForSingletonModuleTest,
|
prepareForSingletonModuleTest,
|
||||||
FixtureRegisterWithContext(func(ctx RegistrationContext) {
|
FixtureRegisterWithContext(func(ctx RegistrationContext) {
|
||||||
ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
|
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"}
|
||||||
|
},
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
).
|
).
|
||||||
|
@@ -49,17 +49,30 @@ var apexVersion = "28"
|
|||||||
|
|
||||||
func registerTestMutators(ctx android.RegistrationContext) {
|
func registerTestMutators(ctx android.RegistrationContext) {
|
||||||
ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("apex", testApexMutator).Parallel()
|
ctx.Transition("apex", &testApexTransitionMutator{})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func testApexMutator(mctx android.BottomUpMutatorContext) {
|
type testApexTransitionMutator struct{}
|
||||||
modules := mctx.CreateVariations(apexVariationName)
|
|
||||||
|
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{
|
apexInfo := android.ApexInfo{
|
||||||
ApexVariationName: apexVariationName,
|
ApexVariationName: apexVariationName,
|
||||||
MinSdkVersion: android.ApiLevelForTest(apexVersion),
|
MinSdkVersion: android.ApiLevelForTest(apexVersion),
|
||||||
}
|
}
|
||||||
mctx.SetVariationProvider(modules[0], android.ApexInfoProvider, apexInfo)
|
android.SetProvider(ctx, android.ApexInfoProvider, apexInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// testCcWithConfig runs tests using the prepareForCcTest
|
// testCcWithConfig runs tests using the prepareForCcTest
|
||||||
|
Reference in New Issue
Block a user