diff --git a/dexpreopt/testing.go b/dexpreopt/testing.go index 8e90295b1..48014824b 100644 --- a/dexpreopt/testing.go +++ b/dexpreopt/testing.go @@ -15,39 +15,78 @@ package dexpreopt import ( + "fmt" + "android/soong/android" ) -type dummyToolBinary struct { +type fakeToolBinary struct { android.ModuleBase } -func (m *dummyToolBinary) GenerateAndroidBuildActions(ctx android.ModuleContext) {} +func (m *fakeToolBinary) GenerateAndroidBuildActions(ctx android.ModuleContext) {} -func (m *dummyToolBinary) HostToolPath() android.OptionalPath { +func (m *fakeToolBinary) HostToolPath() android.OptionalPath { return android.OptionalPathForPath(android.PathForTesting("dex2oat")) } -func dummyToolBinaryFactory() android.Module { - module := &dummyToolBinary{} +func fakeToolBinaryFactory() android.Module { + module := &fakeToolBinary{} android.InitAndroidArchModule(module, android.HostSupported, android.MultilibFirst) return module } func RegisterToolModulesForTest(ctx android.RegistrationContext) { - ctx.RegisterModuleType("dummy_tool_binary", dummyToolBinaryFactory) + ctx.RegisterModuleType("fake_tool_binary", fakeToolBinaryFactory) } func BpToolModulesForTest() string { return ` - dummy_tool_binary { + fake_tool_binary { name: "dex2oatd", } ` } -// Prepares a test fixture by enabling dexpreopt. -var PrepareForTestWithDexpreopt = FixtureModifyGlobalConfig(func(*GlobalConfig) {}) +func CompatLibDefinitionsForTest() string { + bp := "" + + // For class loader context and tests. + dexpreoptModules := []string{"android.test.runner"} + dexpreoptModules = append(dexpreoptModules, CompatUsesLibs...) + dexpreoptModules = append(dexpreoptModules, OptionalCompatUsesLibs...) + + for _, extra := range dexpreoptModules { + bp += fmt.Sprintf(` + java_library { + name: "%s", + srcs: ["a.java"], + sdk_version: "none", + system_modules: "stable-core-platform-api-stubs-system-modules", + compile_dex: true, + installable: true, + } + `, extra) + } + + return bp +} + +var PrepareForTestWithDexpreoptCompatLibs = android.GroupFixturePreparers( + android.FixtureAddFile("defaults/dexpreopt/compat/a.java", nil), + android.FixtureAddTextFile("defaults/dexpreopt/compat/Android.bp", CompatLibDefinitionsForTest()), +) + +var PrepareForTestWithFakeDex2oatd = android.GroupFixturePreparers( + android.FixtureRegisterWithContext(RegisterToolModulesForTest), + android.FixtureAddTextFile("defaults/dexpreopt/Android.bp", BpToolModulesForTest()), +) + +// Prepares a test fixture by enabling dexpreopt, registering the fake_tool_binary module type and +// using that to define the `dex2oatd` module. +var PrepareForTestByEnablingDexpreopt = android.GroupFixturePreparers( + FixtureModifyGlobalConfig(func(*GlobalConfig) {}), +) // FixtureModifyGlobalConfig enables dexpreopt (unless modified by the mutator) and modifies the // configuration. diff --git a/java/java_test.go b/java/java_test.go index b6f639f98..31eeb6b05 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -53,7 +53,7 @@ var prepareForJavaTest = android.GroupFixturePreparers( android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) { ctx.RegisterPreSingletonType("sdk_versions", sdkPreSingletonFactory) }), - dexpreopt.PrepareForTestWithDexpreopt, + PrepareForTestWithDexpreopt, ) func TestMain(m *testing.M) { @@ -68,7 +68,7 @@ func TestMain(m *testing.M) { func testJavaError(t *testing.T, pattern string, bp string) (*android.TestContext, android.Config) { t.Helper() result := android.GroupFixturePreparers( - prepareForJavaTest, dexpreopt.PrepareForTestWithDexpreopt). + prepareForJavaTest, dexpreopt.PrepareForTestByEnablingDexpreopt). ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(pattern)). RunTestWithBp(t, bp) return result.TestContext, result.Config diff --git a/java/testing.go b/java/testing.go index 82a2103fd..295b8d0a7 100644 --- a/java/testing.go +++ b/java/testing.go @@ -43,7 +43,7 @@ var PrepareForTestWithJavaBuildComponents = android.GroupFixturePreparers( // Make sure that mutators and module types, e.g. prebuilt mutators available. android.PrepareForTestWithAndroidBuildComponents, // Make java build components available to the test. - android.FixtureRegisterWithContext(RegisterRequiredBuildComponentsForTest), + android.FixtureRegisterWithContext(registerRequiredBuildComponentsForTest), android.FixtureRegisterWithContext(registerJavaPluginBuildComponents), ) @@ -52,7 +52,16 @@ var PrepareForTestWithJavaDefaultModules = android.GroupFixturePreparers( // Make sure that all the module types used in the defaults are registered. PrepareForTestWithJavaBuildComponents, // The java default module definitions. - android.FixtureAddTextFile(defaultJavaDir+"/Android.bp", GatherRequiredDepsForTest()), + android.FixtureAddTextFile(defaultJavaDir+"/Android.bp", gatherRequiredDepsForTest()), + // Add dexpreopt compat libs (android.test.base, etc.) and a fake dex2oatd module. + dexpreopt.PrepareForTestWithDexpreoptCompatLibs, + dexpreopt.PrepareForTestWithFakeDex2oatd, +) + +// Provides everything needed by dexpreopt. +var PrepareForTestWithDexpreopt = android.GroupFixturePreparers( + PrepareForTestWithJavaDefaultModules, + dexpreopt.PrepareForTestByEnablingDexpreopt, ) var PrepareForTestWithOverlayBuildComponents = android.FixtureRegisterWithContext(registerOverlayBuildComponents) @@ -178,7 +187,22 @@ func prebuiltApisFilesForLibs(apiLevels []string, sdkLibs []string) map[string][ // // In particular this must register all the components that are used in the `Android.bp` snippet // returned by GatherRequiredDepsForTest() +// +// deprecated: Use test fixtures instead, e.g. PrepareForTestWithJavaBuildComponents func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) { + registerRequiredBuildComponentsForTest(ctx) + + // Make sure that any tool related module types needed by dexpreopt have been registered. + dexpreopt.RegisterToolModulesForTest(ctx) +} + +// registerRequiredBuildComponentsForTest registers the build components used by +// PrepareForTestWithJavaDefaultModules. +// +// As functionality is moved out of here into separate FixturePreparer instances they should also +// be moved into GatherRequiredDepsForTest for use by tests that have not yet switched to use test +// fixtures. +func registerRequiredBuildComponentsForTest(ctx android.RegistrationContext) { RegisterAARBuildComponents(ctx) RegisterAppBuildComponents(ctx) RegisterAppImportBuildComponents(ctx) @@ -193,15 +217,32 @@ func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) { RegisterSdkLibraryBuildComponents(ctx) RegisterStubsBuildComponents(ctx) RegisterSystemModulesBuildComponents(ctx) - - // Make sure that any tool related module types needed by dexpreopt have been registered. - dexpreopt.RegisterToolModulesForTest(ctx) } // Gather the module definitions needed by tests that depend upon code from this package. // // Returns an `Android.bp` snippet that defines the modules that are needed by this package. +// +// deprecated: Use test fixtures instead, e.g. PrepareForTestWithJavaDefaultModules func GatherRequiredDepsForTest() string { + bp := gatherRequiredDepsForTest() + + // For class loader context and tests. + bp += dexpreopt.CompatLibDefinitionsForTest() + + // Make sure that any tools needed for dexpreopting are defined. + bp += dexpreopt.BpToolModulesForTest() + + return bp +} + +// gatherRequiredDepsForTest gathers the module definitions used by +// PrepareForTestWithJavaDefaultModules. +// +// As functionality is moved out of here into separate FixturePreparer instances they should also +// be moved into GatherRequiredDepsForTest for use by tests that have not yet switched to use test +// fixtures. +func gatherRequiredDepsForTest() string { var bp string extraModules := []string{ @@ -233,24 +274,6 @@ func GatherRequiredDepsForTest() string { `, extra) } - // For class loader context and tests. - dexpreoptModules := []string{"android.test.runner"} - dexpreoptModules = append(dexpreoptModules, dexpreopt.CompatUsesLibs...) - dexpreoptModules = append(dexpreoptModules, dexpreopt.OptionalCompatUsesLibs...) - - for _, extra := range dexpreoptModules { - bp += fmt.Sprintf(` - java_library { - name: "%s", - srcs: ["a.java"], - sdk_version: "none", - system_modules: "stable-core-platform-api-stubs-system-modules", - compile_dex: true, - installable: true, - } - `, extra) - } - bp += ` java_library { name: "framework", @@ -287,9 +310,6 @@ func GatherRequiredDepsForTest() string { `, extra) } - // Make sure that any tools needed for dexpreopting are defined. - bp += dexpreopt.BpToolModulesForTest() - // Make sure that the dex_bootjars singleton module is instantiated for the tests. bp += ` dex_bootjars {