support aidl bp2build changes
- Allowlist an aidl module by package, not name (to support a small module name change) - Implement some unit test framework changes which facilitate better aidl bp2build testing - Support a convenience function to add a load hook for registering a module as "has a bazel definition of a given target name" Bug: 301676937 Test: m bp2build, verified the aidl target was generated before/after this CL. Test: Presubmits Test: Ran bp2build progress and ensured that aidl_interface targets under frameworks/ continued to appear converted Change-Id: I62412057d6f61a2ce2bc39488c75af793eb14c94
This commit is contained in:
@@ -27,6 +27,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"android/soong/ui/metrics/bp2build_metrics_proto"
|
||||
"github.com/google/blueprint/proptools"
|
||||
|
||||
"android/soong/android"
|
||||
@@ -87,6 +88,15 @@ type Bp2buildTestCase struct {
|
||||
// ExpectedBazelTargets compares the BazelTargets generated in `Dir` (if not empty).
|
||||
// Otherwise, it checks the BazelTargets generated by `Blueprint` in the root directory.
|
||||
ExpectedBazelTargets []string
|
||||
// ExpectedConvertedModules asserts that modules in this list are labeled as "converted
|
||||
// by bp2build" in the metrics reported by bp2build.
|
||||
ExpectedConvertedModules []string
|
||||
// ExpectedHandcraftedModules asserts that modules in this list are labeled as "handcrafted
|
||||
// in build files" in the metrics reported by bp2build. Such modules are either explicitly
|
||||
// defined in a BUILD file (by name), or registered as "otherwise implicitly handled"
|
||||
// by bp2build (for example, by macros owned by other modules).
|
||||
ExpectedHandcraftedModules []string
|
||||
|
||||
// AlreadyExistingBuildContents, if non-empty, simulates an already-present source BUILD file
|
||||
// in the directory under test. The BUILD file has the given contents. This BUILD file
|
||||
// will also be treated as "BUILD file to keep" by the simulated bp2build environment.
|
||||
@@ -116,6 +126,16 @@ type Bp2buildTestCase struct {
|
||||
KeepBuildFileForDirs []string
|
||||
}
|
||||
|
||||
func RunBp2BuildTestCaseExtraContext(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), modifyContext func(ctx *android.TestContext), tc Bp2buildTestCase) {
|
||||
t.Helper()
|
||||
bp2buildSetup := android.GroupFixturePreparers(
|
||||
android.FixtureRegisterWithContext(registerModuleTypes),
|
||||
android.FixtureModifyContext(modifyContext),
|
||||
SetBp2BuildTestRunner,
|
||||
)
|
||||
runBp2BuildTestCaseWithSetup(t, bp2buildSetup, tc)
|
||||
}
|
||||
|
||||
func RunBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc Bp2buildTestCase) {
|
||||
t.Helper()
|
||||
bp2buildSetup := android.GroupFixturePreparers(
|
||||
@@ -223,7 +243,7 @@ func runBp2BuildTestCaseWithSetup(t *testing.T, extraPreparer android.FixturePre
|
||||
checkDir: tc.ExpectedBazelTargets,
|
||||
}
|
||||
|
||||
result.CompareAllBazelTargets(t, tc.Description, expectedTargets, true)
|
||||
result.CompareAllBazelTargets(t, tc, expectedTargets, true)
|
||||
}
|
||||
|
||||
// SetBp2BuildTestRunner customizes the test fixture mechanism to run tests in Bp2Build mode.
|
||||
@@ -274,7 +294,7 @@ type BazelTestResult struct {
|
||||
// have a corresponding expected BazelTarget.
|
||||
//
|
||||
// If ignoreUnexpected=true then it will ignore directories for which there are no expected targets.
|
||||
func (b BazelTestResult) CompareAllBazelTargets(t *testing.T, description string, expectedTargets map[string][]string, ignoreUnexpected bool) {
|
||||
func (b BazelTestResult) CompareAllBazelTargets(t *testing.T, tc Bp2buildTestCase, expectedTargets map[string][]string, ignoreUnexpected bool) {
|
||||
t.Helper()
|
||||
actualTargets := b.buildFileToTargets
|
||||
|
||||
@@ -301,7 +321,24 @@ func (b BazelTestResult) CompareAllBazelTargets(t *testing.T, description string
|
||||
t.Errorf("expected %d bazel modules in %q but did not find any", expectedCount, dir)
|
||||
}
|
||||
} else {
|
||||
b.CompareBazelTargets(t, description, expected, actual)
|
||||
b.CompareBazelTargets(t, tc.Description, expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
for _, module := range tc.ExpectedConvertedModules {
|
||||
if _, found := b.metrics.convertedModulePathMap[module]; !found {
|
||||
t.Errorf("expected %s to be generated by bp2build, but was not. Map of converted modules: %s", module, b.metrics.convertedModulePathMap)
|
||||
}
|
||||
}
|
||||
|
||||
for _, module := range tc.ExpectedHandcraftedModules {
|
||||
if reason, found := b.metrics.serialized.UnconvertedModules[module]; !found {
|
||||
t.Errorf("expected %s to be marked 'unconverted' by bp2build, but was not found. Full list: %s",
|
||||
module, b.metrics.serialized.UnconvertedModules)
|
||||
} else {
|
||||
if reason.Type != bp2build_metrics_proto.UnconvertedReasonType_DEFINED_IN_BUILD_FILE {
|
||||
t.Errorf("expected %s to be marked 'handcrafted' by bp2build, but was disabled for another reason: %s", module, reason)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user