Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9fc9f534 authored by Paul Duffin's avatar Paul Duffin
Browse files

Group all the preparations needed for testing dexpreopt

Make it easier to test dexpreopt functionality by grouping all the
fixture preparations together.

Bug: 177892522
Test: m nothing
Change-Id: I94f66e3ec82efc4fd791f4fdab678d298565e452
parent 3c84eaaa
Loading
Loading
Loading
Loading
+41 −2
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
package dexpreopt

import (
	"fmt"

	"android/soong/android"
)

@@ -46,8 +48,45 @@ func BpToolModulesForTest() string {
	`
}

// Prepares a test fixture by enabling dexpreopt.
var PrepareForTestWithDexpreopt = FixtureModifyGlobalConfig(func(*GlobalConfig) {})
func CompatLibDefinitionsForTest() string {
	bp := ""

	// For class loader context and <uses-library> 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.
+2 −2
Original line number Diff line number Diff line
@@ -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
+21 −25
Original line number Diff line number Diff line
@@ -53,6 +53,15 @@ var PrepareForTestWithJavaDefaultModules = android.GroupFixturePreparers(
	PrepareForTestWithJavaBuildComponents,
	// The java default module definitions.
	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)
@@ -182,6 +191,9 @@ func prebuiltApisFilesForLibs(apiLevels []string, sdkLibs []string) map[string][
// 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
@@ -205,9 +217,6 @@ 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.
@@ -216,7 +225,15 @@ func registerRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
//
// deprecated: Use test fixtures instead, e.g. PrepareForTestWithJavaDefaultModules
func GatherRequiredDepsForTest() string {
	return gatherRequiredDepsForTest()
	bp := gatherRequiredDepsForTest()

	// For class loader context and <uses-library> 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
@@ -257,24 +274,6 @@ func gatherRequiredDepsForTest() string {
		`, extra)
	}

	// For class loader context and <uses-library> 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",
@@ -311,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 {