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
diff --git a/bp2build/testing.go b/bp2build/testing.go
index dfd4d57..d26b346 100644
--- a/bp2build/testing.go
+++ b/bp2build/testing.go
@@ -27,6 +27,7 @@
"strings"
"testing"
+ "android/soong/ui/metrics/bp2build_metrics_proto"
"github.com/google/blueprint/proptools"
"android/soong/android"
@@ -87,6 +88,15 @@
// 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 @@
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 @@
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 @@
// 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 @@
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)
+ }
}
}
}