export common bp2build testing functions

bp2buildTestCase
attrNameToString
runBp2BuildTestCase
makeBazelTargetNoRestrictions

The testing framework defined in the bp2build package can only be used
from within the package because many common testing functions are
private to the package. This prevents modules defined in Soong
plugins (e.g. system/tools/aidl/build) from testing bp2build conversions.

Test: go test ./bp2build
Change-Id: Ia867081327c5181d04687b13c4550e68e6a11f86
diff --git a/bazel/properties.go b/bazel/properties.go
index e29b9e1..aba97c6 100644
--- a/bazel/properties.go
+++ b/bazel/properties.go
@@ -94,6 +94,10 @@
 	return ll.Includes == nil && ll.Excludes == nil
 }
 
+func (ll *LabelList) IsEmpty() bool {
+	return len(ll.Includes) == 0 && len(ll.Excludes) == 0
+}
+
 func (ll *LabelList) deepCopy() LabelList {
 	return LabelList{
 		Includes: ll.Includes[:],
diff --git a/bp2build/android_app_certificate_conversion_test.go b/bp2build/android_app_certificate_conversion_test.go
index 173b4e4..0104513 100644
--- a/bp2build/android_app_certificate_conversion_test.go
+++ b/bp2build/android_app_certificate_conversion_test.go
@@ -21,28 +21,28 @@
 	"testing"
 )
 
-func runAndroidAppCertificateTestCase(t *testing.T, tc bp2buildTestCase) {
+func runAndroidAppCertificateTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerAndroidAppCertificateModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerAndroidAppCertificateModuleTypes, tc)
 }
 
 func registerAndroidAppCertificateModuleTypes(ctx android.RegistrationContext) {
 }
 
 func TestAndroidAppCertificateSimple(t *testing.T) {
-	runAndroidAppCertificateTestCase(t, bp2buildTestCase{
-		description:                "Android app certificate - simple example",
-		moduleTypeUnderTest:        "android_app_certificate",
-		moduleTypeUnderTestFactory: java.AndroidAppCertificateFactory,
-		filesystem:                 map[string]string{},
-		blueprint: `
+	runAndroidAppCertificateTestCase(t, Bp2buildTestCase{
+		Description:                "Android app certificate - simple example",
+		ModuleTypeUnderTest:        "android_app_certificate",
+		ModuleTypeUnderTestFactory: java.AndroidAppCertificateFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: `
 android_app_certificate {
         name: "com.android.apogee.cert",
         certificate: "chamber_of_secrets_dir",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTargetNoRestrictions("android_app_certificate", "com.android.apogee.cert", attrNameToString{
+		ExpectedBazelTargets: []string{
+			MakeBazelTargetNoRestrictions("android_app_certificate", "com.android.apogee.cert", AttrNameToString{
 				"certificate": `"chamber_of_secrets_dir"`,
 			}),
 		}})
diff --git a/bp2build/android_app_conversion_test.go b/bp2build/android_app_conversion_test.go
index a216c9d..a37af12 100644
--- a/bp2build/android_app_conversion_test.go
+++ b/bp2build/android_app_conversion_test.go
@@ -21,33 +21,33 @@
 	"testing"
 )
 
-func runAndroidAppTestCase(t *testing.T, tc bp2buildTestCase) {
+func runAndroidAppTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerAndroidAppModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerAndroidAppModuleTypes, tc)
 }
 
 func registerAndroidAppModuleTypes(ctx android.RegistrationContext) {
 }
 
 func TestMinimalAndroidApp(t *testing.T) {
-	runAndroidAppTestCase(t, bp2buildTestCase{
-		description:                "Android app - simple example",
-		moduleTypeUnderTest:        "android_app",
-		moduleTypeUnderTestFactory: java.AndroidAppFactory,
-		filesystem: map[string]string{
+	runAndroidAppTestCase(t, Bp2buildTestCase{
+		Description:                "Android app - simple example",
+		ModuleTypeUnderTest:        "android_app",
+		ModuleTypeUnderTestFactory: java.AndroidAppFactory,
+		Filesystem: map[string]string{
 			"app.java":            "",
 			"res/res.png":         "",
 			"AndroidManifest.xml": "",
 		},
-		blueprint: `
+		Blueprint: `
 android_app {
         name: "TestApp",
         srcs: ["app.java"],
         sdk_version: "current",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("android_binary", "TestApp", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("android_binary", "TestApp", AttrNameToString{
 				"srcs":           `["app.java"]`,
 				"manifest":       `"AndroidManifest.xml"`,
 				"resource_files": `["res/res.png"]`,
@@ -56,17 +56,17 @@
 }
 
 func TestAndroidAppAllSupportedFields(t *testing.T) {
-	runAndroidAppTestCase(t, bp2buildTestCase{
-		description:                "Android app - all supported fields",
-		moduleTypeUnderTest:        "android_app",
-		moduleTypeUnderTestFactory: java.AndroidAppFactory,
-		filesystem: map[string]string{
+	runAndroidAppTestCase(t, Bp2buildTestCase{
+		Description:                "Android app - all supported fields",
+		ModuleTypeUnderTest:        "android_app",
+		ModuleTypeUnderTestFactory: java.AndroidAppFactory,
+		Filesystem: map[string]string{
 			"app.java":                     "",
 			"resa/res.png":                 "",
 			"resb/res.png":                 "",
 			"manifest/AndroidManifest.xml": "",
 		},
-		blueprint: simpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + `
+		Blueprint: simpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + `
 android_app {
         name: "TestApp",
         srcs: ["app.java"],
@@ -78,8 +78,8 @@
         java_version: "7",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("android_binary", "TestApp", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("android_binary", "TestApp", AttrNameToString{
 				"srcs":     `["app.java"]`,
 				"manifest": `"manifest/AndroidManifest.xml"`,
 				"resource_files": `[
@@ -94,17 +94,17 @@
 }
 
 func TestAndroidAppArchVariantSrcs(t *testing.T) {
-	runAndroidAppTestCase(t, bp2buildTestCase{
-		description:                "Android app - arch variant srcs",
-		moduleTypeUnderTest:        "android_app",
-		moduleTypeUnderTestFactory: java.AndroidAppFactory,
-		filesystem: map[string]string{
+	runAndroidAppTestCase(t, Bp2buildTestCase{
+		Description:                "Android app - arch variant srcs",
+		ModuleTypeUnderTest:        "android_app",
+		ModuleTypeUnderTestFactory: java.AndroidAppFactory,
+		Filesystem: map[string]string{
 			"arm.java":            "",
 			"x86.java":            "",
 			"res/res.png":         "",
 			"AndroidManifest.xml": "",
 		},
-		blueprint: `
+		Blueprint: `
 android_app {
         name: "TestApp",
         sdk_version: "current",
@@ -118,8 +118,8 @@
 		}
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("android_binary", "TestApp", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("android_binary", "TestApp", AttrNameToString{
 				"srcs": `select({
         "//build/bazel/platforms/arch:arm": ["arm.java"],
         "//build/bazel/platforms/arch:x86": ["x86.java"],
diff --git a/bp2build/apex_conversion_test.go b/bp2build/apex_conversion_test.go
index 7bc379f..415e695 100644
--- a/bp2build/apex_conversion_test.go
+++ b/bp2build/apex_conversion_test.go
@@ -25,9 +25,9 @@
 	"testing"
 )
 
-func runApexTestCase(t *testing.T, tc bp2buildTestCase) {
+func runApexTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerApexModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerApexModuleTypes, tc)
 }
 
 func registerApexModuleTypes(ctx android.RegistrationContext) {
@@ -43,9 +43,9 @@
 	ctx.RegisterModuleType("prebuilt_etc", etc.PrebuiltEtcFactory)
 }
 
-func runOverrideApexTestCase(t *testing.T, tc bp2buildTestCase) {
+func runOverrideApexTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerOverrideApexModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerOverrideApexModuleTypes, tc)
 }
 
 func registerOverrideApexModuleTypes(ctx android.RegistrationContext) {
@@ -63,12 +63,12 @@
 }
 
 func TestApexBundleSimple(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - example with all props, file_context is a module in same Android.bp",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem:                 map[string]string{},
-		blueprint: `
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - example with all props, file_context is a module in same Android.bp",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: `
 apex_key {
 	name: "com.android.apogee.key",
 	public_key: "com.android.apogee.avbpubkey",
@@ -140,8 +140,8 @@
 	logging_parent: "logging.parent",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 				"android_manifest": `"ApogeeAndroidManifest.xml"`,
 				"binaries": `[
         ":cc_binary_1",
@@ -181,11 +181,11 @@
 }
 
 func TestApexBundleSimple_fileContextsInAnotherAndroidBp(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - file contexts is a module in another Android.bp",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem: map[string]string{
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - file contexts is a module in another Android.bp",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem: map[string]string{
 			"a/b/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -196,14 +196,14 @@
 }
 `,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
 	file_contexts: ":com.android.apogee-file_contexts",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 				"file_contexts": `"//a/b:com.android.apogee-file_contexts"`,
 				"manifest":      `"apex_manifest.json"`,
 			}),
@@ -211,19 +211,19 @@
 }
 
 func TestApexBundleSimple_fileContextsIsFile(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - file contexts is a file",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem:                 map[string]string{},
-		blueprint: `
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - file contexts is a file",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
 	file_contexts: "file_contexts_file",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 				"file_contexts": `"file_contexts_file"`,
 				"manifest":      `"apex_manifest.json"`,
 			}),
@@ -231,11 +231,11 @@
 }
 
 func TestApexBundleSimple_fileContextsIsNotSpecified(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - file contexts is not specified",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem: map[string]string{
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - file contexts is not specified",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -246,13 +246,13 @@
 }
 `,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"apex_manifest.json"`,
 			}),
@@ -260,11 +260,11 @@
 }
 
 func TestApexBundleCompileMultilibBoth(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - example with compile_multilib=both",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem: map[string]string{
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - example with compile_multilib=both",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -273,9 +273,9 @@
 }
 `,
 		},
-		blueprint: createMultilibBlueprint("both"),
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		Blueprint: createMultilibBlueprint("both"),
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 				"native_shared_libs_32": `[
         ":native_shared_lib_1",
         ":native_shared_lib_3",
@@ -304,11 +304,11 @@
 }
 
 func TestApexBundleCompileMultilibFirst(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - example with compile_multilib=first",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem: map[string]string{
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - example with compile_multilib=first",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -317,9 +317,9 @@
 }
 `,
 		},
-		blueprint: createMultilibBlueprint("first"),
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		Blueprint: createMultilibBlueprint("first"),
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 				"native_shared_libs_32": `select({
         "//build/bazel/platforms/arch:arm": [
             ":native_shared_lib_1",
@@ -353,11 +353,11 @@
 }
 
 func TestApexBundleCompileMultilib32(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - example with compile_multilib=32",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem: map[string]string{
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - example with compile_multilib=32",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -366,9 +366,9 @@
 }
 `,
 		},
-		blueprint: createMultilibBlueprint("32"),
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		Blueprint: createMultilibBlueprint("32"),
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 				"native_shared_libs_32": `[
         ":native_shared_lib_1",
         ":native_shared_lib_3",
@@ -384,11 +384,11 @@
 }
 
 func TestApexBundleCompileMultilib64(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - example with compile_multilib=64",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem: map[string]string{
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - example with compile_multilib=64",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -397,9 +397,9 @@
 }
 `,
 		},
-		blueprint: createMultilibBlueprint("64"),
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		Blueprint: createMultilibBlueprint("64"),
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 				"native_shared_libs_64": `select({
         "//build/bazel/platforms/arch:arm64": [
             ":native_shared_lib_1",
@@ -420,11 +420,11 @@
 }
 
 func TestApexBundleDefaultPropertyValues(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - default property values",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem: map[string]string{
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - default property values",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -433,13 +433,13 @@
 }
 `,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
 	manifest: "apogee_manifest.json",
 }
 `,
-		expectedBazelTargets: []string{makeBazelTarget("apex", "com.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
 			"manifest":      `"apogee_manifest.json"`,
 			"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 		}),
@@ -447,11 +447,11 @@
 }
 
 func TestApexBundleHasBazelModuleProps(t *testing.T) {
-	runApexTestCase(t, bp2buildTestCase{
-		description:                "apex - has bazel module props",
-		moduleTypeUnderTest:        "apex",
-		moduleTypeUnderTestFactory: apex.BundleFactory,
-		filesystem: map[string]string{
+	runApexTestCase(t, Bp2buildTestCase{
+		Description:                "apex - has bazel module props",
+		ModuleTypeUnderTest:        "apex",
+		ModuleTypeUnderTestFactory: apex.BundleFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "apogee-file_contexts",
@@ -460,14 +460,14 @@
 }
 `,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "apogee",
 	manifest: "manifest.json",
 	bazel_module: { bp2build_available: true },
 }
 `,
-		expectedBazelTargets: []string{makeBazelTarget("apex", "apogee", attrNameToString{
+		ExpectedBazelTargets: []string{makeBazelTarget("apex", "apogee", AttrNameToString{
 			"manifest":      `"manifest.json"`,
 			"file_contexts": `"//system/sepolicy/apex:apogee-file_contexts"`,
 		}),
@@ -525,12 +525,12 @@
 }
 
 func TestBp2BuildOverrideApex(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem:                 map[string]string{},
-		blueprint: `
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: `
 apex_key {
 	name: "com.android.apogee.key",
 	public_key: "com.android.apogee.avbpubkey",
@@ -623,8 +623,8 @@
 	compressible: true,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"android_manifest": `"ApogeeAndroidManifest.xml"`,
 				"binaries": `[
         ":cc_binary_1",
@@ -659,11 +659,11 @@
 }
 
 func TestApexBundleSimple_manifestIsEmpty_baseApexOverrideApexInDifferentAndroidBp(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - manifest of base apex is empty, base apex and override_apex is in different Android.bp",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - manifest of base apex is empty, base apex and override_apex is in different Android.bp",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -677,14 +677,14 @@
 }
 `,
 		},
-		blueprint: `
+		Blueprint: `
 override_apex {
 	name: "com.google.android.apogee",
 	base: ":com.android.apogee",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"//a/b:apex_manifest.json"`,
 			}),
@@ -692,11 +692,11 @@
 }
 
 func TestApexBundleSimple_manifestIsSet_baseApexOverrideApexInDifferentAndroidBp(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - manifest of base apex is set, base apex and override_apex is in different Android.bp",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - manifest of base apex is set, base apex and override_apex is in different Android.bp",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -711,14 +711,14 @@
 }
 `,
 		},
-		blueprint: `
+		Blueprint: `
 override_apex {
 	name: "com.google.android.apogee",
   base: ":com.android.apogee",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"//a/b:apogee_manifest.json"`,
 			}),
@@ -726,11 +726,11 @@
 }
 
 func TestApexBundleSimple_manifestIsEmpty_baseApexOverrideApexInSameAndroidBp(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - manifest of base apex is empty, base apex and override_apex is in same Android.bp",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - manifest of base apex is empty, base apex and override_apex is in same Android.bp",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -738,7 +738,7 @@
 	bazel_module: { bp2build_available: false },
 }`,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
 	bazel_module: { bp2build_available: false },
@@ -749,8 +749,8 @@
   base: ":com.android.apogee",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"apex_manifest.json"`,
 			}),
@@ -758,11 +758,11 @@
 }
 
 func TestApexBundleSimple_manifestIsSet_baseApexOverrideApexInSameAndroidBp(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - manifest of base apex is set, base apex and override_apex is in same Android.bp",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - manifest of base apex is set, base apex and override_apex is in same Android.bp",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -770,7 +770,7 @@
 	bazel_module: { bp2build_available: false },
 }`,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
   manifest: "apogee_manifest.json",
@@ -782,8 +782,8 @@
   base: ":com.android.apogee",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"apogee_manifest.json"`,
 			}),
@@ -791,11 +791,11 @@
 }
 
 func TestApexBundleSimple_packageNameOverride(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - override package name",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - override package name",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -803,7 +803,7 @@
 	bazel_module: { bp2build_available: false },
 }`,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
 	bazel_module: { bp2build_available: false },
@@ -815,8 +815,8 @@
 	package_name: "com.google.android.apogee",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"apex_manifest.json"`,
 				"package_name":  `"com.google.android.apogee"`,
@@ -825,11 +825,11 @@
 }
 
 func TestApexBundleSimple_NoPrebuiltsOverride(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - no override",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - no override",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -837,7 +837,7 @@
 	bazel_module: { bp2build_available: false },
 }`,
 		},
-		blueprint: `
+		Blueprint: `
 prebuilt_etc {
 	name: "prebuilt_file",
 	bazel_module: { bp2build_available: false },
@@ -854,8 +854,8 @@
 	base: ":com.android.apogee",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"apex_manifest.json"`,
 				"prebuilts":     `[":prebuilt_file"]`,
@@ -864,11 +864,11 @@
 }
 
 func TestApexBundleSimple_PrebuiltsOverride(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - ooverride",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - ooverride",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -876,7 +876,7 @@
 	bazel_module: { bp2build_available: false },
 }`,
 		},
-		blueprint: `
+		Blueprint: `
 prebuilt_etc {
 	name: "prebuilt_file",
 	bazel_module: { bp2build_available: false },
@@ -899,8 +899,8 @@
     prebuilts: ["prebuilt_file2"]
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"apex_manifest.json"`,
 				"prebuilts":     `[":prebuilt_file2"]`,
@@ -909,11 +909,11 @@
 }
 
 func TestApexBundleSimple_PrebuiltsOverrideEmptyList(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - override with empty list",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - override with empty list",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -921,7 +921,7 @@
 	bazel_module: { bp2build_available: false },
 }`,
 		},
-		blueprint: `
+		Blueprint: `
 prebuilt_etc {
 	name: "prebuilt_file",
 	bazel_module: { bp2build_available: false },
@@ -939,8 +939,8 @@
     prebuilts: [],
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":      `"apex_manifest.json"`,
 				"prebuilts":     `[]`,
@@ -949,11 +949,11 @@
 }
 
 func TestApexBundleSimple_NoLoggingParentOverride(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - logging_parent - no override",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - logging_parent - no override",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -961,7 +961,7 @@
 	bazel_module: { bp2build_available: false },
 }`,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
 	bazel_module: { bp2build_available: false },
@@ -973,8 +973,8 @@
 	base: ":com.android.apogee",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts":  `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":       `"apex_manifest.json"`,
 				"logging_parent": `"foo.bar.baz"`,
@@ -983,11 +983,11 @@
 }
 
 func TestApexBundleSimple_LoggingParentOverride(t *testing.T) {
-	runOverrideApexTestCase(t, bp2buildTestCase{
-		description:                "override_apex - logging_parent - override",
-		moduleTypeUnderTest:        "override_apex",
-		moduleTypeUnderTestFactory: apex.OverrideApexFactory,
-		filesystem: map[string]string{
+	runOverrideApexTestCase(t, Bp2buildTestCase{
+		Description:                "override_apex - logging_parent - override",
+		ModuleTypeUnderTest:        "override_apex",
+		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
+		Filesystem: map[string]string{
 			"system/sepolicy/apex/Android.bp": `
 filegroup {
 	name: "com.android.apogee-file_contexts",
@@ -995,7 +995,7 @@
 	bazel_module: { bp2build_available: false },
 }`,
 		},
-		blueprint: `
+		Blueprint: `
 apex {
 	name: "com.android.apogee",
 	bazel_module: { bp2build_available: false },
@@ -1008,8 +1008,8 @@
 	logging_parent: "foo.bar.baz.override",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
 				"file_contexts":  `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
 				"manifest":       `"apex_manifest.json"`,
 				"logging_parent": `"foo.bar.baz.override"`,
diff --git a/bp2build/apex_key_conversion_test.go b/bp2build/apex_key_conversion_test.go
index dfa96a2..15bccf7 100644
--- a/bp2build/apex_key_conversion_test.go
+++ b/bp2build/apex_key_conversion_test.go
@@ -21,28 +21,28 @@
 	"testing"
 )
 
-func runApexKeyTestCase(t *testing.T, tc bp2buildTestCase) {
+func runApexKeyTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerApexKeyModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerApexKeyModuleTypes, tc)
 }
 
 func registerApexKeyModuleTypes(ctx android.RegistrationContext) {
 }
 
 func TestApexKeySimple(t *testing.T) {
-	runApexKeyTestCase(t, bp2buildTestCase{
-		description:                "apex key - simple example",
-		moduleTypeUnderTest:        "apex_key",
-		moduleTypeUnderTestFactory: apex.ApexKeyFactory,
-		filesystem:                 map[string]string{},
-		blueprint: `
+	runApexKeyTestCase(t, Bp2buildTestCase{
+		Description:                "apex key - simple example",
+		ModuleTypeUnderTest:        "apex_key",
+		ModuleTypeUnderTestFactory: apex.ApexKeyFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: `
 apex_key {
         name: "com.android.apogee.key",
         public_key: "com.android.apogee.avbpubkey",
         private_key: "com.android.apogee.pem",
 }
 `,
-		expectedBazelTargets: []string{makeBazelTargetNoRestrictions("apex_key", "com.android.apogee.key", attrNameToString{
+		ExpectedBazelTargets: []string{MakeBazelTargetNoRestrictions("apex_key", "com.android.apogee.key", AttrNameToString{
 			"private_key": `"com.android.apogee.pem"`,
 			"public_key":  `"com.android.apogee.avbpubkey"`,
 		}),
diff --git a/bp2build/build_conversion_test.go b/bp2build/build_conversion_test.go
index 19209f6..d36d2a9 100644
--- a/bp2build/build_conversion_test.go
+++ b/bp2build/build_conversion_test.go
@@ -229,30 +229,30 @@
 }
 
 func TestGenerateBazelTargetModules(t *testing.T) {
-	testCases := []bp2buildTestCase{
+	testCases := []Bp2buildTestCase{
 		{
-			description: "string ptr props",
-			blueprint: `custom {
+			Description: "string ptr props",
+			Blueprint: `custom {
 	name: "foo",
     string_ptr_prop: "",
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "foo", AttrNameToString{
 					"string_ptr_prop": `""`,
 				}),
 			},
 		},
 		{
-			description: "string props",
-			blueprint: `custom {
+			Description: "string props",
+			Blueprint: `custom {
   name: "foo",
     string_list_prop: ["a", "b"],
     string_ptr_prop: "a",
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "foo", AttrNameToString{
 					"string_list_prop": `[
         "a",
         "b",
@@ -262,15 +262,15 @@
 			},
 		},
 		{
-			description: "control characters",
-			blueprint: `custom {
+			Description: "control characters",
+			Blueprint: `custom {
     name: "foo",
     string_list_prop: ["\t", "\n"],
     string_ptr_prop: "a\t\n\r",
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "foo", AttrNameToString{
 					"string_list_prop": `[
         "\t",
         "\n",
@@ -280,8 +280,8 @@
 			},
 		},
 		{
-			description: "handles dep",
-			blueprint: `custom {
+			Description: "handles dep",
+			Blueprint: `custom {
   name: "has_dep",
   arch_paths: [":dep"],
   bazel_module: { bp2build_available: true },
@@ -292,31 +292,31 @@
   arch_paths: ["abc"],
   bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "dep", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "dep", AttrNameToString{
 					"arch_paths": `["abc"]`,
 				}),
-				makeBazelTarget("custom", "has_dep", attrNameToString{
+				makeBazelTarget("custom", "has_dep", AttrNameToString{
 					"arch_paths": `[":dep"]`,
 				}),
 			},
 		},
 		{
-			description: "non-existent dep",
-			blueprint: `custom {
+			Description: "non-existent dep",
+			Blueprint: `custom {
   name: "has_dep",
   arch_paths: [":dep"],
   bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "has_dep", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "has_dep", AttrNameToString{
 					"arch_paths": `[":dep__BP2BUILD__MISSING__DEP"]`,
 				}),
 			},
 		},
 		{
-			description: "arch-variant srcs",
-			blueprint: `custom {
+			Description: "arch-variant srcs",
+			Blueprint: `custom {
     name: "arch_paths",
     arch: {
       x86: { arch_paths: ["x86.txt"] },
@@ -344,8 +344,8 @@
     },
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "arch_paths", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "arch_paths", AttrNameToString{
 					"arch_paths": `select({
         "//build/bazel/platforms/arch:arm": [
             "arm.txt",
@@ -406,8 +406,8 @@
 			},
 		},
 		{
-			description: "arch-variant deps",
-			blueprint: `custom {
+			Description: "arch-variant deps",
+			Blueprint: `custom {
   name: "has_dep",
   arch: {
     x86: {
@@ -422,11 +422,11 @@
     arch_paths: ["abc"],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "dep", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "dep", AttrNameToString{
 					"arch_paths": `["abc"]`,
 				}),
-				makeBazelTarget("custom", "has_dep", attrNameToString{
+				makeBazelTarget("custom", "has_dep", AttrNameToString{
 					"arch_paths": `select({
         "//build/bazel/platforms/arch:x86": [":dep"],
         "//conditions:default": [],
@@ -435,27 +435,27 @@
 			},
 		},
 		{
-			description: "embedded props",
-			blueprint: `custom {
+			Description: "embedded props",
+			Blueprint: `custom {
     name: "embedded_props",
     embedded_prop: "abc",
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "embedded_props", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "embedded_props", AttrNameToString{
 					"embedded_attr": `"abc"`,
 				}),
 			},
 		},
 		{
-			description: "ptr to embedded props",
-			blueprint: `custom {
+			Description: "ptr to embedded props",
+			Blueprint: `custom {
     name: "ptr_to_embedded_props",
     other_embedded_prop: "abc",
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("custom", "ptr_to_embedded_props", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("custom", "ptr_to_embedded_props", AttrNameToString{
 					"other_embedded_attr": `"abc"`,
 				}),
 			},
@@ -464,8 +464,8 @@
 
 	dir := "."
 	for _, testCase := range testCases {
-		t.Run(testCase.description, func(t *testing.T) {
-			config := android.TestConfig(buildDir, nil, testCase.blueprint, nil)
+		t.Run(testCase.Description, func(t *testing.T) {
+			config := android.TestConfig(buildDir, nil, testCase.Blueprint, nil)
 			ctx := android.NewTestContext(config)
 
 			registerCustomModuleForBp2buildConversion(ctx)
@@ -483,10 +483,10 @@
 			bazelTargets, err := generateBazelTargetsForDir(codegenCtx, dir)
 			android.FailIfErrored(t, err)
 
-			if actualCount, expectedCount := len(bazelTargets), len(testCase.expectedBazelTargets); actualCount != expectedCount {
-				t.Errorf("Expected %d bazel target (%s),\ngot %d (%s)", expectedCount, testCase.expectedBazelTargets, actualCount, bazelTargets)
+			if actualCount, expectedCount := len(bazelTargets), len(testCase.ExpectedBazelTargets); actualCount != expectedCount {
+				t.Errorf("Expected %d bazel target (%s),\ngot %d (%s)", expectedCount, testCase.ExpectedBazelTargets, actualCount, bazelTargets)
 			} else {
-				for i, expectedBazelTarget := range testCase.expectedBazelTargets {
+				for i, expectedBazelTarget := range testCase.ExpectedBazelTargets {
 					actualBazelTarget := bazelTargets[i]
 					if actualBazelTarget.content != expectedBazelTarget {
 						t.Errorf(
@@ -502,83 +502,83 @@
 }
 
 func TestBp2buildHostAndDevice(t *testing.T) {
-	testCases := []bp2buildTestCase{
+	testCases := []Bp2buildTestCase{
 		{
-			description:                "host and device, device only",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
-			blueprint: `custom {
+			Description:                "host and device, device only",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
+			Blueprint: `custom {
 		name: "foo",
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetHostOrDevice("custom", "foo", attrNameToString{}, android.DeviceSupported),
+			ExpectedBazelTargets: []string{
+				makeBazelTargetHostOrDevice("custom", "foo", AttrNameToString{}, android.DeviceSupported),
 			},
 		},
 		{
-			description:                "host and device, both",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
-			blueprint: `custom {
+			Description:                "host and device, both",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: true,
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("custom", "foo", attrNameToString{}),
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("custom", "foo", AttrNameToString{}),
 			},
 		},
 		{
-			description:                "host and device, host explicitly disabled",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
-			blueprint: `custom {
+			Description:                "host and device, host explicitly disabled",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: false,
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetHostOrDevice("custom", "foo", attrNameToString{}, android.DeviceSupported),
+			ExpectedBazelTargets: []string{
+				makeBazelTargetHostOrDevice("custom", "foo", AttrNameToString{}, android.DeviceSupported),
 			},
 		},
 		{
-			description:                "host and device, neither",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
-			blueprint: `custom {
+			Description:                "host and device, neither",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: false,
 		device_supported: false,
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("custom", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("custom", "foo", AttrNameToString{
 					"target_compatible_with": `["@platforms//:incompatible"]`,
 				}),
 			},
 		},
 		{
-			description:                "host and device, neither, cannot override with product_var",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
-			blueprint: `custom {
+			Description:                "host and device, neither, cannot override with product_var",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: false,
 		device_supported: false,
 		product_variables: { unbundled_build: { enabled: true } },
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("custom", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("custom", "foo", AttrNameToString{
 					"target_compatible_with": `["@platforms//:incompatible"]`,
 				}),
 			},
 		},
 		{
-			description:                "host and device, both, disabled overrided with product_var",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
-			blueprint: `custom {
+			Description:                "host and device, both, disabled overrided with product_var",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: true,
 		device_supported: true,
@@ -586,117 +586,117 @@
 		product_variables: { unbundled_build: { enabled: true } },
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("custom", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("custom", "foo", AttrNameToString{
 					"target_compatible_with": `["//build/bazel/product_variables:unbundled_build"]`,
 				}),
 			},
 		},
 		{
-			description:                "host and device, neither, cannot override with arch enabled",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
-			blueprint: `custom {
+			Description:                "host and device, neither, cannot override with arch enabled",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: false,
 		device_supported: false,
 		arch: { x86: { enabled: true } },
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("custom", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("custom", "foo", AttrNameToString{
 					"target_compatible_with": `["@platforms//:incompatible"]`,
 				}),
 			},
 		},
 		{
-			description:                "host and device, host only",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
-			blueprint: `custom {
+			Description:                "host and device, host only",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDevice,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: true,
 		device_supported: false,
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetHostOrDevice("custom", "foo", attrNameToString{}, android.HostSupported),
+			ExpectedBazelTargets: []string{
+				makeBazelTargetHostOrDevice("custom", "foo", AttrNameToString{}, android.HostSupported),
 			},
 		},
 		{
-			description:                "host only",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostSupported,
-			blueprint: `custom {
+			Description:                "host only",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostSupported,
+			Blueprint: `custom {
 		name: "foo",
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetHostOrDevice("custom", "foo", attrNameToString{}, android.HostSupported),
+			ExpectedBazelTargets: []string{
+				makeBazelTargetHostOrDevice("custom", "foo", AttrNameToString{}, android.HostSupported),
 			},
 		},
 		{
-			description:                "device only",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryDeviceSupported,
-			blueprint: `custom {
+			Description:                "device only",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryDeviceSupported,
+			Blueprint: `custom {
 		name: "foo",
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetHostOrDevice("custom", "foo", attrNameToString{}, android.DeviceSupported),
+			ExpectedBazelTargets: []string{
+				makeBazelTargetHostOrDevice("custom", "foo", AttrNameToString{}, android.DeviceSupported),
 			},
 		},
 		{
-			description:                "host and device default, default",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDeviceDefault,
-			blueprint: `custom {
+			Description:                "host and device default, default",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDeviceDefault,
+			Blueprint: `custom {
 		name: "foo",
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("custom", "foo", attrNameToString{}),
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("custom", "foo", AttrNameToString{}),
 			},
 		},
 		{
-			description:                "host and device default, device only",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDeviceDefault,
-			blueprint: `custom {
+			Description:                "host and device default, device only",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDeviceDefault,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: false,
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetHostOrDevice("custom", "foo", attrNameToString{}, android.DeviceSupported),
+			ExpectedBazelTargets: []string{
+				makeBazelTargetHostOrDevice("custom", "foo", AttrNameToString{}, android.DeviceSupported),
 			},
 		},
 		{
-			description:                "host and device default, host only",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDeviceDefault,
-			blueprint: `custom {
+			Description:                "host and device default, host only",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDeviceDefault,
+			Blueprint: `custom {
 		name: "foo",
 		device_supported: false,
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetHostOrDevice("custom", "foo", attrNameToString{}, android.HostSupported),
+			ExpectedBazelTargets: []string{
+				makeBazelTargetHostOrDevice("custom", "foo", AttrNameToString{}, android.HostSupported),
 			},
 		},
 		{
-			description:                "host and device default, neither",
-			moduleTypeUnderTest:        "custom",
-			moduleTypeUnderTestFactory: customModuleFactoryHostAndDeviceDefault,
-			blueprint: `custom {
+			Description:                "host and device default, neither",
+			ModuleTypeUnderTest:        "custom",
+			ModuleTypeUnderTestFactory: customModuleFactoryHostAndDeviceDefault,
+			Blueprint: `custom {
 		name: "foo",
 		host_supported: false,
 		device_supported: false,
 		bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("custom", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("custom", "foo", AttrNameToString{
 					"target_compatible_with": `["@platforms//:incompatible"]`,
 				}),
 			},
@@ -704,7 +704,7 @@
 	}
 
 	for _, tc := range testCases {
-		t.Run(tc.description, func(t *testing.T) {
+		t.Run(tc.Description, func(t *testing.T) {
 			runBp2BuildTestCaseSimple(t, tc)
 		})
 	}
@@ -880,43 +880,43 @@
 }
 
 func TestModuleTypeBp2Build(t *testing.T) {
-	testCases := []bp2buildTestCase{
+	testCases := []Bp2buildTestCase{
 		{
-			description:                "filegroup with does not specify srcs",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "filegroup with does not specify srcs",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
     name: "fg_foo",
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{}),
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{}),
 			},
 		},
 		{
-			description:                "filegroup with no srcs",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "filegroup with no srcs",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
     name: "fg_foo",
     srcs: [],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{}),
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{}),
 			},
 		},
 		{
-			description:                "filegroup with srcs",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "filegroup with srcs",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
     name: "fg_foo",
     srcs: ["a", "b"],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"srcs": `[
         "a",
         "b",
@@ -925,32 +925,32 @@
 			},
 		},
 		{
-			description:                "filegroup with excludes srcs",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "filegroup with excludes srcs",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
     name: "fg_foo",
     srcs: ["a", "b"],
     exclude_srcs: ["a"],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"srcs": `["b"]`,
 				}),
 			},
 		},
 		{
-			description:                "filegroup with glob",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "filegroup with glob",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
     name: "fg_foo",
     srcs: ["**/*.txt"],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"srcs": `[
         "other/a.txt",
         "other/b.txt",
@@ -958,7 +958,7 @@
     ]`,
 				}),
 			},
-			filesystem: map[string]string{
+			Filesystem: map[string]string{
 				"other/a.txt":        "",
 				"other/b.txt":        "",
 				"other/subdir/a.txt": "",
@@ -966,11 +966,11 @@
 			},
 		},
 		{
-			description:                "filegroup with glob in subdir",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			dir:                        "other",
-			filesystem: map[string]string{
+			Description:                "filegroup with glob in subdir",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Dir:                        "other",
+			Filesystem: map[string]string{
 				"other/Android.bp": `filegroup {
     name: "fg_foo",
     srcs: ["**/*.txt"],
@@ -981,8 +981,8 @@
 				"other/subdir/a.txt": "",
 				"other/file":         "",
 			},
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"srcs": `[
         "a.txt",
         "b.txt",
@@ -992,10 +992,10 @@
 			},
 		},
 		{
-			description:                "depends_on_other_dir_module",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "depends_on_other_dir_module",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
     name: "fg_foo",
     srcs: [
         ":foo",
@@ -1003,15 +1003,15 @@
     ],
     bazel_module: { bp2build_available: true },
 }`,
-			filesystem: map[string]string{
+			Filesystem: map[string]string{
 				"other/Android.bp": `filegroup {
     name: "foo",
     srcs: ["a", "b"],
     bazel_module: { bp2build_available: true },
 }`,
 			},
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"srcs": `[
         "//other:foo",
         "c",
@@ -1020,11 +1020,11 @@
 			},
 		},
 		{
-			description:                "depends_on_other_unconverted_module_error",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			unconvertedDepsMode:        errorModulesUnconvertedDeps,
-			blueprint: `filegroup {
+			Description:                "depends_on_other_unconverted_module_error",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			UnconvertedDepsMode:        errorModulesUnconvertedDeps,
+			Blueprint: `filegroup {
     name: "foobar",
     srcs: [
         ":foo",
@@ -1032,8 +1032,8 @@
     ],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedErr: fmt.Errorf(`"foobar" depends on unconverted modules: foo`),
-			filesystem: map[string]string{
+			ExpectedErr: fmt.Errorf(`"foobar" depends on unconverted modules: foo`),
+			Filesystem: map[string]string{
 				"other/Android.bp": `filegroup {
     name: "foo",
     srcs: ["a", "b"],
@@ -1043,8 +1043,8 @@
 	}
 
 	for _, testCase := range testCases {
-		t.Run(testCase.description, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, testCase)
+		t.Run(testCase.Description, func(t *testing.T) {
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, testCase)
 		})
 	}
 }
@@ -1244,27 +1244,27 @@
 }
 
 func TestCombineBuildFilesBp2buildTargets(t *testing.T) {
-	testCases := []bp2buildTestCase{
+	testCases := []Bp2buildTestCase{
 		{
-			description:                "filegroup bazel_module.label",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "filegroup bazel_module.label",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
     name: "fg_foo",
     bazel_module: { label: "//other:fg_foo" },
 }`,
-			expectedBazelTargets: []string{
+			ExpectedBazelTargets: []string{
 				`// BUILD file`,
 			},
-			filesystem: map[string]string{
+			Filesystem: map[string]string{
 				"other/BUILD.bazel": `// BUILD file`,
 			},
 		},
 		{
-			description:                "multiple bazel_module.label same BUILD",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "multiple bazel_module.label same BUILD",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
         name: "fg_foo",
         bazel_module: { label: "//other:fg_foo" },
     }
@@ -1273,20 +1273,20 @@
         name: "foo",
         bazel_module: { label: "//other:foo" },
     }`,
-			expectedBazelTargets: []string{
+			ExpectedBazelTargets: []string{
 				`// BUILD file`,
 			},
-			filesystem: map[string]string{
+			Filesystem: map[string]string{
 				"other/BUILD.bazel": `// BUILD file`,
 			},
 		},
 		{
-			description:                "filegroup bazel_module.label and bp2build in subdir",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			dir:                        "other",
-			blueprint:                  ``,
-			filesystem: map[string]string{
+			Description:                "filegroup bazel_module.label and bp2build in subdir",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Dir:                        "other",
+			Blueprint:                  ``,
+			Filesystem: map[string]string{
 				"other/Android.bp": `filegroup {
         name: "fg_foo",
         bazel_module: {
@@ -1301,20 +1301,20 @@
       }`,
 				"other/BUILD.bazel": `// definition for fg_bar`,
 			},
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{}),
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{}),
 				`// definition for fg_bar`,
 			},
 		},
 		{
-			description:                "filegroup bazel_module.label and filegroup bp2build",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
+			Description:                "filegroup bazel_module.label and filegroup bp2build",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
 
-			filesystem: map[string]string{
+			Filesystem: map[string]string{
 				"other/BUILD.bazel": `// BUILD file`,
 			},
-			blueprint: `filegroup {
+			Blueprint: `filegroup {
         name: "fg_foo",
         bazel_module: {
           label: "//other:fg_foo",
@@ -1327,8 +1327,8 @@
           bp2build_available: true,
         },
     }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_bar", map[string]string{}),
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_bar", map[string]string{}),
 				`// BUILD file`,
 			},
 		},
@@ -1336,20 +1336,20 @@
 
 	dir := "."
 	for _, testCase := range testCases {
-		t.Run(testCase.description, func(t *testing.T) {
+		t.Run(testCase.Description, func(t *testing.T) {
 			fs := make(map[string][]byte)
 			toParse := []string{
 				"Android.bp",
 			}
-			for f, content := range testCase.filesystem {
+			for f, content := range testCase.Filesystem {
 				if strings.HasSuffix(f, "Android.bp") {
 					toParse = append(toParse, f)
 				}
 				fs[f] = []byte(content)
 			}
-			config := android.TestConfig(buildDir, nil, testCase.blueprint, fs)
+			config := android.TestConfig(buildDir, nil, testCase.Blueprint, fs)
 			ctx := android.NewTestContext(config)
-			ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
+			ctx.RegisterModuleType(testCase.ModuleTypeUnderTest, testCase.ModuleTypeUnderTestFactory)
 			ctx.RegisterForBazelConversion()
 
 			_, errs := ctx.ParseFileList(dir, toParse)
@@ -1362,15 +1362,15 @@
 			}
 
 			checkDir := dir
-			if testCase.dir != "" {
-				checkDir = testCase.dir
+			if testCase.Dir != "" {
+				checkDir = testCase.Dir
 			}
 			codegenCtx := NewCodegenContext(config, *ctx.Context, Bp2Build)
 			bazelTargets, err := generateBazelTargetsForDir(codegenCtx, checkDir)
 			android.FailIfErrored(t, err)
 			bazelTargets.sort()
 			actualCount := len(bazelTargets)
-			expectedCount := len(testCase.expectedBazelTargets)
+			expectedCount := len(testCase.ExpectedBazelTargets)
 			if actualCount != expectedCount {
 				t.Errorf("Expected %d bazel target, got %d\n%s", expectedCount, actualCount, bazelTargets)
 			}
@@ -1379,7 +1379,7 @@
 			}
 			for i, target := range bazelTargets {
 				actualContent := target.content
-				expectedContent := testCase.expectedBazelTargets[i]
+				expectedContent := testCase.ExpectedBazelTargets[i]
 				if expectedContent != actualContent {
 					t.Errorf(
 						"Expected generated Bazel target to be '%s', got '%s'",
@@ -1393,18 +1393,18 @@
 }
 
 func TestGlobExcludeSrcs(t *testing.T) {
-	testCases := []bp2buildTestCase{
+	testCases := []Bp2buildTestCase{
 		{
-			description:                "filegroup top level exclude_srcs",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: `filegroup {
+			Description:                "filegroup top level exclude_srcs",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: `filegroup {
     name: "fg_foo",
     srcs: ["**/*.txt"],
     exclude_srcs: ["c.txt"],
     bazel_module: { bp2build_available: true },
 }`,
-			filesystem: map[string]string{
+			Filesystem: map[string]string{
 				"a.txt":          "",
 				"b.txt":          "",
 				"c.txt":          "",
@@ -1412,8 +1412,8 @@
 				"dir/e.txt":      "",
 				"dir/f.txt":      "",
 			},
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"srcs": `[
         "a.txt",
         "b.txt",
@@ -1424,12 +1424,12 @@
 			},
 		},
 		{
-			description:                "filegroup in subdir exclude_srcs",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint:                  "",
-			dir:                        "dir",
-			filesystem: map[string]string{
+			Description:                "filegroup in subdir exclude_srcs",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint:                  "",
+			Dir:                        "dir",
+			Filesystem: map[string]string{
 				"dir/Android.bp": `filegroup {
     name: "fg_foo",
     srcs: ["**/*.txt"],
@@ -1443,8 +1443,8 @@
 				"dir/subdir/e.txt":      "",
 				"dir/subdir/f.txt":      "",
 			},
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"srcs": `[
         "a.txt",
         "//dir/subdir:e.txt",
@@ -1456,35 +1456,35 @@
 	}
 
 	for _, testCase := range testCases {
-		t.Run(testCase.description, func(t *testing.T) {
+		t.Run(testCase.Description, func(t *testing.T) {
 			runBp2BuildTestCaseSimple(t, testCase)
 		})
 	}
 }
 
 func TestCommonBp2BuildModuleAttrs(t *testing.T) {
-	testCases := []bp2buildTestCase{
+	testCases := []Bp2buildTestCase{
 		{
-			description:                "Required into data test",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
+			Description:                "Required into data test",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
 filegroup {
     name: "fg_foo",
     required: ["reqd"],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"data": `[":reqd"]`,
 				}),
 			},
 		},
 		{
-			description:                "Required via arch into data test",
-			moduleTypeUnderTest:        "python_library",
-			moduleTypeUnderTestFactory: python.PythonLibraryFactory,
-			blueprint: simpleModuleDoNotConvertBp2build("python_library", "reqdx86") +
+			Description:                "Required via arch into data test",
+			ModuleTypeUnderTest:        "python_library",
+			ModuleTypeUnderTestFactory: python.PythonLibraryFactory,
+			Blueprint: simpleModuleDoNotConvertBp2build("python_library", "reqdx86") +
 				simpleModuleDoNotConvertBp2build("python_library", "reqdarm") + `
 python_library {
     name: "fg_foo",
@@ -1498,7 +1498,7 @@
     },
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
+			ExpectedBazelTargets: []string{
 				makeBazelTarget("py_library", "fg_foo", map[string]string{
 					"data": `select({
         "//build/bazel/platforms/arch:arm": [":reqdarm"],
@@ -1511,21 +1511,21 @@
 			},
 		},
 		{
-			description:                "Required appended to data test",
-			moduleTypeUnderTest:        "python_library",
-			moduleTypeUnderTestFactory: python.PythonLibraryFactory,
-			filesystem: map[string]string{
+			Description:                "Required appended to data test",
+			ModuleTypeUnderTest:        "python_library",
+			ModuleTypeUnderTestFactory: python.PythonLibraryFactory,
+			Filesystem: map[string]string{
 				"data.bin": "",
 				"src.py":   "",
 			},
-			blueprint: simpleModuleDoNotConvertBp2build("python_library", "reqd") + `
+			Blueprint: simpleModuleDoNotConvertBp2build("python_library", "reqd") + `
 python_library {
     name: "fg_foo",
     data: ["data.bin"],
     required: ["reqd"],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
+			ExpectedBazelTargets: []string{
 				makeBazelTarget("py_library", "fg_foo", map[string]string{
 					"data": `[
         "data.bin",
@@ -1537,17 +1537,17 @@
 			},
 		},
 		{
-			description:                "All props-to-attrs at once together test",
-			moduleTypeUnderTest:        "filegroup",
-			moduleTypeUnderTestFactory: android.FileGroupFactory,
-			blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
+			Description:                "All props-to-attrs at once together test",
+			ModuleTypeUnderTest:        "filegroup",
+			ModuleTypeUnderTestFactory: android.FileGroupFactory,
+			Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
 filegroup {
     name: "fg_foo",
     required: ["reqd"],
     bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{
 					"data": `[":reqd"]`,
 				}),
 			},
@@ -1555,7 +1555,7 @@
 	}
 
 	for _, tc := range testCases {
-		t.Run(tc.description, func(t *testing.T) {
+		t.Run(tc.Description, func(t *testing.T) {
 			runBp2BuildTestCaseSimple(t, tc)
 		})
 	}
diff --git a/bp2build/cc_binary_conversion_test.go b/bp2build/cc_binary_conversion_test.go
index 4794269..95869dd 100644
--- a/bp2build/cc_binary_conversion_test.go
+++ b/bp2build/cc_binary_conversion_test.go
@@ -31,7 +31,7 @@
 type testBazelTarget struct {
 	typ   string
 	name  string
-	attrs attrNameToString
+	attrs AttrNameToString
 }
 
 func generateBazelTargetsForTest(targets []testBazelTarget, hod android.HostOrDeviceSupported) []string {
@@ -73,12 +73,12 @@
 	description := fmt.Sprintf("%s %s", moduleTypeUnderTest, testCase.description)
 	t.Run(description, func(t *testing.T) {
 		t.Helper()
-		runBp2BuildTestCase(t, registerCcBinaryModuleTypes, bp2buildTestCase{
-			expectedBazelTargets:       generateBazelTargetsForTest(testCase.targets, android.DeviceSupported),
-			moduleTypeUnderTest:        moduleTypeUnderTest,
-			moduleTypeUnderTestFactory: cc.BinaryFactory,
-			description:                description,
-			blueprint:                  binaryReplacer.Replace(testCase.blueprint),
+		RunBp2BuildTestCase(t, registerCcBinaryModuleTypes, Bp2buildTestCase{
+			ExpectedBazelTargets:       generateBazelTargetsForTest(testCase.targets, android.DeviceSupported),
+			ModuleTypeUnderTest:        moduleTypeUnderTest,
+			ModuleTypeUnderTestFactory: cc.BinaryFactory,
+			Description:                description,
+			Blueprint:                  binaryReplacer.Replace(testCase.blueprint),
 		})
 	})
 }
@@ -88,12 +88,12 @@
 	moduleTypeUnderTest := "cc_binary_host"
 	description := fmt.Sprintf("%s %s", moduleTypeUnderTest, testCase.description)
 	t.Run(description, func(t *testing.T) {
-		runBp2BuildTestCase(t, registerCcBinaryModuleTypes, bp2buildTestCase{
-			expectedBazelTargets:       generateBazelTargetsForTest(testCase.targets, android.HostSupported),
-			moduleTypeUnderTest:        moduleTypeUnderTest,
-			moduleTypeUnderTestFactory: cc.BinaryHostFactory,
-			description:                description,
-			blueprint:                  hostBinaryReplacer.Replace(testCase.blueprint),
+		RunBp2BuildTestCase(t, registerCcBinaryModuleTypes, Bp2buildTestCase{
+			ExpectedBazelTargets:       generateBazelTargetsForTest(testCase.targets, android.HostSupported),
+			ModuleTypeUnderTest:        moduleTypeUnderTest,
+			ModuleTypeUnderTestFactory: cc.BinaryHostFactory,
+			Description:                description,
+			Blueprint:                  hostBinaryReplacer.Replace(testCase.blueprint),
 		})
 	})
 }
@@ -126,7 +126,7 @@
 }
 `,
 		targets: []testBazelTarget{
-			{"cc_binary", "foo", attrNameToString{
+			{"cc_binary", "foo", AttrNameToString{
 				"absolute_includes": `["absolute_dir"]`,
 				"asflags":           `["-Dasflag"]`,
 				"conlyflags":        `["-Dconlyflag"]`,
@@ -166,7 +166,7 @@
 }
 `,
 		targets: []testBazelTarget{
-			{"cc_binary", "foo", attrNameToString{
+			{"cc_binary", "foo", AttrNameToString{
 				"features": `["-static_flag"]`,
 				"linkopts": `["-shared"]`,
 			},
@@ -186,7 +186,7 @@
 }
 `,
 		targets: []testBazelTarget{
-			{"cc_binary", "foo", attrNameToString{
+			{"cc_binary", "foo", AttrNameToString{
 				"linkshared": `False`,
 			},
 			},
@@ -205,7 +205,7 @@
 }
 `,
 		targets: []testBazelTarget{
-			{"cc_binary", "foo", attrNameToString{
+			{"cc_binary", "foo", AttrNameToString{
 				"additional_linker_inputs": `["vs"]`,
 				"linkopts":                 `["-Wl,--version-script,$(location vs)"]`,
 			},
@@ -230,7 +230,7 @@
 }
 ` + simpleModuleDoNotConvertBp2build("filegroup", "fg_foo"),
 		targets: []testBazelTarget{
-			{"cc_binary", "foo", attrNameToString{
+			{"cc_binary", "foo", AttrNameToString{
 				"srcs": `[
         "cpponly.cpp",
         ":fg_foo_cpp_srcs",
@@ -285,7 +285,7 @@
 			simpleModuleDoNotConvertBp2build("cc_library", "shared_dep") +
 			simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep"),
 		targets: []testBazelTarget{
-			{"cc_binary", "foo", attrNameToString{
+			{"cc_binary", "foo", AttrNameToString{
 				"deps": `[
         ":implementation_static_dep",
         ":static_dep",
@@ -314,21 +314,21 @@
 	baseTestCases := []struct {
 		description   string
 		soongProperty string
-		bazelAttr     attrNameToString
+		bazelAttr     AttrNameToString
 	}{
 		{
 			description:   "nocrt: true",
 			soongProperty: `nocrt: true,`,
-			bazelAttr:     attrNameToString{"link_crt": `False`},
+			bazelAttr:     AttrNameToString{"link_crt": `False`},
 		},
 		{
 			description:   "nocrt: false",
 			soongProperty: `nocrt: false,`,
-			bazelAttr:     attrNameToString{},
+			bazelAttr:     AttrNameToString{},
 		},
 		{
 			description: "nocrt: not set",
-			bazelAttr:   attrNameToString{},
+			bazelAttr:   AttrNameToString{},
 		},
 	}
 
@@ -357,21 +357,21 @@
 	baseTestCases := []struct {
 		description   string
 		soongProperty string
-		bazelAttr     attrNameToString
+		bazelAttr     AttrNameToString
 	}{
 		{
 			description:   "no_libcrt: true",
 			soongProperty: `no_libcrt: true,`,
-			bazelAttr:     attrNameToString{"use_libcrt": `False`},
+			bazelAttr:     AttrNameToString{"use_libcrt": `False`},
 		},
 		{
 			description:   "no_libcrt: false",
 			soongProperty: `no_libcrt: false,`,
-			bazelAttr:     attrNameToString{"use_libcrt": `True`},
+			bazelAttr:     AttrNameToString{"use_libcrt": `True`},
 		},
 		{
 			description: "no_libcrt: not set",
-			bazelAttr:   attrNameToString{},
+			bazelAttr:   AttrNameToString{},
 		},
 	}
 
@@ -400,35 +400,35 @@
 	baseTestCases := []struct {
 		description   string
 		soongProperty string
-		bazelAttr     attrNameToString
+		bazelAttr     AttrNameToString
 	}{
 		{
 			description:   "pack_relocation: true",
 			soongProperty: `pack_relocations: true,`,
-			bazelAttr:     attrNameToString{},
+			bazelAttr:     AttrNameToString{},
 		},
 		{
 			description:   "pack_relocations: false",
 			soongProperty: `pack_relocations: false,`,
-			bazelAttr:     attrNameToString{"features": `["disable_pack_relocations"]`},
+			bazelAttr:     AttrNameToString{"features": `["disable_pack_relocations"]`},
 		},
 		{
 			description: "pack_relocations: not set",
-			bazelAttr:   attrNameToString{},
+			bazelAttr:   AttrNameToString{},
 		},
 		{
 			description:   "pack_relocation: true",
 			soongProperty: `allow_undefined_symbols: true,`,
-			bazelAttr:     attrNameToString{"features": `["-no_undefined_symbols"]`},
+			bazelAttr:     AttrNameToString{"features": `["-no_undefined_symbols"]`},
 		},
 		{
 			description:   "allow_undefined_symbols: false",
 			soongProperty: `allow_undefined_symbols: false,`,
-			bazelAttr:     attrNameToString{},
+			bazelAttr:     AttrNameToString{},
 		},
 		{
 			description: "allow_undefined_symbols: not set",
-			bazelAttr:   attrNameToString{},
+			bazelAttr:   AttrNameToString{},
 		},
 	}
 
@@ -462,11 +462,11 @@
 	include_build_directory: false,
 }`,
 		targets: []testBazelTarget{
-			{"proto_library", "foo_proto", attrNameToString{
+			{"proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}}, {"cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}}, {"cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}}, {"cc_binary", "foo", attrNameToString{
+			}}, {"cc_binary", "foo", AttrNameToString{
 				"dynamic_deps":       `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":foo_cc_proto_lite"]`,
 			}},
@@ -485,11 +485,11 @@
 	include_build_directory: false,
 }`,
 		targets: []testBazelTarget{
-			{"proto_library", "foo_proto", attrNameToString{
+			{"proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}}, {"cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}}, {"cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}}, {"cc_binary", "foo", attrNameToString{
+			}}, {"cc_binary", "foo", AttrNameToString{
 				"deps":               `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":foo_cc_proto_lite"]`,
 				"linkshared":         `False`,
@@ -510,7 +510,7 @@
 }
 `,
 		targets: []testBazelTarget{
-			{"genlex", "foo_genlex_l", attrNameToString{
+			{"genlex", "foo_genlex_l", AttrNameToString{
 				"srcs": `[
         "foo1.l",
         "foo2.l",
@@ -520,7 +520,7 @@
         "--bar_opt",
     ]`,
 			}},
-			{"genlex", "foo_genlex_ll", attrNameToString{
+			{"genlex", "foo_genlex_ll", AttrNameToString{
 				"srcs": `[
         "bar1.ll",
         "bar2.ll",
@@ -530,7 +530,7 @@
         "--bar_opt",
     ]`,
 			}},
-			{"cc_binary", "foo", attrNameToString{
+			{"cc_binary", "foo", AttrNameToString{
 				"srcs": `[
         "bar.cc",
         ":foo_genlex_ll",
diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go
index 2cc2207..6c56d41 100644
--- a/bp2build/cc_library_conversion_test.go
+++ b/bp2build/cc_library_conversion_test.go
@@ -43,9 +43,9 @@
 	soongCcProtoPreamble = soongCcLibraryPreamble + soongCcProtoLibraries
 )
 
-func runCcLibraryTestCase(t *testing.T, tc bp2buildTestCase) {
+func runCcLibraryTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerCcLibraryModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerCcLibraryModuleTypes, tc)
 }
 
 func registerCcLibraryModuleTypes(ctx android.RegistrationContext) {
@@ -57,11 +57,11 @@
 }
 
 func TestCcLibrarySimple(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library - simple example",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library - simple example",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"android.cpp": "",
 			"bionic.cpp":  "",
 			"darwin.cpp":  "",
@@ -81,7 +81,7 @@
 			"x86_64.cpp":       "",
 			"foo-dir/a.h":      "",
 		},
-		blueprint: soongCcLibraryPreamble +
+		Blueprint: soongCcLibraryPreamble +
 			simpleModuleDoNotConvertBp2build("cc_library_headers", "some-headers") + `
 cc_library {
     name: "foo-lib",
@@ -120,7 +120,7 @@
     use_version_lib: true,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"copts":               `["-Wall"]`,
 			"export_includes":     `["foo-dir"]`,
 			"implementation_deps": `[":some-headers"]`,
@@ -151,18 +151,18 @@
 }
 
 func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library - trimmed example of //bionic/linker:ld-android",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library - trimmed example of //bionic/linker:ld-android",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"ld-android.cpp":           "",
 			"linked_list.h":            "",
 			"linker.h":                 "",
 			"linker_block_allocator.h": "",
 			"linker_cfi.h":             "",
 		},
-		blueprint: soongCcLibraryPreamble +
+		Blueprint: soongCcLibraryPreamble +
 			simpleModuleDoNotConvertBp2build("cc_library_headers", "libc_headers") + `
 cc_library {
     name: "fake-ld-android",
@@ -193,7 +193,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("fake-ld-android", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("fake-ld-android", AttrNameToString{
 			"srcs": `["ld_android.cpp"]`,
 			"copts": `[
         "-Wall",
@@ -219,12 +219,12 @@
 }
 
 func TestCcLibraryExcludeSrcs(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		dir:                        "external",
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Dir:                        "external",
+		Filesystem: map[string]string{
 			"external/math/cosf.c":      "",
 			"external/math/erf.c":       "",
 			"external/math/erf_data.c":  "",
@@ -257,8 +257,8 @@
 }
 `,
 		},
-		blueprint: soongCcLibraryPreamble,
-		expectedBazelTargets: makeCcLibraryTargets("fake-libarm-optimized-routines-math", attrNameToString{
+		Blueprint: soongCcLibraryPreamble,
+		ExpectedBazelTargets: makeCcLibraryTargets("fake-libarm-optimized-routines-math", AttrNameToString{
 			"copts": `select({
         "//build/bazel/platforms/arch:arm64": ["-DHAVE_FAST_FMA=1"],
         "//conditions:default": [],
@@ -270,16 +270,16 @@
 }
 
 func TestCcLibrarySharedStaticProps(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library shared/static props",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library shared/static props",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"both.cpp":       "",
 			"sharedonly.cpp": "",
 			"staticonly.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "a",
     srcs: ["both.cpp"],
@@ -354,8 +354,8 @@
     bazel_module: { bp2build_available: false },
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{
 				"copts": `[
         "bothflag",
         "staticflag",
@@ -377,7 +377,7 @@
         ":whole_and_static_lib_for_both",
         ":whole_static_lib_for_static",
     ]`}),
-			makeBazelTarget("cc_library_shared", "a", attrNameToString{
+			makeBazelTarget("cc_library_shared", "a", AttrNameToString{
 				"copts": `[
         "bothflag",
         "sharedflag",
@@ -405,16 +405,16 @@
 }
 
 func TestCcLibraryDeps(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library shared/static props",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library shared/static props",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"both.cpp":       "",
 			"sharedonly.cpp": "",
 			"staticonly.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "a",
     srcs: ["both.cpp"],
@@ -462,8 +462,8 @@
 			simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
 			simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
 			simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{
 				"copts": `[
         "bothflag",
         "staticflag",
@@ -495,7 +495,7 @@
         ":whole_static_dep_for_static",
     ]`,
 			}),
-			makeBazelTarget("cc_library_shared", "a", attrNameToString{
+			makeBazelTarget("cc_library_shared", "a", AttrNameToString{
 				"copts": `[
         "bothflag",
         "sharedflag",
@@ -532,11 +532,11 @@
 }
 
 func TestCcLibraryWholeStaticLibsAlwaysLink(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		dir:                        "foo/bar",
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Dir:                        "foo/bar",
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": `
 cc_library {
     name: "a",
@@ -558,15 +558,15 @@
 cc_prebuilt_library_static { name: "whole_static_lib_for_both" }
 `,
 		},
-		blueprint: soongCcLibraryPreamble,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
+		Blueprint: soongCcLibraryPreamble,
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{
 				"whole_archive_deps": `[
         ":whole_static_lib_for_both_alwayslink",
         ":whole_static_lib_for_static_alwayslink",
     ]`,
 			}),
-			makeBazelTarget("cc_library_shared", "a", attrNameToString{
+			makeBazelTarget("cc_library_shared", "a", AttrNameToString{
 				"whole_archive_deps": `[
         ":whole_static_lib_for_both_alwayslink",
         ":whole_static_lib_for_shared_alwayslink",
@@ -578,12 +578,12 @@
 }
 
 func TestCcLibrarySharedStaticPropsInArch(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library shared/static props in arch",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		dir:                        "foo/bar",
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library shared/static props in arch",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Dir:                        "foo/bar",
+		Filesystem: map[string]string{
 			"foo/bar/arm.cpp":        "",
 			"foo/bar/x86.cpp":        "",
 			"foo/bar/sharedonly.cpp": "",
@@ -652,9 +652,9 @@
 cc_library_static { name: "android_dep_for_shared" }
 `,
 		},
-		blueprint: soongCcLibraryPreamble,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
+		Blueprint: soongCcLibraryPreamble,
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{
 				"copts": `[
         "bothflag",
         "staticflag",
@@ -678,7 +678,7 @@
         "//conditions:default": [],
     })`,
 			}),
-			makeBazelTarget("cc_library_shared", "a", attrNameToString{
+			makeBazelTarget("cc_library_shared", "a", AttrNameToString{
 				"copts": `[
         "bothflag",
         "sharedflag",
@@ -728,12 +728,12 @@
 }
 
 func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library shared/static props with c/cpp/s mixed sources",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		dir:                        "foo/bar",
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library shared/static props with c/cpp/s mixed sources",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Dir:                        "foo/bar",
+		Filesystem: map[string]string{
 			"foo/bar/both_source.cpp":   "",
 			"foo/bar/both_source.cc":    "",
 			"foo/bar/both_source.c":     "",
@@ -805,9 +805,9 @@
 }
 `,
 		},
-		blueprint: soongCcLibraryPreamble,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
+		Blueprint: soongCcLibraryPreamble,
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{
 				"local_includes": `["."]`,
 				"srcs": `[
         "both_source.cpp",
@@ -832,7 +832,7 @@
         ":static_filegroup_c_srcs",
     ]`,
 			}),
-			makeBazelTarget("cc_library_shared", "a", attrNameToString{
+			makeBazelTarget("cc_library_shared", "a", AttrNameToString{
 				"local_includes": `["."]`,
 				"srcs": `[
         "both_source.cpp",
@@ -860,12 +860,12 @@
 }
 
 func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library non-configured version script",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		dir:                        "foo/bar",
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library non-configured version script",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Dir:                        "foo/bar",
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": `
 cc_library {
     name: "a",
@@ -876,8 +876,8 @@
 }
 `,
 		},
-		blueprint: soongCcLibraryPreamble,
-		expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
+		Blueprint: soongCcLibraryPreamble,
+		ExpectedBazelTargets: makeCcLibraryTargets("a", AttrNameToString{
 			"additional_linker_inputs": `["v.map"]`,
 			"linkopts":                 `["-Wl,--version-script,$(location v.map)"]`,
 			"srcs":                     `["a.cpp"]`,
@@ -887,12 +887,12 @@
 }
 
 func TestCcLibraryConfiguredVersionScript(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library configured version script",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		dir:                        "foo/bar",
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library configured version script",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Dir:                        "foo/bar",
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": `
 cc_library {
    name: "a",
@@ -911,8 +911,8 @@
 }
     `,
 		},
-		blueprint: soongCcLibraryPreamble,
-		expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
+		Blueprint: soongCcLibraryPreamble,
+		ExpectedBazelTargets: makeCcLibraryTargets("a", AttrNameToString{
 			"additional_linker_inputs": `select({
         "//build/bazel/platforms/arch:arm": ["arm.map"],
         "//build/bazel/platforms/arch:arm64": ["arm64.map"],
@@ -930,11 +930,11 @@
 }
 
 func TestCcLibrarySharedLibs(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library shared_libs",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library shared_libs",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "mylib",
     bazel_module: { bp2build_available: false },
@@ -946,7 +946,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("a", AttrNameToString{
 			"implementation_dynamic_deps": `[":mylib"]`,
 		}),
 	},
@@ -955,7 +955,7 @@
 
 func TestCcLibraryFeatures(t *testing.T) {
 	expected_targets := []string{}
-	expected_targets = append(expected_targets, makeCcLibraryTargets("a", attrNameToString{
+	expected_targets = append(expected_targets, makeCcLibraryTargets("a", AttrNameToString{
 		"features": `[
         "disable_pack_relocations",
         "-no_undefined_symbols",
@@ -963,7 +963,7 @@
     ]`,
 		"srcs": `["a.cpp"]`,
 	})...)
-	expected_targets = append(expected_targets, makeCcLibraryTargets("b", attrNameToString{
+	expected_targets = append(expected_targets, makeCcLibraryTargets("b", AttrNameToString{
 		"features": `["-coverage"] + select({
         "//build/bazel/platforms/arch:x86_64": [
             "disable_pack_relocations",
@@ -973,7 +973,7 @@
     })`,
 		"srcs": `["b.cpp"]`,
 	})...)
-	expected_targets = append(expected_targets, makeCcLibraryTargets("c", attrNameToString{
+	expected_targets = append(expected_targets, makeCcLibraryTargets("c", AttrNameToString{
 		"features": `select({
         "//build/bazel/platforms/os:darwin": [
             "disable_pack_relocations",
@@ -984,11 +984,11 @@
 		"srcs": `["c.cpp"]`,
 	})...)
 
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library pack_relocations test",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library pack_relocations test",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "a",
     srcs: ["a.cpp"],
@@ -1022,23 +1022,23 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: expected_targets,
+		ExpectedBazelTargets: expected_targets,
 	})
 }
 
 func TestCcLibrarySpacesInCopts(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library spaces in copts",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library spaces in copts",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "a",
     cflags: ["-include header.h",],
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("a", AttrNameToString{
 			"copts": `[
         "-include",
         "header.h",
@@ -1049,11 +1049,11 @@
 }
 
 func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library cppflags usage",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library cppflags usage",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `cc_library {
     name: "a",
     srcs: ["a.cpp"],
     cflags: ["-Wall"],
@@ -1074,7 +1074,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("a", AttrNameToString{
 			"copts": `["-Wall"]`,
 			"cppflags": `[
         "-fsigned-char",
@@ -1093,11 +1093,11 @@
 }
 
 func TestCcLibraryExcludeLibs(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library {
     name: "foo_static",
     srcs: ["common.c"],
@@ -1171,7 +1171,7 @@
     bazel_module: { bp2build_available: false },
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo_static", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo_static", AttrNameToString{
 			"implementation_deps": `select({
         "//build/bazel/platforms/arch:arm": [],
         "//conditions:default": [":arm_static_lib_excludes_bp2build_cc_library_static"],
@@ -1200,14 +1200,14 @@
 }
 
 func TestCCLibraryNoCrtTrue(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library - nocrt: true emits attribute",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library - nocrt: true emits attribute",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["impl.cpp"],
@@ -1215,7 +1215,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"link_crt": `False`,
 			"srcs":     `["impl.cpp"]`,
 		}),
@@ -1224,14 +1224,14 @@
 }
 
 func TestCCLibraryNoCrtFalse(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library - nocrt: false - does not emit attribute",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library - nocrt: false - does not emit attribute",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["impl.cpp"],
@@ -1239,21 +1239,21 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"srcs": `["impl.cpp"]`,
 		}),
 	})
 }
 
 func TestCCLibraryNoCrtArchVariant(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library - nocrt in select",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library - nocrt in select",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["impl.cpp"],
@@ -1268,18 +1268,18 @@
     include_build_directory: false,
 }
 `,
-		expectedErr: fmt.Errorf("module \"foo-lib\": nocrt is not supported for arch variants"),
+		ExpectedErr: fmt.Errorf("module \"foo-lib\": nocrt is not supported for arch variants"),
 	})
 }
 
 func TestCCLibraryNoLibCrtTrue(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["impl.cpp"],
@@ -1287,14 +1287,14 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"srcs":       `["impl.cpp"]`,
 			"use_libcrt": `False`,
 		}),
 	})
 }
 
-func makeCcLibraryTargets(name string, attrs attrNameToString) []string {
+func makeCcLibraryTargets(name string, attrs AttrNameToString) []string {
 	STATIC_ONLY_ATTRS := map[string]bool{}
 	SHARED_ONLY_ATTRS := map[string]bool{
 		"link_crt":                 true,
@@ -1305,8 +1305,8 @@
 		"stubs_versions":           true,
 		"inject_bssl_hash":         true,
 	}
-	sharedAttrs := attrNameToString{}
-	staticAttrs := attrNameToString{}
+	sharedAttrs := AttrNameToString{}
+	staticAttrs := AttrNameToString{}
 	for key, val := range attrs {
 		if _, staticOnly := STATIC_ONLY_ATTRS[key]; !staticOnly {
 			sharedAttrs[key] = val
@@ -1322,13 +1322,13 @@
 }
 
 func TestCCLibraryNoLibCrtFalse(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["impl.cpp"],
@@ -1336,7 +1336,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"srcs":       `["impl.cpp"]`,
 			"use_libcrt": `True`,
 		}),
@@ -1344,13 +1344,13 @@
 }
 
 func TestCCLibraryNoLibCrtArchVariant(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["impl.cpp"],
@@ -1365,7 +1365,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"srcs": `["impl.cpp"]`,
 			"use_libcrt": `select({
         "//build/bazel/platforms/arch:arm": False,
@@ -1377,13 +1377,13 @@
 }
 
 func TestCCLibraryNoLibCrtArchAndTargetVariant(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["impl.cpp"],
@@ -1403,7 +1403,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"srcs": `["impl.cpp"]`,
 			"use_libcrt": `select({
         "//build/bazel/platforms/os_arch:android_arm": False,
@@ -1420,13 +1420,13 @@
 }
 
 func TestCCLibraryNoLibCrtArchAndTargetVariantConflict(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["impl.cpp"],
@@ -1447,7 +1447,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"srcs": `["impl.cpp"]`,
 			"use_libcrt": `select({
         "//build/bazel/platforms/os_arch:android_arm": False,
@@ -1466,38 +1466,38 @@
 
 func TestCcLibraryStrip(t *testing.T) {
 	expectedTargets := []string{}
-	expectedTargets = append(expectedTargets, makeCcLibraryTargets("all", attrNameToString{
+	expectedTargets = append(expectedTargets, makeCcLibraryTargets("all", AttrNameToString{
 		"strip": `{
         "all": True,
     }`,
 	})...)
-	expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols", attrNameToString{
+	expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols", AttrNameToString{
 		"strip": `{
         "keep_symbols": True,
     }`,
 	})...)
-	expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols_and_debug_frame", attrNameToString{
+	expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols_and_debug_frame", AttrNameToString{
 		"strip": `{
         "keep_symbols_and_debug_frame": True,
     }`,
 	})...)
-	expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols_list", attrNameToString{
+	expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols_list", AttrNameToString{
 		"strip": `{
         "keep_symbols_list": ["symbol"],
     }`,
 	})...)
-	expectedTargets = append(expectedTargets, makeCcLibraryTargets("none", attrNameToString{
+	expectedTargets = append(expectedTargets, makeCcLibraryTargets("none", AttrNameToString{
 		"strip": `{
         "none": True,
     }`,
 	})...)
-	expectedTargets = append(expectedTargets, makeCcLibraryTargets("nothing", attrNameToString{})...)
+	expectedTargets = append(expectedTargets, makeCcLibraryTargets("nothing", AttrNameToString{})...)
 
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library strip args",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library strip args",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "nothing",
     include_build_directory: false,
@@ -1538,16 +1538,16 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: expectedTargets,
+		ExpectedBazelTargets: expectedTargets,
 	})
 }
 
 func TestCcLibraryStripWithArch(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library strip args",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library strip args",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "multi-arch",
     target: {
@@ -1572,7 +1572,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("multi-arch", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("multi-arch", AttrNameToString{
 			"strip": `{
         "keep_symbols": select({
             "//build/bazel/platforms/arch:arm64": True,
@@ -1596,18 +1596,18 @@
 }
 
 func TestCcLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library system_shared_libs empty at root",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library system_shared_libs empty at root",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "root_empty",
     system_shared_libs: [],
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("root_empty", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("root_empty", AttrNameToString{
 			"system_dynamic_deps": `[]`,
 		}),
 	},
@@ -1615,11 +1615,11 @@
 }
 
 func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library system_shared_libs empty for static variant",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library system_shared_libs empty for static variant",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "static_empty",
     static: {
@@ -1628,21 +1628,21 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "static_empty_bp2build_cc_library_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "static_empty_bp2build_cc_library_static", AttrNameToString{
 				"system_dynamic_deps": "[]",
 			}),
-			makeBazelTarget("cc_library_shared", "static_empty", attrNameToString{}),
+			makeBazelTarget("cc_library_shared", "static_empty", AttrNameToString{}),
 		},
 	})
 }
 
 func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library system_shared_libs empty for shared variant",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library system_shared_libs empty for shared variant",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "shared_empty",
     shared: {
@@ -1651,9 +1651,9 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", attrNameToString{}),
-			makeBazelTarget("cc_library_shared", "shared_empty", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", AttrNameToString{}),
+			makeBazelTarget("cc_library_shared", "shared_empty", AttrNameToString{
 				"system_dynamic_deps": "[]",
 			}),
 		},
@@ -1661,11 +1661,11 @@
 }
 
 func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library system_shared_libs empty for shared, bionic variant",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library system_shared_libs empty for shared, bionic variant",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "shared_empty",
     target: {
@@ -1678,9 +1678,9 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", attrNameToString{}),
-			makeBazelTarget("cc_library_shared", "shared_empty", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", AttrNameToString{}),
+			makeBazelTarget("cc_library_shared", "shared_empty", AttrNameToString{
 				"system_dynamic_deps": "[]",
 			}),
 		},
@@ -1692,11 +1692,11 @@
 	// The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
 	// only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
 	// b/195791252 tracks the fix.
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library system_shared_libs empty for linux_bionic variant",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library system_shared_libs empty for linux_bionic variant",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "target_linux_bionic_empty",
     target: {
@@ -1707,7 +1707,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("target_linux_bionic_empty", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("target_linux_bionic_empty", AttrNameToString{
 			"system_dynamic_deps": `[]`,
 		}),
 	},
@@ -1715,11 +1715,11 @@
 }
 
 func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library system_shared_libs empty for bionic variant",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library system_shared_libs empty for bionic variant",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "target_bionic_empty",
     target: {
@@ -1730,7 +1730,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("target_bionic_empty", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("target_bionic_empty", AttrNameToString{
 			"system_dynamic_deps": `[]`,
 		}),
 	},
@@ -1738,11 +1738,11 @@
 }
 
 func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library system_shared_libs set for shared and root",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library system_shared_libs set for shared and root",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "libc",
     bazel_module: { bp2build_available: false },
@@ -1761,11 +1761,11 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 				"system_dynamic_deps": `[":libc"]`,
 			}),
-			makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+			makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"system_dynamic_deps": `[
         ":libc",
         ":libm",
@@ -1776,12 +1776,12 @@
 }
 
 func TestCcLibraryOsSelects(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library - selects for all os targets",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library - selects for all os targets",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "foo-lib",
     srcs: ["base.cpp"],
@@ -1811,7 +1811,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
 			"srcs": `["base.cpp"] + select({
         "//build/bazel/platforms/os:android": [
             "linux.cpp",
@@ -1840,12 +1840,12 @@
 }
 
 func TestLibcryptoHashInjection(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library - libcrypto hash injection",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library - libcrypto hash injection",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryPreamble + `
 cc_library {
     name: "libcrypto",
     target: {
@@ -1856,7 +1856,7 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: makeCcLibraryTargets("libcrypto", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("libcrypto", AttrNameToString{
 			"inject_bssl_hash": `select({
         "//build/bazel/platforms/os:android": True,
         "//conditions:default": None,
@@ -1940,7 +1940,7 @@
 			if tc.gnu_extensions != "" {
 				gnuExtensionsProp = fmt.Sprintf("    gnu_extensions: %s,", tc.gnu_extensions)
 			}
-			attrs := attrNameToString{}
+			attrs := AttrNameToString{}
 			if tc.bazel_cpp_std != "" {
 				attrs["cpp_std"] = fmt.Sprintf(`"%s"`, tc.bazel_cpp_std)
 			}
@@ -1948,12 +1948,12 @@
 				attrs["c_std"] = fmt.Sprintf(`"%s"`, tc.bazel_c_std)
 			}
 
-			runCcLibraryTestCase(t, bp2buildTestCase{
-				description: fmt.Sprintf(
+			runCcLibraryTestCase(t, Bp2buildTestCase{
+				Description: fmt.Sprintf(
 					"cc_library with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
-				moduleTypeUnderTest:        "cc_library",
-				moduleTypeUnderTestFactory: cc.LibraryFactory,
-				blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
+				ModuleTypeUnderTest:        "cc_library",
+				ModuleTypeUnderTestFactory: cc.LibraryFactory,
+				Blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
 cc_library {
 	name: "%s_full",
 %s // cpp_std: *string
@@ -1962,15 +1962,15 @@
 	include_build_directory: false,
 }
 `, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
-				expectedBazelTargets: makeCcLibraryTargets(name_prefix+"_full", attrs),
+				ExpectedBazelTargets: makeCcLibraryTargets(name_prefix+"_full", attrs),
 			})
 
-			runCcLibraryStaticTestCase(t, bp2buildTestCase{
-				description: fmt.Sprintf(
+			runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+				Description: fmt.Sprintf(
 					"cc_library_static with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
-				moduleTypeUnderTest:        "cc_library_static",
-				moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-				blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
+				ModuleTypeUnderTest:        "cc_library_static",
+				ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+				Blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
 cc_library_static {
 	name: "%s_static",
 %s // cpp_std: *string
@@ -1979,17 +1979,17 @@
 	include_build_directory: false,
 }
 `, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
-				expectedBazelTargets: []string{
+				ExpectedBazelTargets: []string{
 					makeBazelTarget("cc_library_static", name_prefix+"_static", attrs),
 				},
 			})
 
-			runCcLibrarySharedTestCase(t, bp2buildTestCase{
-				description: fmt.Sprintf(
+			runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+				Description: fmt.Sprintf(
 					"cc_library_shared with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
-				moduleTypeUnderTest:        "cc_library_shared",
-				moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
-				blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
+				ModuleTypeUnderTest:        "cc_library_shared",
+				ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
+				Blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
 cc_library_shared {
 	name: "%s_shared",
 %s // cpp_std: *string
@@ -1998,7 +1998,7 @@
 	include_build_directory: false,
 }
 `, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
-				expectedBazelTargets: []string{
+				ExpectedBazelTargets: []string{
 					makeBazelTarget("cc_library_shared", name_prefix+"_shared", attrs),
 				},
 			})
@@ -2007,23 +2007,23 @@
 }
 
 func TestCcLibraryProtoSimple(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.proto"],
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "foo_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 				"implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
 				"deps":                              `[":libprotobuf-cpp-lite"]`,
-			}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
 			}),
 		},
@@ -2031,25 +2031,25 @@
 }
 
 func TestCcLibraryProtoNoCanonicalPathFromRoot(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.proto"],
 	proto: { canonical_path_from_root: false},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "foo_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
 				"srcs":                `["foo.proto"]`,
 				"strip_import_prefix": `""`,
-			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 				"implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
 				"deps":                              `[":libprotobuf-cpp-lite"]`,
-			}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
 			}),
 		},
@@ -2057,24 +2057,24 @@
 }
 
 func TestCcLibraryProtoExplicitCanonicalPathFromRoot(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.proto"],
 	proto: { canonical_path_from_root: true},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "foo_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 				"implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
 				"deps":                              `[":libprotobuf-cpp-lite"]`,
-			}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
 			}),
 		},
@@ -2082,10 +2082,10 @@
 }
 
 func TestCcLibraryProtoFull(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.proto"],
 	proto: {
@@ -2093,15 +2093,15 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "foo_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}), makeBazelTarget("cc_proto_library", "foo_cc_proto", attrNameToString{
+			}), makeBazelTarget("cc_proto_library", "foo_cc_proto", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 				"implementation_whole_archive_deps": `[":foo_cc_proto"]`,
 				"deps":                              `[":libprotobuf-cpp-full"]`,
-			}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"dynamic_deps": `[":libprotobuf-cpp-full"]`,
 			}),
 		},
@@ -2109,10 +2109,10 @@
 }
 
 func TestCcLibraryProtoLite(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.proto"],
 	proto: {
@@ -2120,15 +2120,15 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "foo_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 				"implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
 				"deps":                              `[":libprotobuf-cpp-lite"]`,
-			}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
 			}),
 		},
@@ -2136,10 +2136,10 @@
 }
 
 func TestCcLibraryProtoExportHeaders(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.proto"],
 	proto: {
@@ -2147,15 +2147,15 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "foo_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 				"deps":               `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":foo_cc_proto_lite"]`,
-			}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"dynamic_deps":       `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":foo_cc_proto_lite"]`,
 			}),
@@ -2164,10 +2164,10 @@
 }
 
 func TestCcLibraryProtoFilegroups(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble +
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble +
 			simpleModuleDoNotConvertBp2build("filegroup", "a_fg_proto") +
 			simpleModuleDoNotConvertBp2build("filegroup", "b_protos") +
 			simpleModuleDoNotConvertBp2build("filegroup", "c-proto-srcs") +
@@ -2207,66 +2207,66 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "a_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "a_proto", AttrNameToString{
 				"srcs": `[":a_fg_proto"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "a_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "a_cc_proto_lite", AttrNameToString{
 				"deps": `[":a_proto"]`,
-			}), makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{
 				"deps":               `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":a_cc_proto_lite"]`,
 				"srcs":               `[":a_fg_proto_cpp_srcs"]`,
 				"srcs_as":            `[":a_fg_proto_as_srcs"]`,
 				"srcs_c":             `[":a_fg_proto_c_srcs"]`,
-			}), makeBazelTarget("cc_library_shared", "a", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "a", AttrNameToString{
 				"dynamic_deps":       `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":a_cc_proto_lite"]`,
 				"srcs":               `[":a_fg_proto_cpp_srcs"]`,
 				"srcs_as":            `[":a_fg_proto_as_srcs"]`,
 				"srcs_c":             `[":a_fg_proto_c_srcs"]`,
-			}), makeBazelTarget("proto_library", "b_proto", attrNameToString{
+			}), makeBazelTarget("proto_library", "b_proto", AttrNameToString{
 				"srcs": `[":b_protos"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "b_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "b_cc_proto_lite", AttrNameToString{
 				"deps": `[":b_proto"]`,
-			}), makeBazelTarget("cc_library_static", "b_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "b_bp2build_cc_library_static", AttrNameToString{
 				"deps":               `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":b_cc_proto_lite"]`,
 				"srcs":               `[":b_protos_cpp_srcs"]`,
 				"srcs_as":            `[":b_protos_as_srcs"]`,
 				"srcs_c":             `[":b_protos_c_srcs"]`,
-			}), makeBazelTarget("cc_library_shared", "b", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "b", AttrNameToString{
 				"dynamic_deps":       `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":b_cc_proto_lite"]`,
 				"srcs":               `[":b_protos_cpp_srcs"]`,
 				"srcs_as":            `[":b_protos_as_srcs"]`,
 				"srcs_c":             `[":b_protos_c_srcs"]`,
-			}), makeBazelTarget("proto_library", "c_proto", attrNameToString{
+			}), makeBazelTarget("proto_library", "c_proto", AttrNameToString{
 				"srcs": `[":c-proto-srcs"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "c_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "c_cc_proto_lite", AttrNameToString{
 				"deps": `[":c_proto"]`,
-			}), makeBazelTarget("cc_library_static", "c_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "c_bp2build_cc_library_static", AttrNameToString{
 				"deps":               `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":c_cc_proto_lite"]`,
 				"srcs":               `[":c-proto-srcs_cpp_srcs"]`,
 				"srcs_as":            `[":c-proto-srcs_as_srcs"]`,
 				"srcs_c":             `[":c-proto-srcs_c_srcs"]`,
-			}), makeBazelTarget("cc_library_shared", "c", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "c", AttrNameToString{
 				"dynamic_deps":       `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":c_cc_proto_lite"]`,
 				"srcs":               `[":c-proto-srcs_cpp_srcs"]`,
 				"srcs_as":            `[":c-proto-srcs_as_srcs"]`,
 				"srcs_c":             `[":c-proto-srcs_c_srcs"]`,
-			}), makeBazelTarget("proto_library", "d_proto", attrNameToString{
+			}), makeBazelTarget("proto_library", "d_proto", AttrNameToString{
 				"srcs": `[":proto-srcs-d"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "d_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "d_cc_proto_lite", AttrNameToString{
 				"deps": `[":d_proto"]`,
-			}), makeBazelTarget("cc_library_static", "d_bp2build_cc_library_static", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "d_bp2build_cc_library_static", AttrNameToString{
 				"deps":               `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":d_cc_proto_lite"]`,
 				"srcs":               `[":proto-srcs-d_cpp_srcs"]`,
 				"srcs_as":            `[":proto-srcs-d_as_srcs"]`,
 				"srcs_c":             `[":proto-srcs-d_c_srcs"]`,
-			}), makeBazelTarget("cc_library_shared", "d", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "d", AttrNameToString{
 				"dynamic_deps":       `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":d_cc_proto_lite"]`,
 				"srcs":               `[":proto-srcs-d_cpp_srcs"]`,
@@ -2278,10 +2278,10 @@
 }
 
 func TestCcLibraryDisabledArchAndTarget(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.cpp"],
 	host_supported: true,
@@ -2298,7 +2298,7 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: makeCcLibraryTargets("foo", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo", AttrNameToString{
 			"srcs": `["foo.cpp"]`,
 			"target_compatible_with": `select({
         "//build/bazel/platforms/os_arch:darwin_arm64": ["@platforms//:incompatible"],
@@ -2313,10 +2313,10 @@
 }
 
 func TestCcLibraryDisabledArchAndTargetWithDefault(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.cpp"],
   enabled: false,
@@ -2334,7 +2334,7 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: makeCcLibraryTargets("foo", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo", AttrNameToString{
 			"srcs": `["foo.cpp"]`,
 			"target_compatible_with": `select({
         "//build/bazel/platforms/os_arch:darwin_arm64": [],
@@ -2346,10 +2346,10 @@
 }
 
 func TestCcLibrarySharedDisabled(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	srcs: ["foo.cpp"],
 	enabled: false,
@@ -2365,10 +2365,10 @@
   },
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+		ExpectedBazelTargets: []string{makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 			"srcs":                   `["foo.cpp"]`,
 			"target_compatible_with": `["@platforms//:incompatible"]`,
-		}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+		}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 			"srcs": `["foo.cpp"]`,
 			"target_compatible_with": `select({
         "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
@@ -2380,10 +2380,10 @@
 }
 
 func TestCcLibraryStaticDisabledForSomeArch(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	host_supported: true,
 	srcs: ["foo.cpp"],
@@ -2405,13 +2405,13 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
+		ExpectedBazelTargets: []string{makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
 			"srcs": `["foo.cpp"]`,
 			"target_compatible_with": `select({
         "//build/bazel/platforms/os:windows": ["@platforms//:incompatible"],
         "//conditions:default": [],
     })`,
-		}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+		}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 			"srcs": `["foo.cpp"]`,
 			"target_compatible_with": `select({
         "//build/bazel/platforms/os_arch:darwin_arm64": [],
@@ -2424,12 +2424,12 @@
 }
 
 func TestCcLibraryStubs(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		description:                "cc_library stubs",
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		dir:                        "foo/bar",
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library stubs",
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Dir:                        "foo/bar",
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": `
 cc_library {
     name: "a",
@@ -2439,8 +2439,8 @@
 }
 `,
 		},
-		blueprint: soongCcLibraryPreamble,
-		expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
+		Blueprint: soongCcLibraryPreamble,
+		ExpectedBazelTargets: makeCcLibraryTargets("a", AttrNameToString{
 			"stubs_symbol_file": `"a.map.txt"`,
 			"stubs_versions": `[
         "28",
@@ -2453,25 +2453,25 @@
 }
 
 func TestCcLibraryEscapeLdflags(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		blueprint: soongCcProtoPreamble + `cc_library {
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Blueprint: soongCcProtoPreamble + `cc_library {
 	name: "foo",
 	ldflags: ["-Wl,--rpath,${ORIGIN}"],
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: makeCcLibraryTargets("foo", attrNameToString{
+		ExpectedBazelTargets: makeCcLibraryTargets("foo", AttrNameToString{
 			"linkopts": `["-Wl,--rpath,$${ORIGIN}"]`,
 		}),
 	})
 }
 
 func TestCcLibraryConvertLex(t *testing.T) {
-	runCcLibraryTestCase(t, bp2buildTestCase{
-		moduleTypeUnderTest:        "cc_library",
-		moduleTypeUnderTestFactory: cc.LibraryFactory,
-		filesystem: map[string]string{
+	runCcLibraryTestCase(t, Bp2buildTestCase{
+		ModuleTypeUnderTest:        "cc_library",
+		ModuleTypeUnderTestFactory: cc.LibraryFactory,
+		Filesystem: map[string]string{
 			"foo.c":   "",
 			"bar.cc":  "",
 			"foo1.l":  "",
@@ -2479,22 +2479,22 @@
 			"foo2.l":  "",
 			"bar2.ll": "",
 		},
-		blueprint: `cc_library {
+		Blueprint: `cc_library {
 	name: "foo_lib",
 	srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
 	lex: { flags: ["--foo_flags"] },
 	include_build_directory: false,
 	bazel_module: { bp2build_available: true },
 }`,
-		expectedBazelTargets: append([]string{
-			makeBazelTarget("genlex", "foo_lib_genlex_l", attrNameToString{
+		ExpectedBazelTargets: append([]string{
+			makeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{
 				"srcs": `[
         "foo1.l",
         "foo2.l",
     ]`,
 				"lexopts": `["--foo_flags"]`,
 			}),
-			makeBazelTarget("genlex", "foo_lib_genlex_ll", attrNameToString{
+			makeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{
 				"srcs": `[
         "bar1.ll",
         "bar2.ll",
@@ -2502,7 +2502,7 @@
 				"lexopts": `["--foo_flags"]`,
 			}),
 		},
-			makeCcLibraryTargets("foo_lib", attrNameToString{
+			makeCcLibraryTargets("foo_lib", AttrNameToString{
 				"srcs": `[
         "bar.cc",
         ":foo_lib_genlex_ll",
diff --git a/bp2build/cc_library_headers_conversion_test.go b/bp2build/cc_library_headers_conversion_test.go
index 641984b..bb59c63 100644
--- a/bp2build/cc_library_headers_conversion_test.go
+++ b/bp2build/cc_library_headers_conversion_test.go
@@ -59,17 +59,17 @@
 	cc.RegisterCCBuildComponents(ctx)
 }
 
-func runCcLibraryHeadersTestCase(t *testing.T, tc bp2buildTestCase) {
+func runCcLibraryHeadersTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerCcLibraryHeadersModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerCcLibraryHeadersModuleTypes, tc)
 }
 
 func TestCcLibraryHeadersSimple(t *testing.T) {
-	runCcLibraryHeadersTestCase(t, bp2buildTestCase{
-		description:                "cc_library_headers test",
-		moduleTypeUnderTest:        "cc_library_headers",
-		moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
-		filesystem: map[string]string{
+	runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_headers test",
+		ModuleTypeUnderTest:        "cc_library_headers",
+		ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
+		Filesystem: map[string]string{
 			"lib-1/lib1a.h":                        "",
 			"lib-1/lib1b.h":                        "",
 			"lib-2/lib2a.h":                        "",
@@ -82,7 +82,7 @@
 			"arch_x86_exported_include_dir/b.h":    "",
 			"arch_x86_64_exported_include_dir/c.h": "",
 		},
-		blueprint: soongCcLibraryHeadersPreamble + `
+		Blueprint: soongCcLibraryHeadersPreamble + `
 cc_library_headers {
     name: "foo_headers",
     export_include_dirs: ["dir-1", "dir-2"],
@@ -105,8 +105,8 @@
 
     // TODO: Also support export_header_lib_headers
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
 				"export_includes": `[
         "dir-1",
         "dir-2",
@@ -124,12 +124,12 @@
 }
 
 func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) {
-	runCcLibraryHeadersTestCase(t, bp2buildTestCase{
-		description:                "cc_library_headers test with os-specific header_libs props",
-		moduleTypeUnderTest:        "cc_library_headers",
-		moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_headers test with os-specific header_libs props",
+		ModuleTypeUnderTest:        "cc_library_headers",
+		ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryPreamble + `
 cc_library_headers {
     name: "android-lib",
     bazel_module: { bp2build_available: false },
@@ -182,8 +182,8 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
 				"deps": `[":base-lib"] + select({
         "//build/bazel/platforms/os:android": [":android-lib"],
         "//build/bazel/platforms/os:darwin": [":darwin-lib"],
@@ -198,12 +198,12 @@
 }
 
 func TestCcLibraryHeadersOsSpecficHeaderLibsExportHeaderLibHeaders(t *testing.T) {
-	runCcLibraryHeadersTestCase(t, bp2buildTestCase{
-		description:                "cc_library_headers test with os-specific header_libs and export_header_lib_headers props",
-		moduleTypeUnderTest:        "cc_library_headers",
-		moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryPreamble + `
+	runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_headers test with os-specific header_libs and export_header_lib_headers props",
+		ModuleTypeUnderTest:        "cc_library_headers",
+		ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryPreamble + `
 cc_library_headers {
     name: "android-lib",
     bazel_module: { bp2build_available: false },
@@ -222,8 +222,8 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
 				"deps": `select({
         "//build/bazel/platforms/os:android": [":exported-lib"],
         "//conditions:default": [],
@@ -234,12 +234,12 @@
 }
 
 func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
-	runCcLibraryHeadersTestCase(t, bp2buildTestCase{
-		description:                "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props",
-		moduleTypeUnderTest:        "cc_library_headers",
-		moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryPreamble + `cc_library_headers {
+	runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props",
+		ModuleTypeUnderTest:        "cc_library_headers",
+		ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryPreamble + `cc_library_headers {
     name: "foo_headers",
     export_system_include_dirs: [
         "shared_include_dir",
@@ -275,8 +275,8 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
 				"export_system_includes": `["shared_include_dir"] + select({
         "//build/bazel/platforms/arch:arm": ["arm_include_dir"],
         "//build/bazel/platforms/arch:x86_64": ["x86_64_include_dir"],
@@ -293,11 +293,11 @@
 }
 
 func TestCcLibraryHeadersNoCrtIgnored(t *testing.T) {
-	runCcLibraryHeadersTestCase(t, bp2buildTestCase{
-		description:                "cc_library_headers test",
-		moduleTypeUnderTest:        "cc_library_headers",
-		moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
-		filesystem: map[string]string{
+	runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_headers test",
+		ModuleTypeUnderTest:        "cc_library_headers",
+		ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
+		Filesystem: map[string]string{
 			"lib-1/lib1a.h":                        "",
 			"lib-1/lib1b.h":                        "",
 			"lib-2/lib2a.h":                        "",
@@ -310,15 +310,15 @@
 			"arch_x86_exported_include_dir/b.h":    "",
 			"arch_x86_64_exported_include_dir/c.h": "",
 		},
-		blueprint: soongCcLibraryHeadersPreamble + `
+		Blueprint: soongCcLibraryHeadersPreamble + `
 cc_library_headers {
     name: "lib-1",
     export_include_dirs: ["lib-1"],
     no_libcrt: true,
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_headers", "lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_headers", "lib-1", AttrNameToString{
 				"export_includes": `["lib-1"]`,
 			}),
 		},
@@ -326,12 +326,12 @@
 }
 
 func TestCcLibraryHeadersExportedStaticLibHeadersReexported(t *testing.T) {
-	runCcLibraryHeadersTestCase(t, bp2buildTestCase{
-		description:                "cc_library_headers exported_static_lib_headers is reexported",
-		moduleTypeUnderTest:        "cc_library_headers",
-		moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryHeadersPreamble + `
+	runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_headers exported_static_lib_headers is reexported",
+		ModuleTypeUnderTest:        "cc_library_headers",
+		ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryHeadersPreamble + `
 cc_library_headers {
 		name: "foo_headers",
 		export_static_lib_headers: ["foo_export"],
@@ -339,8 +339,8 @@
     bazel_module: { bp2build_available: true },
 }
 ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
 				"deps": `[":foo_export"]`,
 			}),
 		},
@@ -348,12 +348,12 @@
 }
 
 func TestCcLibraryHeadersExportedSharedLibHeadersReexported(t *testing.T) {
-	runCcLibraryHeadersTestCase(t, bp2buildTestCase{
-		description:                "cc_library_headers exported_shared_lib_headers is reexported",
-		moduleTypeUnderTest:        "cc_library_headers",
-		moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryHeadersPreamble + `
+	runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_headers exported_shared_lib_headers is reexported",
+		ModuleTypeUnderTest:        "cc_library_headers",
+		ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryHeadersPreamble + `
 cc_library_headers {
 		name: "foo_headers",
 		export_shared_lib_headers: ["foo_export"],
@@ -361,8 +361,8 @@
     bazel_module: { bp2build_available: true },
 }
 ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
 				"deps": `[":foo_export"]`,
 			}),
 		},
@@ -370,12 +370,12 @@
 }
 
 func TestCcLibraryHeadersExportedHeaderLibHeadersReexported(t *testing.T) {
-	runCcLibraryHeadersTestCase(t, bp2buildTestCase{
-		description:                "cc_library_headers exported_header_lib_headers is reexported",
-		moduleTypeUnderTest:        "cc_library_headers",
-		moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
-		filesystem:                 map[string]string{},
-		blueprint: soongCcLibraryHeadersPreamble + `
+	runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_headers exported_header_lib_headers is reexported",
+		ModuleTypeUnderTest:        "cc_library_headers",
+		ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
+		Filesystem:                 map[string]string{},
+		Blueprint: soongCcLibraryHeadersPreamble + `
 cc_library_headers {
 		name: "foo_headers",
 		export_header_lib_headers: ["foo_export"],
@@ -383,8 +383,8 @@
     bazel_module: { bp2build_available: true },
 }
 ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
 				"deps": `[":foo_export"]`,
 			}),
 		},
diff --git a/bp2build/cc_library_shared_conversion_test.go b/bp2build/cc_library_shared_conversion_test.go
index 74729e4..6a47862 100644
--- a/bp2build/cc_library_shared_conversion_test.go
+++ b/bp2build/cc_library_shared_conversion_test.go
@@ -35,17 +35,17 @@
 	ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
 }
 
-func runCcLibrarySharedTestCase(t *testing.T, tc bp2buildTestCase) {
+func runCcLibrarySharedTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "cc_library_shared"
-	(&tc).moduleTypeUnderTestFactory = cc.LibrarySharedFactory
-	runBp2BuildTestCase(t, registerCcLibrarySharedModuleTypes, tc)
+	(&tc).ModuleTypeUnderTest = "cc_library_shared"
+	(&tc).ModuleTypeUnderTestFactory = cc.LibrarySharedFactory
+	RunBp2BuildTestCase(t, registerCcLibrarySharedModuleTypes, tc)
 }
 
 func TestCcLibrarySharedSimple(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared simple overall test",
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared simple overall test",
+		Filesystem: map[string]string{
 			// NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
 			"include_dir_1/include_dir_1_a.h": "",
 			"include_dir_1/include_dir_1_b.h": "",
@@ -65,7 +65,7 @@
 			"implicit_include_1.h": "",
 			"implicit_include_2.h": "",
 		},
-		blueprint: soongCcLibrarySharedPreamble + `
+		Blueprint: soongCcLibrarySharedPreamble + `
 cc_library_headers {
     name: "header_lib_1",
     export_include_dirs: ["header_lib_1"],
@@ -141,8 +141,8 @@
 
     // TODO: Also support export_header_lib_headers
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"absolute_includes": `[
         "include_dir_1",
         "include_dir_2",
@@ -184,10 +184,10 @@
 }
 
 func TestCcLibrarySharedArchSpecificSharedLib(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared arch-specific shared_libs with whole_static_libs",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibrarySharedPreamble + `
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared arch-specific shared_libs with whole_static_libs",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibrarySharedPreamble + `
 cc_library_static {
     name: "static_dep",
     bazel_module: { bp2build_available: false },
@@ -201,8 +201,8 @@
     arch: { arm64: { shared_libs: ["shared_dep"], whole_static_libs: ["static_dep"] } },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"implementation_dynamic_deps": `select({
         "//build/bazel/platforms/arch:arm64": [":shared_dep"],
         "//conditions:default": [],
@@ -217,10 +217,10 @@
 }
 
 func TestCcLibrarySharedOsSpecificSharedLib(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared os-specific shared_libs",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibrarySharedPreamble + `
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared os-specific shared_libs",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibrarySharedPreamble + `
 cc_library_shared {
     name: "shared_dep",
     bazel_module: { bp2build_available: false },
@@ -230,8 +230,8 @@
     target: { android: { shared_libs: ["shared_dep"], } },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"implementation_dynamic_deps": `select({
         "//build/bazel/platforms/os:android": [":shared_dep"],
         "//conditions:default": [],
@@ -242,10 +242,10 @@
 }
 
 func TestCcLibrarySharedBaseArchOsSpecificSharedLib(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared base, arch, and os-specific shared_libs",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibrarySharedPreamble + `
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared base, arch, and os-specific shared_libs",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibrarySharedPreamble + `
 cc_library_shared {
     name: "shared_dep",
     bazel_module: { bp2build_available: false },
@@ -265,8 +265,8 @@
     arch: { arm64: { shared_libs: ["shared_dep3"] } },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"implementation_dynamic_deps": `[":shared_dep"] + select({
         "//build/bazel/platforms/arch:arm64": [":shared_dep3"],
         "//conditions:default": [],
@@ -280,22 +280,22 @@
 }
 
 func TestCcLibrarySharedSimpleExcludeSrcs(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared simple exclude_srcs",
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared simple exclude_srcs",
+		Filesystem: map[string]string{
 			"common.c":       "",
 			"foo-a.c":        "",
 			"foo-excluded.c": "",
 		},
-		blueprint: soongCcLibrarySharedPreamble + `
+		Blueprint: soongCcLibrarySharedPreamble + `
 cc_library_shared {
     name: "foo_shared",
     srcs: ["common.c", "foo-*.c"],
     exclude_srcs: ["foo-excluded.c"],
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"srcs_c": `[
         "common.c",
         "foo-a.c",
@@ -306,10 +306,10 @@
 }
 
 func TestCcLibrarySharedStrip(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared stripping",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibrarySharedPreamble + `
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared stripping",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibrarySharedPreamble + `
 cc_library_shared {
     name: "foo_shared",
     strip: {
@@ -321,8 +321,8 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"strip": `{
         "all": True,
         "keep_symbols": False,
@@ -339,19 +339,19 @@
 }
 
 func TestCcLibrarySharedVersionScript(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared version script",
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared version script",
+		Filesystem: map[string]string{
 			"version_script": "",
 		},
-		blueprint: soongCcLibrarySharedPreamble + `
+		Blueprint: soongCcLibrarySharedPreamble + `
 cc_library_shared {
     name: "foo_shared",
     version_script: "version_script",
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"additional_linker_inputs": `["version_script"]`,
 				"linkopts":                 `["-Wl,--version-script,$(location version_script)"]`,
 			}),
@@ -360,12 +360,12 @@
 }
 
 func TestCcLibrarySharedNoCrtTrue(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared - nocrt: true emits attribute",
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared - nocrt: true emits attribute",
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library_shared {
     name: "foo_shared",
     srcs: ["impl.cpp"],
@@ -373,8 +373,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"link_crt": `False`,
 				"srcs":     `["impl.cpp"]`,
 			}),
@@ -383,12 +383,12 @@
 }
 
 func TestCcLibrarySharedNoCrtFalse(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared - nocrt: false doesn't emit attribute",
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared - nocrt: false doesn't emit attribute",
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library_shared {
     name: "foo_shared",
     srcs: ["impl.cpp"],
@@ -396,8 +396,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
 				"srcs": `["impl.cpp"]`,
 			}),
 		},
@@ -405,12 +405,12 @@
 }
 
 func TestCcLibrarySharedNoCrtArchVariant(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description: "cc_library_shared - nocrt in select",
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_shared - nocrt in select",
+		Filesystem: map[string]string{
 			"impl.cpp": "",
 		},
-		blueprint: soongCcLibraryPreamble + `
+		Blueprint: soongCcLibraryPreamble + `
 cc_library_shared {
     name: "foo_shared",
     srcs: ["impl.cpp"],
@@ -425,13 +425,13 @@
     include_build_directory: false,
 }
 `,
-		expectedErr: fmt.Errorf("module \"foo_shared\": nocrt is not supported for arch variants"),
+		ExpectedErr: fmt.Errorf("module \"foo_shared\": nocrt is not supported for arch variants"),
 	})
 }
 
 func TestCcLibrarySharedProto(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		blueprint: soongCcProtoPreamble + `cc_library_shared {
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Blueprint: soongCcProtoPreamble + `cc_library_shared {
 	name: "foo",
 	srcs: ["foo.proto"],
 	proto: {
@@ -439,12 +439,12 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "foo_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+			}), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"dynamic_deps":       `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":foo_cc_proto_lite"]`,
 			}),
@@ -453,14 +453,14 @@
 }
 
 func TestCcLibrarySharedUseVersionLib(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		blueprint: soongCcProtoPreamble + `cc_library_shared {
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Blueprint: soongCcProtoPreamble + `cc_library_shared {
         name: "foo",
         use_version_lib: true,
         include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"use_version_lib": "True",
 			}),
 		},
@@ -468,12 +468,12 @@
 }
 
 func TestCcLibrarySharedStubs(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description:                "cc_library_shared stubs",
-		moduleTypeUnderTest:        "cc_library_shared",
-		moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
-		dir:                        "foo/bar",
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_shared stubs",
+		ModuleTypeUnderTest:        "cc_library_shared",
+		ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
+		Dir:                        "foo/bar",
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": `
 cc_library_shared {
 	name: "a",
@@ -483,8 +483,8 @@
 }
 `,
 		},
-		blueprint: soongCcLibraryPreamble,
-		expectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "a", attrNameToString{
+		Blueprint: soongCcLibraryPreamble,
+		ExpectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "a", AttrNameToString{
 			"stubs_symbol_file": `"a.map.txt"`,
 			"stubs_versions": `[
         "28",
@@ -498,11 +498,11 @@
 }
 
 func TestCcLibrarySharedSystemSharedLibsSharedEmpty(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description:                "cc_library_shared system_shared_libs empty shared default",
-		moduleTypeUnderTest:        "cc_library_shared",
-		moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
-		blueprint: soongCcLibrarySharedPreamble + `
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_shared system_shared_libs empty shared default",
+		ModuleTypeUnderTest:        "cc_library_shared",
+		ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
+		Blueprint: soongCcLibrarySharedPreamble + `
 cc_defaults {
     name: "empty_defaults",
     shared: {
@@ -515,18 +515,18 @@
     defaults: ["empty_defaults"],
 }
 `,
-		expectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "empty", attrNameToString{
+		ExpectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "empty", AttrNameToString{
 			"system_dynamic_deps": "[]",
 		})},
 	})
 }
 
 func TestCcLibrarySharedConvertLex(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description:                "cc_library_shared with lex files",
-		moduleTypeUnderTest:        "cc_library_shared",
-		moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_shared with lex files",
+		ModuleTypeUnderTest:        "cc_library_shared",
+		ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
+		Filesystem: map[string]string{
 			"foo.c":   "",
 			"bar.cc":  "",
 			"foo1.l":  "",
@@ -534,29 +534,29 @@
 			"foo2.l":  "",
 			"bar2.ll": "",
 		},
-		blueprint: `cc_library_shared {
+		Blueprint: `cc_library_shared {
 	name: "foo_lib",
 	srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
 	lex: { flags: ["--foo_flags"] },
 	include_build_directory: false,
 	bazel_module: { bp2build_available: true },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("genlex", "foo_lib_genlex_l", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{
 				"srcs": `[
         "foo1.l",
         "foo2.l",
     ]`,
 				"lexopts": `["--foo_flags"]`,
 			}),
-			makeBazelTarget("genlex", "foo_lib_genlex_ll", attrNameToString{
+			makeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{
 				"srcs": `[
         "bar1.ll",
         "bar2.ll",
     ]`,
 				"lexopts": `["--foo_flags"]`,
 			}),
-			makeBazelTarget("cc_library_shared", "foo_lib", attrNameToString{
+			makeBazelTarget("cc_library_shared", "foo_lib", AttrNameToString{
 				"srcs": `[
         "bar.cc",
         ":foo_lib_genlex_ll",
@@ -571,8 +571,8 @@
 }
 
 func TestCcLibrarySharedClangUnknownFlags(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		blueprint: soongCcProtoPreamble + `cc_library_shared {
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Blueprint: soongCcProtoPreamble + `cc_library_shared {
 	name: "foo",
 	conlyflags: ["-a", "-finline-functions"],
 	cflags: ["-b","-finline-functions"],
@@ -580,8 +580,8 @@
 	ldflags: ["-d","-finline-functions", "-e"],
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"conlyflags": `["-a"]`,
 				"copts":      `["-b"]`,
 				"cppflags":   `["-c"]`,
@@ -595,8 +595,8 @@
 }
 
 func TestCCLibraryFlagSpaceSplitting(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		blueprint: soongCcProtoPreamble + `cc_library_shared {
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Blueprint: soongCcProtoPreamble + `cc_library_shared {
 	name: "foo",
 	conlyflags: [ "-include header.h"],
 	cflags: ["-include header.h"],
@@ -604,8 +604,8 @@
 	version_script: "version_script",
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_shared", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
 				"additional_linker_inputs": `["version_script"]`,
 				"conlyflags": `[
         "-include",
diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go
index 36c46a4..ddb7bf9 100644
--- a/bp2build/cc_library_static_conversion_test.go
+++ b/bp2build/cc_library_static_conversion_test.go
@@ -65,18 +65,18 @@
 	ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
 }
 
-func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
+func runCcLibraryStaticTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
 
-	(&tc).moduleTypeUnderTest = "cc_library_static"
-	(&tc).moduleTypeUnderTestFactory = cc.LibraryStaticFactory
-	runBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
+	(&tc).ModuleTypeUnderTest = "cc_library_static"
+	(&tc).ModuleTypeUnderTestFactory = cc.LibraryStaticFactory
+	RunBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
 }
 
 func TestCcLibraryStaticSimple(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static test",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static test",
+		Filesystem: map[string]string{
 			// NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
 			"include_dir_1/include_dir_1_a.h": "",
 			"include_dir_1/include_dir_1_b.h": "",
@@ -96,7 +96,7 @@
 			"implicit_include_1.h": "",
 			"implicit_include_2.h": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_headers {
     name: "header_lib_1",
     export_include_dirs: ["header_lib_1"],
@@ -172,8 +172,8 @@
 
     // TODO: Also support export_header_lib_headers
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"absolute_includes": `[
         "include_dir_1",
         "include_dir_2",
@@ -213,9 +213,9 @@
 }
 
 func TestCcLibraryStaticSubpackage(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static subpackage test",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static subpackage test",
+		Filesystem: map[string]string{
 			// subpackage with subdirectory
 			"subpackage/Android.bp":                         "",
 			"subpackage/subpackage_header.h":                "",
@@ -229,7 +229,7 @@
 			"subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h":          "",
 			"subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: [],
@@ -237,8 +237,8 @@
         "subpackage",
     ],
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"absolute_includes": `["subpackage"]`,
 				"local_includes":    `["."]`,
 			}),
@@ -247,22 +247,22 @@
 }
 
 func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static export include dir",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static export include dir",
+		Filesystem: map[string]string{
 			// subpackage with subdirectory
 			"subpackage/Android.bp":                         "",
 			"subpackage/subpackage_header.h":                "",
 			"subpackage/subdirectory/subdirectory_header.h": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     export_include_dirs: ["subpackage"],
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"export_includes": `["subpackage"]`,
 			}),
 		},
@@ -270,22 +270,22 @@
 }
 
 func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static export system include dir",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static export system include dir",
+		Filesystem: map[string]string{
 			// subpackage with subdirectory
 			"subpackage/Android.bp":                         "",
 			"subpackage/subpackage_header.h":                "",
 			"subpackage/subdirectory/subdirectory_header.h": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     export_system_include_dirs: ["subpackage"],
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"export_system_includes": `["subpackage"]`,
 			}),
 		},
@@ -293,10 +293,10 @@
 }
 
 func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
-		dir:         "subpackage",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
+		Dir:         "subpackage",
+		Filesystem: map[string]string{
 			// subpackage with subdirectory
 			"subpackage/Android.bp": `
 cc_library_static {
@@ -318,9 +318,9 @@
 			"subpackage2/header.h":                       "",
 			"subpackage3/subsubpackage/header.h":         "",
 		},
-		blueprint: soongCcLibraryStaticPreamble,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		Blueprint: soongCcLibraryStaticPreamble,
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"absolute_includes": `[
         "subpackage/subsubpackage",
         "subpackage2",
@@ -336,23 +336,23 @@
 }
 
 func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static include_build_directory disabled",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static include_build_directory disabled",
+		Filesystem: map[string]string{
 			// subpackage with subdirectory
 			"subpackage/Android.bp":                         "",
 			"subpackage/subpackage_header.h":                "",
 			"subpackage/subdirectory/subdirectory_header.h": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
     local_include_dirs: ["subpackage2"],
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"absolute_includes": `["subpackage"]`,
 				"local_includes":    `["subpackage2"]`,
 			}),
@@ -361,9 +361,9 @@
 }
 
 func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static include_build_directory enabled",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static include_build_directory enabled",
+		Filesystem: map[string]string{
 			// subpackage with subdirectory
 			"subpackage/Android.bp":                         "",
 			"subpackage/subpackage_header.h":                "",
@@ -371,15 +371,15 @@
 			"subpackage2/subpackage2_header.h":              "",
 			"subpackage/subdirectory/subdirectory_header.h": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
     local_include_dirs: ["subpackage2"],
     include_build_directory: true,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"absolute_includes": `["subpackage"]`,
 				"local_includes": `[
         "subpackage2",
@@ -391,10 +391,10 @@
 }
 
 func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static arch-specific static_libs",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static arch-specific static_libs",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "static_dep",
     bazel_module: { bp2build_available: false },
@@ -408,8 +408,8 @@
     arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"implementation_deps": `select({
         "//build/bazel/platforms/arch:arm64": [":static_dep"],
         "//conditions:default": [],
@@ -424,10 +424,10 @@
 }
 
 func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static os-specific static_libs",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static os-specific static_libs",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "static_dep",
     bazel_module: { bp2build_available: false },
@@ -441,8 +441,8 @@
     target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"implementation_deps": `select({
         "//build/bazel/platforms/os:android": [":static_dep"],
         "//conditions:default": [],
@@ -457,10 +457,10 @@
 }
 
 func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static base, arch and os-specific static_libs",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static base, arch and os-specific static_libs",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "static_dep",
     bazel_module: { bp2build_available: false },
@@ -485,8 +485,8 @@
     arch: { arm64: { static_libs: ["static_dep4"] } },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"implementation_deps": `[":static_dep"] + select({
         "//build/bazel/platforms/arch:arm64": [":static_dep4"],
         "//conditions:default": [],
@@ -501,22 +501,22 @@
 }
 
 func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static simple exclude_srcs",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static simple exclude_srcs",
+		Filesystem: map[string]string{
 			"common.c":       "",
 			"foo-a.c":        "",
 			"foo-excluded.c": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c", "foo-*.c"],
     exclude_srcs: ["foo-excluded.c"],
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `[
         "common.c",
         "foo-a.c",
@@ -527,21 +527,21 @@
 }
 
 func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static one arch specific srcs",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static one arch specific srcs",
+		Filesystem: map[string]string{
 			"common.c":  "",
 			"foo-arm.c": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c"],
     arch: { arm: { srcs: ["foo-arm.c"] } },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `["common.c"] + select({
         "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
         "//conditions:default": [],
@@ -552,15 +552,15 @@
 }
 
 func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static one arch specific srcs and exclude_srcs",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static one arch specific srcs and exclude_srcs",
+		Filesystem: map[string]string{
 			"common.c":           "",
 			"for-arm.c":          "",
 			"not-for-arm.c":      "",
 			"not-for-anything.c": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c", "not-for-*.c"],
@@ -570,8 +570,8 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `["common.c"] + select({
         "//build/bazel/platforms/arch:arm": ["for-arm.c"],
         "//conditions:default": ["not-for-arm.c"],
@@ -582,16 +582,16 @@
 }
 
 func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static arch specific exclude_srcs for 2 architectures",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static arch specific exclude_srcs for 2 architectures",
+		Filesystem: map[string]string{
 			"common.c":      "",
 			"for-arm.c":     "",
 			"for-x86.c":     "",
 			"not-for-arm.c": "",
 			"not-for-x86.c": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c", "not-for-*.c"],
@@ -602,8 +602,8 @@
     },
     include_build_directory: false,
 } `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `["common.c"] + select({
         "//build/bazel/platforms/arch:arm": [
             "not-for-x86.c",
@@ -624,9 +624,9 @@
 }
 
 func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static arch specific exclude_srcs for 4 architectures",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static arch specific exclude_srcs for 4 architectures",
+		Filesystem: map[string]string{
 			"common.c":             "",
 			"for-arm.c":            "",
 			"for-arm64.c":          "",
@@ -638,7 +638,7 @@
 			"not-for-x86_64.c":     "",
 			"not-for-everything.c": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c", "not-for-*.c"],
@@ -651,8 +651,8 @@
   },
     include_build_directory: false,
 } `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `["common.c"] + select({
         "//build/bazel/platforms/arch:arm": [
             "not-for-arm64.c",
@@ -691,14 +691,14 @@
 }
 
 func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static one arch empty",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static one arch empty",
+		Filesystem: map[string]string{
 			"common.cc":       "",
 			"foo-no-arm.cc":   "",
 			"foo-excluded.cc": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.cc", "foo-*.cc"],
@@ -708,8 +708,8 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs": `["common.cc"] + select({
         "//build/bazel/platforms/arch:arm": [],
         "//conditions:default": ["foo-no-arm.cc"],
@@ -720,15 +720,15 @@
 }
 
 func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static one arch empty other set",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static one arch empty other set",
+		Filesystem: map[string]string{
 			"common.cc":       "",
 			"foo-no-arm.cc":   "",
 			"x86-only.cc":     "",
 			"foo-excluded.cc": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.cc", "foo-*.cc"],
@@ -739,8 +739,8 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs": `["common.cc"] + select({
         "//build/bazel/platforms/arch:arm": [],
         "//build/bazel/platforms/arch:x86": [
@@ -755,10 +755,10 @@
 }
 
 func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static multiple dep same name panic",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static multiple dep same name panic",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "static_dep",
     bazel_module: { bp2build_available: false },
@@ -768,8 +768,8 @@
     static_libs: ["static_dep", "static_dep"],
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"implementation_deps": `[":static_dep"]`,
 			}),
 		},
@@ -777,14 +777,14 @@
 }
 
 func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static 1 multilib srcs and exclude_srcs",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static 1 multilib srcs and exclude_srcs",
+		Filesystem: map[string]string{
 			"common.c":        "",
 			"for-lib32.c":     "",
 			"not-for-lib32.c": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c", "not-for-*.c"],
@@ -793,8 +793,8 @@
     },
     include_build_directory: false,
 } `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `["common.c"] + select({
         "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
         "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
@@ -806,16 +806,16 @@
 }
 
 func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static 2 multilib srcs and exclude_srcs",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static 2 multilib srcs and exclude_srcs",
+		Filesystem: map[string]string{
 			"common.c":        "",
 			"for-lib32.c":     "",
 			"for-lib64.c":     "",
 			"not-for-lib32.c": "",
 			"not-for-lib64.c": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c", "not-for-*.c"],
@@ -825,8 +825,8 @@
     },
     include_build_directory: false,
 } `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `["common.c"] + select({
         "//build/bazel/platforms/arch:arm": [
             "not-for-lib64.c",
@@ -855,9 +855,9 @@
 }
 
 func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static arch and multilib srcs and exclude_srcs",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static arch and multilib srcs and exclude_srcs",
+		Filesystem: map[string]string{
 			"common.c":             "",
 			"for-arm.c":            "",
 			"for-arm64.c":          "",
@@ -873,7 +873,7 @@
 			"not-for-lib64.c":      "",
 			"not-for-everything.c": "",
 		},
-		blueprint: soongCcLibraryStaticPreamble + `
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
    name: "foo_static",
    srcs: ["common.c", "not-for-*.c"],
@@ -890,8 +890,8 @@
    },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `["common.c"] + select({
         "//build/bazel/platforms/arch:arm": [
             "not-for-arm64.c",
@@ -940,8 +940,8 @@
 }
 
 func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Blueprint: soongCcLibraryStaticPreamble + `
 genrule {
     name: "generated_hdr",
     cmd: "nothing to see here",
@@ -961,8 +961,8 @@
     export_generated_headers: ["export_generated_hdr"],
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"export_includes": `["."]`,
 				"local_includes":  `["."]`,
 				"hdrs":            `[":export_generated_hdr"]`,
@@ -984,9 +984,9 @@
 }
 
 func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static arch srcs/exclude_srcs with generated files",
-		filesystem: map[string]string{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static arch srcs/exclude_srcs with generated files",
+		Filesystem: map[string]string{
 			"common.cpp":             "",
 			"for-x86.cpp":            "",
 			"not-for-x86.cpp":        "",
@@ -997,7 +997,7 @@
 				simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
 				simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
 		},
-		blueprint: soongCcLibraryStaticPreamble +
+		Blueprint: soongCcLibraryStaticPreamble +
 			simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
 			simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
 			simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
@@ -1029,8 +1029,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs": `[
         "common.cpp",
         ":generated_src",
@@ -1061,10 +1061,10 @@
 }
 
 func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
 
-		description: "cc_library_static complex GetTargetProperties",
-		blueprint: soongCcLibraryStaticPreamble + `
+		Description: "cc_library_static complex GetTargetProperties",
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     target: {
@@ -1092,8 +1092,8 @@
     },
     include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"srcs_c": `select({
         "//build/bazel/platforms/os:android": ["android_src.c"],
         "//conditions:default": [],
@@ -1112,9 +1112,9 @@
 }
 
 func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static product variable selects",
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static product variable selects",
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c"],
@@ -1131,8 +1131,8 @@
     },
     include_build_directory: false,
 } `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"copts": `select({
         "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
         "//conditions:default": [],
@@ -1150,10 +1150,10 @@
 }
 
 func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static arch-specific product variable selects",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static arch-specific product variable selects",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.c"],
@@ -1191,8 +1191,8 @@
     },
     include_build_directory: false,
 } `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"copts": `select({
         "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
         "//conditions:default": [],
@@ -1216,10 +1216,10 @@
 }
 
 func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static product variable string replacement",
-		filesystem:  map[string]string{},
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static product variable string replacement",
+		Filesystem:  map[string]string{},
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "foo_static",
     srcs: ["common.S"],
@@ -1230,8 +1230,8 @@
     },
     include_build_directory: false,
 } `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
 				"asflags": `select({
         "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
         "//conditions:default": [],
@@ -1243,17 +1243,17 @@
 }
 
 func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static system_shared_lib empty root",
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static system_shared_lib empty root",
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "root_empty",
     system_shared_libs: [],
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "root_empty", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "root_empty", AttrNameToString{
 				"system_dynamic_deps": `[]`,
 			}),
 		},
@@ -1261,9 +1261,9 @@
 }
 
 func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static system_shared_lib empty static default",
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static system_shared_lib empty static default",
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_defaults {
     name: "static_empty_defaults",
     static: {
@@ -1276,8 +1276,8 @@
     defaults: ["static_empty_defaults"],
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "static_empty", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "static_empty", AttrNameToString{
 				"system_dynamic_deps": `[]`,
 			}),
 		},
@@ -1285,9 +1285,9 @@
 }
 
 func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static system_shared_lib empty for bionic variant",
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static system_shared_lib empty for bionic variant",
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "target_bionic_empty",
     target: {
@@ -1298,8 +1298,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "target_bionic_empty", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "target_bionic_empty", AttrNameToString{
 				"system_dynamic_deps": `[]`,
 			}),
 		},
@@ -1311,9 +1311,9 @@
 	// The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
 	// only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
 	// b/195791252 tracks the fix.
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static system_shared_lib empty for linux_bionic variant",
-		blueprint: soongCcLibraryStaticPreamble + `
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static system_shared_lib empty for linux_bionic variant",
+		Blueprint: soongCcLibraryStaticPreamble + `
 cc_library_static {
     name: "target_linux_bionic_empty",
     target: {
@@ -1324,8 +1324,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "target_linux_bionic_empty", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "target_linux_bionic_empty", AttrNameToString{
 				"system_dynamic_deps": `[]`,
 			}),
 		},
@@ -1333,9 +1333,9 @@
 }
 
 func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static system_shared_libs set for bionic variant",
-		blueprint: soongCcLibraryStaticPreamble +
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static system_shared_libs set for bionic variant",
+		Blueprint: soongCcLibraryStaticPreamble +
 			simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
 cc_library_static {
     name: "target_bionic",
@@ -1347,8 +1347,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "target_bionic", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "target_bionic", AttrNameToString{
 				"system_dynamic_deps": `select({
         "//build/bazel/platforms/os:android": [":libc"],
         "//build/bazel/platforms/os:linux_bionic": [":libc"],
@@ -1360,9 +1360,9 @@
 }
 
 func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
-		blueprint: soongCcLibraryStaticPreamble +
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
+		Blueprint: soongCcLibraryStaticPreamble +
 			simpleModuleDoNotConvertBp2build("cc_library", "libc") +
 			simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
 cc_library_static {
@@ -1376,8 +1376,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "target_linux_bionic", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "target_linux_bionic", AttrNameToString{
 				"system_dynamic_deps": `[":libc"] + select({
         "//build/bazel/platforms/os:linux_bionic": [":libm"],
         "//conditions:default": [],
@@ -1388,9 +1388,9 @@
 }
 
 func TestCcLibrarystatic_SystemSharedLibUsedAsDep(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		description: "cc_library_static system_shared_lib empty for linux_bionic variant",
-		blueprint: soongCcLibraryStaticPreamble +
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Description: "cc_library_static system_shared_lib empty for linux_bionic variant",
+		Blueprint: soongCcLibraryStaticPreamble +
 			simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
 cc_library_static {
     name: "used_in_bionic_oses",
@@ -1418,26 +1418,26 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "all", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "all", AttrNameToString{
 				"implementation_dynamic_deps": `select({
         "//build/bazel/platforms/os:android": [],
         "//build/bazel/platforms/os:linux_bionic": [],
         "//conditions:default": [":libc"],
     })`,
 			}),
-			makeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", attrNameToString{
+			makeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", AttrNameToString{
 				"implementation_dynamic_deps": `[":libc"]`,
 				"system_dynamic_deps":         `[]`,
 			}),
-			makeBazelTarget("cc_library_static", "used_in_bionic_oses", attrNameToString{}),
+			makeBazelTarget("cc_library_static", "used_in_bionic_oses", AttrNameToString{}),
 		},
 	})
 }
 
 func TestCcLibraryStaticProto(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		blueprint: soongCcProtoPreamble + `cc_library_static {
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Blueprint: soongCcProtoPreamble + `cc_library_static {
 	name: "foo",
 	srcs: ["foo.proto"],
 	proto: {
@@ -1445,12 +1445,12 @@
 	},
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "foo_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
 				"srcs": `["foo.proto"]`,
-			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
+			}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
 				"deps": `[":foo_proto"]`,
-			}), makeBazelTarget("cc_library_static", "foo", attrNameToString{
+			}), makeBazelTarget("cc_library_static", "foo", AttrNameToString{
 				"deps":               `[":libprotobuf-cpp-lite"]`,
 				"whole_archive_deps": `[":foo_cc_proto_lite"]`,
 			}),
@@ -1459,14 +1459,14 @@
 }
 
 func TestCcLibraryStaticUseVersionLib(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		blueprint: soongCcProtoPreamble + `cc_library_static {
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Blueprint: soongCcProtoPreamble + `cc_library_static {
 	name: "foo",
 	use_version_lib: true,
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo", AttrNameToString{
 				"use_version_lib": "True",
 			}),
 		},
@@ -1474,16 +1474,16 @@
 }
 
 func TestCcLibraryStaticStdInFlags(t *testing.T) {
-	runCcLibraryStaticTestCase(t, bp2buildTestCase{
-		blueprint: soongCcProtoPreamble + `cc_library_static {
+	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+		Blueprint: soongCcProtoPreamble + `cc_library_static {
 	name: "foo",
 	cflags: ["-std=candcpp"],
 	conlyflags: ["-std=conly"],
 	cppflags: ["-std=cpp"],
 	include_build_directory: false,
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_library_static", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_library_static", "foo", AttrNameToString{
 				"conlyflags": `["-std=conly"]`,
 				"cppflags":   `["-std=cpp"]`,
 			}),
@@ -1495,64 +1495,64 @@
 	testCases := []struct {
 		desc string
 		prop string
-		attr attrNameToString
+		attr AttrNameToString
 	}{
 		{
 			desc: "c++_shared deduped to libc++",
 			prop: `stl: "c++_shared",`,
-			attr: attrNameToString{
+			attr: AttrNameToString{
 				"stl": `"libc++"`,
 			},
 		},
 		{
 			desc: "libc++ to libc++",
 			prop: `stl: "libc++",`,
-			attr: attrNameToString{
+			attr: AttrNameToString{
 				"stl": `"libc++"`,
 			},
 		},
 		{
 			desc: "c++_static to libc++_static",
 			prop: `stl: "c++_static",`,
-			attr: attrNameToString{
+			attr: AttrNameToString{
 				"stl": `"libc++_static"`,
 			},
 		},
 		{
 			desc: "libc++_static to libc++_static",
 			prop: `stl: "libc++_static",`,
-			attr: attrNameToString{
+			attr: AttrNameToString{
 				"stl": `"libc++_static"`,
 			},
 		},
 		{
 			desc: "system to system",
 			prop: `stl: "system",`,
-			attr: attrNameToString{
+			attr: AttrNameToString{
 				"stl": `"system"`,
 			},
 		},
 		{
 			desc: "none to none",
 			prop: `stl: "none",`,
-			attr: attrNameToString{
+			attr: AttrNameToString{
 				"stl": `"none"`,
 			},
 		},
 		{
 			desc: "empty to empty",
-			attr: attrNameToString{},
+			attr: AttrNameToString{},
 		},
 	}
 	for _, tc := range testCases {
 		t.Run(tc.desc, func(*testing.T) {
-			runCcLibraryStaticTestCase(t, bp2buildTestCase{
-				blueprint: fmt.Sprintf(`cc_library_static {
+			runCcLibraryStaticTestCase(t, Bp2buildTestCase{
+				Blueprint: fmt.Sprintf(`cc_library_static {
 	name: "foo",
 	include_build_directory: false,
 	%s
 }`, tc.prop),
-				expectedBazelTargets: []string{
+				ExpectedBazelTargets: []string{
 					makeBazelTarget("cc_library_static", "foo", tc.attr),
 				},
 			})
diff --git a/bp2build/cc_object_conversion_test.go b/bp2build/cc_object_conversion_test.go
index 52688d9..37d5580 100644
--- a/bp2build/cc_object_conversion_test.go
+++ b/bp2build/cc_object_conversion_test.go
@@ -26,23 +26,23 @@
 	ctx.RegisterModuleType("cc_defaults", func() android.Module { return cc.DefaultsFactory() })
 }
 
-func runCcObjectTestCase(t *testing.T, tc bp2buildTestCase) {
+func runCcObjectTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "cc_object"
-	(&tc).moduleTypeUnderTestFactory = cc.ObjectFactory
-	runBp2BuildTestCase(t, registerCcObjectModuleTypes, tc)
+	(&tc).ModuleTypeUnderTest = "cc_object"
+	(&tc).ModuleTypeUnderTestFactory = cc.ObjectFactory
+	RunBp2BuildTestCase(t, registerCcObjectModuleTypes, tc)
 }
 
 func TestCcObjectSimple(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "simple cc_object generates cc_object with include header dep",
-		filesystem: map[string]string{
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "simple cc_object generates cc_object with include header dep",
+		Filesystem: map[string]string{
 			"a/b/foo.h":     "",
 			"a/b/bar.h":     "",
 			"a/b/exclude.c": "",
 			"a/b/c.c":       "",
 		},
-		blueprint: `cc_object {
+		Blueprint: `cc_object {
     name: "foo",
     local_include_dirs: ["include"],
     system_shared_libs: [],
@@ -59,8 +59,8 @@
     min_sdk_version: "29",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts": `[
         "-fno-addrsig",
         "-Wno-gcc-compat",
@@ -73,16 +73,16 @@
     ]`,
 				"srcs":                `["a/b/c.c"]`,
 				"system_dynamic_deps": `[]`,
-        "sdk_version": `"current"`,
-        "min_sdk_version": `"29"`,
+				"sdk_version":         `"current"`,
+				"min_sdk_version":     `"29"`,
 			}),
 		},
 	})
 }
 
 func TestCcObjectDefaults(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		blueprint: `cc_object {
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Blueprint: `cc_object {
     name: "foo",
     system_shared_libs: [],
     srcs: [
@@ -105,8 +105,8 @@
     ],
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts": `[
         "-Werror",
         "-fno-addrsig",
@@ -119,13 +119,13 @@
 }
 
 func TestCcObjectCcObjetDepsInObjs(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "cc_object with cc_object deps in objs props",
-		filesystem: map[string]string{
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "cc_object with cc_object deps in objs props",
+		Filesystem: map[string]string{
 			"a/b/c.c": "",
 			"x/y/z.c": "",
 		},
-		blueprint: `cc_object {
+		Blueprint: `cc_object {
     name: "foo",
     system_shared_libs: [],
     srcs: ["a/b/c.c"],
@@ -140,12 +140,12 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "bar", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "bar", AttrNameToString{
 				"copts":               `["-fno-addrsig"]`,
 				"srcs":                `["x/y/z.c"]`,
 				"system_dynamic_deps": `[]`,
-			}), makeBazelTarget("cc_object", "foo", attrNameToString{
+			}), makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts":               `["-fno-addrsig"]`,
 				"deps":                `[":bar"]`,
 				"srcs":                `["a/b/c.c"]`,
@@ -156,21 +156,21 @@
 }
 
 func TestCcObjectIncludeBuildDirFalse(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "cc_object with include_build_dir: false",
-		filesystem: map[string]string{
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "cc_object with include_build_dir: false",
+		Filesystem: map[string]string{
 			"a/b/c.c": "",
 			"x/y/z.c": "",
 		},
-		blueprint: `cc_object {
+		Blueprint: `cc_object {
     name: "foo",
     system_shared_libs: [],
     srcs: ["a/b/c.c"],
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts":               `["-fno-addrsig"]`,
 				"srcs":                `["a/b/c.c"]`,
 				"system_dynamic_deps": `[]`,
@@ -180,9 +180,9 @@
 }
 
 func TestCcObjectProductVariable(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "cc_object with product variable",
-		blueprint: `cc_object {
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "cc_object with product variable",
+		Blueprint: `cc_object {
     name: "foo",
     system_shared_libs: [],
     include_build_directory: false,
@@ -194,8 +194,8 @@
     srcs: ["src.S"],
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"asflags": `select({
         "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
         "//conditions:default": [],
@@ -209,9 +209,9 @@
 }
 
 func TestCcObjectCflagsOneArch(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "cc_object setting cflags for one arch",
-		blueprint: `cc_object {
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "cc_object setting cflags for one arch",
+		Blueprint: `cc_object {
     name: "foo",
     system_shared_libs: [],
     srcs: ["a.cpp"],
@@ -226,8 +226,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts": `["-fno-addrsig"] + select({
         "//build/bazel/platforms/arch:x86": ["-fPIC"],
         "//conditions:default": [],
@@ -243,9 +243,9 @@
 }
 
 func TestCcObjectCflagsFourArch(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "cc_object setting cflags for 4 architectures",
-		blueprint: `cc_object {
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "cc_object setting cflags for 4 architectures",
+		Blueprint: `cc_object {
     name: "foo",
     system_shared_libs: [],
     srcs: ["base.cpp"],
@@ -270,8 +270,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts": `["-fno-addrsig"] + select({
         "//build/bazel/platforms/arch:arm": ["-Wall"],
         "//build/bazel/platforms/arch:arm64": ["-Wall"],
@@ -293,17 +293,17 @@
 }
 
 func TestCcObjectLinkerScript(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "cc_object setting linker_script",
-		blueprint: `cc_object {
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "cc_object setting linker_script",
+		Blueprint: `cc_object {
     name: "foo",
     srcs: ["base.cpp"],
     linker_script: "bunny.lds",
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts":         `["-fno-addrsig"]`,
 				"linker_script": `"bunny.lds"`,
 				"srcs":          `["base.cpp"]`,
@@ -313,9 +313,9 @@
 }
 
 func TestCcObjectDepsAndLinkerScriptSelects(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "cc_object setting deps and linker_script across archs",
-		blueprint: `cc_object {
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "cc_object setting deps and linker_script across archs",
+		Blueprint: `cc_object {
     name: "foo",
     srcs: ["base.cpp"],
     arch: {
@@ -359,8 +359,8 @@
     bazel_module: { bp2build_available: false },
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts": `["-fno-addrsig"]`,
 				"deps": `select({
         "//build/bazel/platforms/arch:arm": [":arm_obj"],
@@ -381,9 +381,9 @@
 }
 
 func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) {
-	runCcObjectTestCase(t, bp2buildTestCase{
-		description: "cc_object setting srcs based on linux and bionic archs",
-		blueprint: `cc_object {
+	runCcObjectTestCase(t, Bp2buildTestCase{
+		Description: "cc_object setting srcs based on linux and bionic archs",
+		Blueprint: `cc_object {
     name: "foo",
     srcs: ["base.cpp"],
     target: {
@@ -400,8 +400,8 @@
     include_build_directory: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("cc_object", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("cc_object", "foo", AttrNameToString{
 				"copts": `["-fno-addrsig"]`,
 				"srcs": `["base.cpp"] + select({
         "//build/bazel/platforms/os_arch:android_arm64": [
diff --git a/bp2build/cc_prebuilt_library_conversion_test.go b/bp2build/cc_prebuilt_library_conversion_test.go
index 3cf8969..74ad005 100644
--- a/bp2build/cc_prebuilt_library_conversion_test.go
+++ b/bp2build/cc_prebuilt_library_conversion_test.go
@@ -22,24 +22,24 @@
 
 func TestPrebuiltLibraryStaticAndSharedSimple(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library static and shared simple",
-			moduleTypeUnderTest:        "cc_prebuilt_library",
-			moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library static and shared simple",
+			ModuleTypeUnderTest:        "cc_prebuilt_library",
+			ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library {
 	name: "libtest",
 	srcs: ["libf.so"],
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{
 					"static_library": `"libf.so"`,
 				}),
-				makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{
+				makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
 					"shared_library": `"libf.so"`,
 				}),
 			},
@@ -48,15 +48,15 @@
 
 func TestPrebuiltLibraryWithArchVariance(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library with arch variance",
-			moduleTypeUnderTest:        "cc_prebuilt_library",
-			moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library with arch variance",
+			ModuleTypeUnderTest:        "cc_prebuilt_library",
+			ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 				"libg.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library {
 	name: "libtest",
 	arch: {
@@ -65,15 +65,15 @@
 	},
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{
 					"static_library": `select({
         "//build/bazel/platforms/arch:arm": "libg.so",
         "//build/bazel/platforms/arch:arm64": "libf.so",
         "//conditions:default": None,
     })`,
 				}),
-				makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{
+				makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
 					"shared_library": `select({
         "//build/bazel/platforms/arch:arm": "libg.so",
         "//build/bazel/platforms/arch:arm64": "libf.so",
@@ -86,16 +86,16 @@
 
 func TestPrebuiltLibraryAdditionalAttrs(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library additional attributes",
-			moduleTypeUnderTest:        "cc_prebuilt_library",
-			moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library additional attributes",
+			ModuleTypeUnderTest:        "cc_prebuilt_library",
+			ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so":    "",
 				"testdir/1/": "",
 				"testdir/2/": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library {
 	name: "libtest",
 	srcs: ["libf.so"],
@@ -103,14 +103,14 @@
 	export_system_include_dirs: ["testdir/2/"],
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{
 					"static_library":         `"libf.so"`,
 					"export_includes":        `["testdir/1/"]`,
 					"export_system_includes": `["testdir/2/"]`,
 				}),
 				// TODO(b/229374533): When fixed, update this test
-				makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{
+				makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
 					"shared_library": `"libf.so"`,
 				}),
 			},
@@ -119,15 +119,15 @@
 
 func TestPrebuiltLibrarySharedStanzaFails(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library with shared stanza fails because multiple sources",
-			moduleTypeUnderTest:        "cc_prebuilt_library",
-			moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library with shared stanza fails because multiple sources",
+			ModuleTypeUnderTest:        "cc_prebuilt_library",
+			ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 				"libg.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library {
 	name: "libtest",
 	srcs: ["libf.so"],
@@ -136,21 +136,21 @@
 	},
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedErr: fmt.Errorf("Expected at most one source file"),
+			ExpectedErr: fmt.Errorf("Expected at most one source file"),
 		})
 }
 
 func TestPrebuiltLibraryStaticStanzaFails(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library with static stanza fails because multiple sources",
-			moduleTypeUnderTest:        "cc_prebuilt_library",
-			moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library with static stanza fails because multiple sources",
+			ModuleTypeUnderTest:        "cc_prebuilt_library",
+			ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 				"libg.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library {
 	name: "libtest",
 	srcs: ["libf.so"],
@@ -159,21 +159,21 @@
 	},
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedErr: fmt.Errorf("Expected at most one source file"),
+			ExpectedErr: fmt.Errorf("Expected at most one source file"),
 		})
 }
 
 func TestPrebuiltLibrarySharedAndStaticStanzas(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library with both shared and static stanzas",
-			moduleTypeUnderTest:        "cc_prebuilt_library",
-			moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library with both shared and static stanzas",
+			ModuleTypeUnderTest:        "cc_prebuilt_library",
+			ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 				"libg.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library {
 	name: "libtest",
 	static: {
@@ -184,11 +184,11 @@
 	},
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{
 					"static_library": `"libf.so"`,
 				}),
-				makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{
+				makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
 					"shared_library": `"libg.so"`,
 				}),
 			},
diff --git a/bp2build/cc_prebuilt_library_shared_test.go b/bp2build/cc_prebuilt_library_shared_test.go
index 57905e5..bcf0ce2 100644
--- a/bp2build/cc_prebuilt_library_shared_test.go
+++ b/bp2build/cc_prebuilt_library_shared_test.go
@@ -9,21 +9,21 @@
 
 func TestSharedPrebuiltLibrary(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library shared simple",
-			moduleTypeUnderTest:        "cc_prebuilt_library_shared",
-			moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library shared simple",
+			ModuleTypeUnderTest:        "cc_prebuilt_library_shared",
+			ModuleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library_shared {
 	name: "libtest",
 	srcs: ["libf.so"],
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
 					"shared_library": `"libf.so"`,
 				}),
 			},
@@ -32,15 +32,15 @@
 
 func TestSharedPrebuiltLibraryWithArchVariance(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library shared with arch variance",
-			moduleTypeUnderTest:        "cc_prebuilt_library_shared",
-			moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library shared with arch variance",
+			ModuleTypeUnderTest:        "cc_prebuilt_library_shared",
+			ModuleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 				"libg.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library_shared {
 	name: "libtest",
 	arch: {
@@ -49,8 +49,8 @@
 	},
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
 					"shared_library": `select({
         "//build/bazel/platforms/arch:arm": "libg.so",
         "//build/bazel/platforms/arch:arm64": "libf.so",
@@ -63,15 +63,15 @@
 
 func TestSharedPrebuiltLibrarySharedStanzaFails(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library shared with shared stanza fails because multiple sources",
-			moduleTypeUnderTest:        "cc_prebuilt_library_shared",
-			moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library shared with shared stanza fails because multiple sources",
+			ModuleTypeUnderTest:        "cc_prebuilt_library_shared",
+			ModuleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 				"libg.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library_shared {
 	name: "libtest",
 	srcs: ["libf.so"],
@@ -80,6 +80,6 @@
 	},
 	bazel_module: { bp2build_available: true},
 }`,
-			expectedErr: fmt.Errorf("Expected at most one source file"),
+			ExpectedErr: fmt.Errorf("Expected at most one source file"),
 		})
 }
diff --git a/bp2build/cc_prebuilt_library_static_test.go b/bp2build/cc_prebuilt_library_static_test.go
index 59839c8..7498e50 100644
--- a/bp2build/cc_prebuilt_library_static_test.go
+++ b/bp2build/cc_prebuilt_library_static_test.go
@@ -22,21 +22,21 @@
 
 func TestStaticPrebuiltLibrary(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library static simple",
-			moduleTypeUnderTest:        "cc_prebuilt_library_static",
-			moduleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library static simple",
+			ModuleTypeUnderTest:        "cc_prebuilt_library_static",
+			ModuleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library_static {
 	name: "libtest",
 	srcs: ["libf.so"],
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("prebuilt_library_static", "libtest", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("prebuilt_library_static", "libtest", AttrNameToString{
 					"static_library": `"libf.so"`,
 				}),
 			},
@@ -45,15 +45,15 @@
 
 func TestStaticPrebuiltLibraryWithArchVariance(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library static with arch variance",
-			moduleTypeUnderTest:        "cc_prebuilt_library_static",
-			moduleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library static with arch variance",
+			ModuleTypeUnderTest:        "cc_prebuilt_library_static",
+			ModuleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 				"libg.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library_static {
 	name: "libtest",
 	arch: {
@@ -62,8 +62,8 @@
 	},
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedBazelTargets: []string{
-				makeBazelTarget("prebuilt_library_static", "libtest", attrNameToString{
+			ExpectedBazelTargets: []string{
+				makeBazelTarget("prebuilt_library_static", "libtest", AttrNameToString{
 					"static_library": `select({
         "//build/bazel/platforms/arch:arm": "libg.so",
         "//build/bazel/platforms/arch:arm64": "libf.so",
@@ -76,15 +76,15 @@
 
 func TestStaticPrebuiltLibraryStaticStanzaFails(t *testing.T) {
 	runBp2BuildTestCaseSimple(t,
-		bp2buildTestCase{
-			description:                "prebuilt library with static stanza fails because multiple sources",
-			moduleTypeUnderTest:        "cc_prebuilt_library_static",
-			moduleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
-			filesystem: map[string]string{
+		Bp2buildTestCase{
+			Description:                "prebuilt library with static stanza fails because multiple sources",
+			ModuleTypeUnderTest:        "cc_prebuilt_library_static",
+			ModuleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
+			Filesystem: map[string]string{
 				"libf.so": "",
 				"libg.so": "",
 			},
-			blueprint: `
+			Blueprint: `
 cc_prebuilt_library_static {
 	name: "libtest",
 	srcs: ["libf.so"],
@@ -93,16 +93,16 @@
 	},
 	bazel_module: { bp2build_available: true },
 }`,
-			expectedErr: fmt.Errorf("Expected at most one source file"),
+			ExpectedErr: fmt.Errorf("Expected at most one source file"),
 		})
 }
 
 func TestCcLibraryStaticConvertLex(t *testing.T) {
-	runCcLibrarySharedTestCase(t, bp2buildTestCase{
-		description:                "cc_library_static with lex files",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		filesystem: map[string]string{
+	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
+		Description:                "cc_library_static with lex files",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Filesystem: map[string]string{
 			"foo.c":   "",
 			"bar.cc":  "",
 			"foo1.l":  "",
@@ -110,29 +110,29 @@
 			"foo2.l":  "",
 			"bar2.ll": "",
 		},
-		blueprint: `cc_library_static {
+		Blueprint: `cc_library_static {
 	name: "foo_lib",
 	srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
 	lex: { flags: ["--foo_flags"] },
 	include_build_directory: false,
 	bazel_module: { bp2build_available: true },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("genlex", "foo_lib_genlex_l", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{
 				"srcs": `[
         "foo1.l",
         "foo2.l",
     ]`,
 				"lexopts": `["--foo_flags"]`,
 			}),
-			makeBazelTarget("genlex", "foo_lib_genlex_ll", attrNameToString{
+			makeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{
 				"srcs": `[
         "bar1.ll",
         "bar2.ll",
     ]`,
 				"lexopts": `["--foo_flags"]`,
 			}),
-			makeBazelTarget("cc_library_static", "foo_lib", attrNameToString{
+			makeBazelTarget("cc_library_static", "foo_lib", AttrNameToString{
 				"srcs": `[
         "bar.cc",
         ":foo_lib_genlex_ll",
diff --git a/bp2build/filegroup_conversion_test.go b/bp2build/filegroup_conversion_test.go
index b43cf53..b598b85 100644
--- a/bp2build/filegroup_conversion_test.go
+++ b/bp2build/filegroup_conversion_test.go
@@ -21,38 +21,38 @@
 	"testing"
 )
 
-func runFilegroupTestCase(t *testing.T, tc bp2buildTestCase) {
+func runFilegroupTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "filegroup"
-	(&tc).moduleTypeUnderTestFactory = android.FileGroupFactory
-	runBp2BuildTestCase(t, registerFilegroupModuleTypes, tc)
+	(&tc).ModuleTypeUnderTest = "filegroup"
+	(&tc).ModuleTypeUnderTestFactory = android.FileGroupFactory
+	RunBp2BuildTestCase(t, registerFilegroupModuleTypes, tc)
 }
 
 func registerFilegroupModuleTypes(ctx android.RegistrationContext) {}
 
 func TestFilegroupSameNameAsFile_OneFile(t *testing.T) {
-	runFilegroupTestCase(t, bp2buildTestCase{
-		description: "filegroup - same name as file, with one file",
-		filesystem:  map[string]string{},
-		blueprint: `
+	runFilegroupTestCase(t, Bp2buildTestCase{
+		Description: "filegroup - same name as file, with one file",
+		Filesystem:  map[string]string{},
+		Blueprint: `
 filegroup {
     name: "foo",
     srcs: ["foo"],
 }
 `,
-		expectedBazelTargets: []string{}})
+		ExpectedBazelTargets: []string{}})
 }
 
 func TestFilegroupSameNameAsFile_MultipleFiles(t *testing.T) {
-	runFilegroupTestCase(t, bp2buildTestCase{
-		description: "filegroup - same name as file, with multiple files",
-		filesystem:  map[string]string{},
-		blueprint: `
+	runFilegroupTestCase(t, Bp2buildTestCase{
+		Description: "filegroup - same name as file, with multiple files",
+		Filesystem:  map[string]string{},
+		Blueprint: `
 filegroup {
 	name: "foo",
 	srcs: ["foo", "bar"],
 }
 `,
-		expectedErr: fmt.Errorf("filegroup 'foo' cannot contain a file with the same name"),
+		ExpectedErr: fmt.Errorf("filegroup 'foo' cannot contain a file with the same name"),
 	})
 }
diff --git a/bp2build/genrule_conversion_test.go b/bp2build/genrule_conversion_test.go
index 4504892..a8bfecd 100644
--- a/bp2build/genrule_conversion_test.go
+++ b/bp2build/genrule_conversion_test.go
@@ -27,11 +27,11 @@
 	ctx.RegisterModuleType("genrule_defaults", func() android.Module { return genrule.DefaultsFactory() })
 }
 
-func runGenruleTestCase(t *testing.T, tc bp2buildTestCase) {
+func runGenruleTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "genrule"
-	(&tc).moduleTypeUnderTestFactory = genrule.GenRuleFactory
-	runBp2BuildTestCase(t, registerGenruleModuleTypes, tc)
+	(&tc).ModuleTypeUnderTest = "genrule"
+	(&tc).ModuleTypeUnderTestFactory = genrule.GenRuleFactory
+	RunBp2BuildTestCase(t, registerGenruleModuleTypes, tc)
 }
 
 func otherGenruleBp(genruleTarget string) map[string]string {
@@ -101,7 +101,7 @@
 }`
 
 	for _, tc := range testCases {
-		moduleAttrs := attrNameToString{
+		moduleAttrs := AttrNameToString{
 			"cmd":   fmt.Sprintf(`"$(location :foo.tool) --genDir=%s arg $(SRCS) $(OUTS)"`, tc.genDir),
 			"outs":  `["foo.out"]`,
 			"srcs":  `["foo.in"]`,
@@ -113,12 +113,12 @@
 		}
 
 		t.Run(tc.moduleType, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
-				bp2buildTestCase{
-					moduleTypeUnderTest:        tc.moduleType,
-					moduleTypeUnderTestFactory: tc.factory,
-					blueprint:                  fmt.Sprintf(bp, tc.moduleType, tc.moduleType),
-					expectedBazelTargets:       expectedBazelTargets,
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
+				Bp2buildTestCase{
+					ModuleTypeUnderTest:        tc.moduleType,
+					ModuleTypeUnderTestFactory: tc.factory,
+					Blueprint:                  fmt.Sprintf(bp, tc.moduleType, tc.moduleType),
+					ExpectedBazelTargets:       expectedBazelTargets,
 				})
 		})
 	}
@@ -169,13 +169,13 @@
 }`
 
 	for _, tc := range testCases {
-		fooAttrs := attrNameToString{
+		fooAttrs := AttrNameToString{
 			"cmd":   `"$(locations :foo.tools) -s $(OUTS) $(SRCS)"`,
 			"outs":  `["foo.out"]`,
 			"srcs":  `["foo.in"]`,
 			"tools": `[":foo.tools"]`,
 		}
-		fooToolsAttrs := attrNameToString{
+		fooToolsAttrs := AttrNameToString{
 			"cmd": `"cp $(SRCS) $(OUTS)"`,
 			"outs": `[
         "foo_tool.out",
@@ -190,12 +190,12 @@
 		}
 
 		t.Run(tc.moduleType, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
-				bp2buildTestCase{
-					moduleTypeUnderTest:        tc.moduleType,
-					moduleTypeUnderTestFactory: tc.factory,
-					blueprint:                  fmt.Sprintf(bp, tc.moduleType, tc.moduleType),
-					expectedBazelTargets:       expectedBazelTargets,
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
+				Bp2buildTestCase{
+					ModuleTypeUnderTest:        tc.moduleType,
+					ModuleTypeUnderTestFactory: tc.factory,
+					Blueprint:                  fmt.Sprintf(bp, tc.moduleType, tc.moduleType),
+					ExpectedBazelTargets:       expectedBazelTargets,
 				})
 		})
 	}
@@ -238,7 +238,7 @@
 }`
 
 	for _, tc := range testCases {
-		moduleAttrs := attrNameToString{
+		moduleAttrs := AttrNameToString{
 			"cmd":   `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
 			"outs":  `["foo.out"]`,
 			"srcs":  `["foo.in"]`,
@@ -250,13 +250,13 @@
 		}
 
 		t.Run(tc.moduleType, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
-				bp2buildTestCase{
-					moduleTypeUnderTest:        tc.moduleType,
-					moduleTypeUnderTestFactory: tc.factory,
-					blueprint:                  fmt.Sprintf(bp, tc.moduleType),
-					expectedBazelTargets:       expectedBazelTargets,
-					filesystem:                 otherGenruleBp(tc.moduleType),
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
+				Bp2buildTestCase{
+					ModuleTypeUnderTest:        tc.moduleType,
+					ModuleTypeUnderTestFactory: tc.factory,
+					Blueprint:                  fmt.Sprintf(bp, tc.moduleType),
+					ExpectedBazelTargets:       expectedBazelTargets,
+					Filesystem:                 otherGenruleBp(tc.moduleType),
 				})
 		})
 	}
@@ -299,7 +299,7 @@
 }`
 
 	for _, tc := range testCases {
-		moduleAttrs := attrNameToString{
+		moduleAttrs := AttrNameToString{
 			"cmd":   `"$(locations //other:foo.tool) -s $(OUTS) $(location //other:other.tool)"`,
 			"outs":  `["foo.out"]`,
 			"srcs":  `["//other:other.tool"]`,
@@ -311,13 +311,13 @@
 		}
 
 		t.Run(tc.moduleType, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
-				bp2buildTestCase{
-					moduleTypeUnderTest:        tc.moduleType,
-					moduleTypeUnderTestFactory: tc.factory,
-					blueprint:                  fmt.Sprintf(bp, tc.moduleType),
-					expectedBazelTargets:       expectedBazelTargets,
-					filesystem:                 otherGenruleBp(tc.moduleType),
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
+				Bp2buildTestCase{
+					ModuleTypeUnderTest:        tc.moduleType,
+					ModuleTypeUnderTestFactory: tc.factory,
+					Blueprint:                  fmt.Sprintf(bp, tc.moduleType),
+					ExpectedBazelTargets:       expectedBazelTargets,
+					Filesystem:                 otherGenruleBp(tc.moduleType),
 				})
 		})
 	}
@@ -360,7 +360,7 @@
 }`
 
 	for _, tc := range testCases {
-		moduleAttrs := attrNameToString{
+		moduleAttrs := AttrNameToString{
 			"cmd":  `"$(location //other:foo.tool) -s $(OUTS) $(SRCS)"`,
 			"outs": `["foo.out"]`,
 			"srcs": `["foo.in"]`,
@@ -375,13 +375,13 @@
 		}
 
 		t.Run(tc.moduleType, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
-				bp2buildTestCase{
-					moduleTypeUnderTest:        tc.moduleType,
-					moduleTypeUnderTestFactory: tc.factory,
-					blueprint:                  fmt.Sprintf(bp, tc.moduleType),
-					expectedBazelTargets:       expectedBazelTargets,
-					filesystem:                 otherGenruleBp(tc.moduleType),
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
+				Bp2buildTestCase{
+					ModuleTypeUnderTest:        tc.moduleType,
+					ModuleTypeUnderTestFactory: tc.factory,
+					Blueprint:                  fmt.Sprintf(bp, tc.moduleType),
+					ExpectedBazelTargets:       expectedBazelTargets,
+					Filesystem:                 otherGenruleBp(tc.moduleType),
 				})
 		})
 	}
@@ -424,7 +424,7 @@
 }`
 
 	for _, tc := range testCases {
-		moduleAttrs := attrNameToString{
+		moduleAttrs := AttrNameToString{
 			"cmd":  `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
 			"outs": `["foo.out"]`,
 			"srcs": `["foo.in"]`,
@@ -439,13 +439,13 @@
 		}
 
 		t.Run(tc.moduleType, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
-				bp2buildTestCase{
-					moduleTypeUnderTest:        tc.moduleType,
-					moduleTypeUnderTestFactory: tc.factory,
-					blueprint:                  fmt.Sprintf(bp, tc.moduleType),
-					expectedBazelTargets:       expectedBazelTargets,
-					filesystem:                 otherGenruleBp(tc.moduleType),
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
+				Bp2buildTestCase{
+					ModuleTypeUnderTest:        tc.moduleType,
+					ModuleTypeUnderTestFactory: tc.factory,
+					Blueprint:                  fmt.Sprintf(bp, tc.moduleType),
+					ExpectedBazelTargets:       expectedBazelTargets,
+					Filesystem:                 otherGenruleBp(tc.moduleType),
 				})
 		})
 	}
@@ -487,7 +487,7 @@
 }`
 
 	for _, tc := range testCases {
-		moduleAttrs := attrNameToString{
+		moduleAttrs := AttrNameToString{
 			"cmd":  `"cp $(SRCS) $(OUTS)"`,
 			"outs": `["foo.out"]`,
 			"srcs": `["foo.in"]`,
@@ -498,22 +498,22 @@
 		}
 
 		t.Run(tc.moduleType, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
-				bp2buildTestCase{
-					moduleTypeUnderTest:        tc.moduleType,
-					moduleTypeUnderTestFactory: tc.factory,
-					blueprint:                  fmt.Sprintf(bp, tc.moduleType),
-					expectedBazelTargets:       expectedBazelTargets,
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
+				Bp2buildTestCase{
+					ModuleTypeUnderTest:        tc.moduleType,
+					ModuleTypeUnderTestFactory: tc.factory,
+					Blueprint:                  fmt.Sprintf(bp, tc.moduleType),
+					ExpectedBazelTargets:       expectedBazelTargets,
 				})
 		})
 	}
 }
 
 func TestGenruleBp2BuildInlinesDefaults(t *testing.T) {
-	testCases := []bp2buildTestCase{
+	testCases := []Bp2buildTestCase{
 		{
-			description: "genrule applies properties from a genrule_defaults dependency if not specified",
-			blueprint: `genrule_defaults {
+			Description: "genrule applies properties from a genrule_defaults dependency if not specified",
+			Blueprint: `genrule_defaults {
     name: "gen_defaults",
     cmd: "do-something $(in) $(out)",
 }
@@ -525,8 +525,8 @@
     bazel_module: { bp2build_available: true },
 }
 `,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("genrule", "gen", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("genrule", "gen", AttrNameToString{
 					"cmd":  `"do-something $(SRCS) $(OUTS)"`,
 					"outs": `["out"]`,
 					"srcs": `["in1"]`,
@@ -534,8 +534,8 @@
 			},
 		},
 		{
-			description: "genrule does merges properties from a genrule_defaults dependency, latest-first",
-			blueprint: `genrule_defaults {
+			Description: "genrule does merges properties from a genrule_defaults dependency, latest-first",
+			Blueprint: `genrule_defaults {
     name: "gen_defaults",
     out: ["out-from-defaults"],
     srcs: ["in-from-defaults"],
@@ -550,8 +550,8 @@
     bazel_module: { bp2build_available: true },
 }
 `,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("genrule", "gen", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("genrule", "gen", AttrNameToString{
 					"cmd": `"do-something $(SRCS) $(OUTS)"`,
 					"outs": `[
         "out-from-defaults",
@@ -565,8 +565,8 @@
 			},
 		},
 		{
-			description: "genrule applies properties from list of genrule_defaults",
-			blueprint: `genrule_defaults {
+			Description: "genrule applies properties from list of genrule_defaults",
+			Blueprint: `genrule_defaults {
     name: "gen_defaults1",
     cmd: "cp $(in) $(out)",
 }
@@ -583,8 +583,8 @@
     bazel_module: { bp2build_available: true },
 }
 `,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("genrule", "gen", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("genrule", "gen", AttrNameToString{
 					"cmd":  `"cp $(SRCS) $(OUTS)"`,
 					"outs": `["out"]`,
 					"srcs": `["in1"]`,
@@ -592,8 +592,8 @@
 			},
 		},
 		{
-			description: "genrule applies properties from genrule_defaults transitively",
-			blueprint: `genrule_defaults {
+			Description: "genrule applies properties from genrule_defaults transitively",
+			Blueprint: `genrule_defaults {
     name: "gen_defaults1",
     defaults: ["gen_defaults2"],
     cmd: "cmd1 $(in) $(out)", // overrides gen_defaults2's cmd property value.
@@ -620,8 +620,8 @@
     bazel_module: { bp2build_available: true },
 }
 `,
-			expectedBazelTargets: []string{
-				makeBazelTargetNoRestrictions("genrule", "gen", attrNameToString{
+			ExpectedBazelTargets: []string{
+				MakeBazelTargetNoRestrictions("genrule", "gen", AttrNameToString{
 					"cmd": `"cmd1 $(SRCS) $(OUTS)"`,
 					"outs": `[
         "out-from-3",
@@ -638,7 +638,7 @@
 	}
 
 	for _, testCase := range testCases {
-		t.Run(testCase.description, func(t *testing.T) {
+		t.Run(testCase.Description, func(t *testing.T) {
 			runGenruleTestCase(t, testCase)
 		})
 	}
diff --git a/bp2build/gensrcs_conversion_test.go b/bp2build/gensrcs_conversion_test.go
index 7682663..4845973 100644
--- a/bp2build/gensrcs_conversion_test.go
+++ b/bp2build/gensrcs_conversion_test.go
@@ -24,7 +24,7 @@
 	testcases := []struct {
 		name               string
 		bp                 string
-		expectedBazelAttrs attrNameToString
+		expectedBazelAttrs AttrNameToString
 	}{
 		{
 			name: "gensrcs with common usage of properties",
@@ -37,7 +37,7 @@
                 output_extension: "out",
                 bazel_module: { bp2build_available: true },
 			}`,
-			expectedBazelAttrs: attrNameToString{
+			expectedBazelAttrs: AttrNameToString{
 				"srcs": `[
         "test/input.txt",
         ":external_files__BP2BUILD__MISSING__DEP",
@@ -56,7 +56,7 @@
                 cmd: "cat $(in) > $(out)",
                 bazel_module: { bp2build_available: true },
 			}`,
-			expectedBazelAttrs: attrNameToString{
+			expectedBazelAttrs: AttrNameToString{
 				"srcs": `["input.txt"]`,
 				"cmd":  `"cat $(SRC) > $(OUT)"`,
 			},
@@ -65,15 +65,15 @@
 
 	for _, test := range testcases {
 		expectedBazelTargets := []string{
-			makeBazelTargetNoRestrictions("gensrcs", "foo", test.expectedBazelAttrs),
+			MakeBazelTargetNoRestrictions("gensrcs", "foo", test.expectedBazelAttrs),
 		}
 		t.Run(test.name, func(t *testing.T) {
-			runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
-				bp2buildTestCase{
-					moduleTypeUnderTest:        "gensrcs",
-					moduleTypeUnderTestFactory: genrule.GenSrcsFactory,
-					blueprint:                  test.bp,
-					expectedBazelTargets:       expectedBazelTargets,
+			RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
+				Bp2buildTestCase{
+					ModuleTypeUnderTest:        "gensrcs",
+					ModuleTypeUnderTestFactory: genrule.GenSrcsFactory,
+					Blueprint:                  test.bp,
+					ExpectedBazelTargets:       expectedBazelTargets,
 				})
 		})
 	}
diff --git a/bp2build/java_binary_host_conversion_test.go b/bp2build/java_binary_host_conversion_test.go
index d7a76a8..50ea542 100644
--- a/bp2build/java_binary_host_conversion_test.go
+++ b/bp2build/java_binary_host_conversion_test.go
@@ -22,11 +22,11 @@
 	"android/soong/java"
 )
 
-func runJavaBinaryHostTestCase(t *testing.T, tc bp2buildTestCase) {
+func runJavaBinaryHostTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "java_binary_host"
-	(&tc).moduleTypeUnderTestFactory = java.BinaryHostFactory
-	runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
+	(&tc).ModuleTypeUnderTest = "java_binary_host"
+	(&tc).ModuleTypeUnderTestFactory = java.BinaryHostFactory
+	RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
 		ctx.RegisterModuleType("cc_library_host_shared", cc.LibraryHostSharedFactory)
 		ctx.RegisterModuleType("java_library", java.LibraryFactory)
 	}, tc)
@@ -41,10 +41,10 @@
 }
 
 func TestJavaBinaryHost(t *testing.T) {
-	runJavaBinaryHostTestCase(t, bp2buildTestCase{
-		description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
-		filesystem:  fs,
-		blueprint: `java_binary_host {
+	runJavaBinaryHostTestCase(t, Bp2buildTestCase{
+		Description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
+		Filesystem:  fs,
+		Blueprint: `java_binary_host {
     name: "java-binary-host-1",
     srcs: ["a.java", "b.java"],
     exclude_srcs: ["b.java"],
@@ -54,8 +54,8 @@
     bazel_module: { bp2build_available: true },
     java_version: "8",
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_binary", "java-binary-host-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{
 				"srcs":       `["a.java"]`,
 				"main_class": `"com.android.test.MainClass"`,
 				"deps":       `["//other:jni-lib-1"]`,
@@ -74,10 +74,10 @@
 }
 
 func TestJavaBinaryHostRuntimeDeps(t *testing.T) {
-	runJavaBinaryHostTestCase(t, bp2buildTestCase{
-		description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
-		filesystem:  fs,
-		blueprint: `java_binary_host {
+	runJavaBinaryHostTestCase(t, Bp2buildTestCase{
+		Description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
+		Filesystem:  fs,
+		Blueprint: `java_binary_host {
     name: "java-binary-host-1",
     static_libs: ["java-dep-1"],
     manifest: "test.mf",
@@ -90,8 +90,8 @@
     bazel_module: { bp2build_available: false },
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_binary", "java-binary-host-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{
 				"main_class":   `"com.android.test.MainClass"`,
 				"runtime_deps": `[":java-dep-1"]`,
 				"target_compatible_with": `select({
diff --git a/bp2build/java_import_conversion_test.go b/bp2build/java_import_conversion_test.go
index 0b3191c..707ecce 100644
--- a/bp2build/java_import_conversion_test.go
+++ b/bp2build/java_import_conversion_test.go
@@ -21,45 +21,45 @@
 	"testing"
 )
 
-func runJavaImportTestCase(t *testing.T, tc bp2buildTestCase) {
+func runJavaImportTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerJavaImportModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerJavaImportModuleTypes, tc)
 }
 
 func registerJavaImportModuleTypes(ctx android.RegistrationContext) {
 }
 
 func TestJavaImportMinimal(t *testing.T) {
-	runJavaImportTestCase(t, bp2buildTestCase{
-		description:                "Java import - simple example",
-		moduleTypeUnderTest:        "java_import",
-		moduleTypeUnderTestFactory: java.ImportFactory,
-		filesystem: map[string]string{
+	runJavaImportTestCase(t, Bp2buildTestCase{
+		Description:                "Java import - simple example",
+		ModuleTypeUnderTest:        "java_import",
+		ModuleTypeUnderTestFactory: java.ImportFactory,
+		Filesystem: map[string]string{
 			"import.jar": "",
 		},
-		blueprint: `
+		Blueprint: `
 java_import {
         name: "example_import",
         jars: ["import.jar"],
         bazel_module: { bp2build_available: true },
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_import", "example_import", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_import", "example_import", AttrNameToString{
 				"jars": `["import.jar"]`,
 			}),
 		}})
 }
 
 func TestJavaImportArchVariant(t *testing.T) {
-	runJavaImportTestCase(t, bp2buildTestCase{
-		description:                "Java import - simple example",
-		moduleTypeUnderTest:        "java_import",
-		moduleTypeUnderTestFactory: java.ImportFactory,
-		filesystem: map[string]string{
+	runJavaImportTestCase(t, Bp2buildTestCase{
+		Description:                "Java import - simple example",
+		ModuleTypeUnderTest:        "java_import",
+		ModuleTypeUnderTestFactory: java.ImportFactory,
+		Filesystem: map[string]string{
 			"import.jar": "",
 		},
-		blueprint: `
+		Blueprint: `
 java_import {
         name: "example_import",
 		target: {
@@ -73,8 +73,8 @@
         bazel_module: { bp2build_available: true },
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_import", "example_import", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_import", "example_import", AttrNameToString{
 				"jars": `select({
         "//build/bazel/platforms/os:android": ["android.jar"],
         "//build/bazel/platforms/os:linux": ["linux.jar"],
diff --git a/bp2build/java_library_conversion_test.go b/bp2build/java_library_conversion_test.go
index e4d9cbc..7fa19d9 100644
--- a/bp2build/java_library_conversion_test.go
+++ b/bp2build/java_library_conversion_test.go
@@ -22,22 +22,22 @@
 	"android/soong/java"
 )
 
-func runJavaLibraryTestCaseWithRegistrationCtxFunc(t *testing.T, tc bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
+func runJavaLibraryTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "java_library"
-	(&tc).moduleTypeUnderTestFactory = java.LibraryFactory
-	runBp2BuildTestCase(t, registrationCtxFunc, tc)
+	(&tc).ModuleTypeUnderTest = "java_library"
+	(&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
+	RunBp2BuildTestCase(t, registrationCtxFunc, tc)
 }
 
-func runJavaLibraryTestCase(t *testing.T, tc bp2buildTestCase) {
+func runJavaLibraryTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
 	runJavaLibraryTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
 }
 
 func TestJavaLibrary(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		description: "java_library with srcs, exclude_srcs and libs",
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Description: "java_library with srcs, exclude_srcs and libs",
+		Blueprint: `java_library {
     name: "java-lib-1",
     srcs: ["a.java", "b.java"],
     exclude_srcs: ["b.java"],
@@ -50,12 +50,12 @@
     srcs: ["b.java"],
     bazel_module: { bp2build_available: true },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"srcs": `["a.java"]`,
 				"deps": `[":java-lib-2"]`,
 			}),
-			makeBazelTarget("java_library", "java-lib-2", attrNameToString{
+			makeBazelTarget("java_library", "java-lib-2", AttrNameToString{
 				"srcs": `["b.java"]`,
 			}),
 		},
@@ -63,8 +63,8 @@
 }
 
 func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Blueprint: `java_library {
     name: "java-lib-1",
     srcs: ["a.java"],
     libs: ["java-lib-2"],
@@ -83,8 +83,8 @@
     srcs: ["c.java"],
     bazel_module: { bp2build_available: false },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"srcs": `["a.java"]`,
 				"deps": `[
         ":java-lib-2",
@@ -97,8 +97,8 @@
 }
 
 func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Blueprint: `java_library {
     name: "java-lib-1",
     static_libs: ["java-lib-2"],
     bazel_module: { bp2build_available: true },
@@ -109,8 +109,8 @@
     srcs: ["a.java"],
     bazel_module: { bp2build_available: false },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"exports": `[":java-lib-2"]`,
 			}),
 		},
@@ -118,9 +118,9 @@
 }
 
 func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		expectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
+		Blueprint: `java_library {
     name: "java-lib-1",
     libs: ["java-lib-2"],
     bazel_module: { bp2build_available: true },
@@ -131,13 +131,13 @@
     srcs: ["a.java"],
     bazel_module: { bp2build_available: false },
 }`,
-		expectedBazelTargets: []string{},
+		ExpectedBazelTargets: []string{},
 	})
 }
 
 func TestJavaLibraryPlugins(t *testing.T) {
-	runJavaLibraryTestCaseWithRegistrationCtxFunc(t, bp2buildTestCase{
-		blueprint: `java_library {
+	runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
+		Blueprint: `java_library {
     name: "java-lib-1",
     plugins: ["java-plugin-1"],
     bazel_module: { bp2build_available: true },
@@ -148,8 +148,8 @@
     srcs: ["a.java"],
     bazel_module: { bp2build_available: false },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"plugins": `[":java-plugin-1"]`,
 			}),
 		},
@@ -159,14 +159,14 @@
 }
 
 func TestJavaLibraryJavaVersion(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Blueprint: `java_library {
     name: "java-lib-1",
     srcs: ["a.java"],
     java_version: "11",
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"srcs":      `["a.java"]`,
 				"javacopts": `["-source 11 -target 11"]`,
 			}),
@@ -175,8 +175,8 @@
 }
 
 func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Blueprint: `java_library {
     name: "java-lib-1",
     srcs: ["a.java"],
     javacflags: ["-Xsuper-fast"],
@@ -185,8 +185,8 @@
         javacflags: ["-Xep:SpeedLimit:OFF"],
     },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"javacopts": `[
         "-Xsuper-fast",
         "-Xep:SpeedLimit:OFF",
@@ -198,8 +198,8 @@
 }
 
 func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Blueprint: `java_library {
     name: "java-lib-1",
     srcs: ["a.java"],
     javacflags: ["-Xsuper-fast"],
@@ -207,8 +207,8 @@
         javacflags: ["-Xep:SpeedLimit:OFF"],
     },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"javacopts": `["-Xsuper-fast"]`,
 				"srcs":      `["a.java"]`,
 			}),
@@ -217,8 +217,8 @@
 }
 
 func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Blueprint: `java_library {
     name: "java-lib-1",
     srcs: ["a.java"],
     javacflags: ["-Xsuper-fast"],
@@ -227,8 +227,8 @@
         javacflags: ["-Xep:SpeedLimit:OFF"],
     },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"javacopts": `["-Xsuper-fast"]`,
 				"srcs":      `["a.java"]`,
 			}),
@@ -237,11 +237,11 @@
 }
 
 func TestJavaLibraryLogTags(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		description:                "Java library - logtags creates separate dependency",
-		moduleTypeUnderTest:        "java_library",
-		moduleTypeUnderTestFactory: java.LibraryFactory,
-		blueprint: `java_library {
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Description:                "Java library - logtags creates separate dependency",
+		ModuleTypeUnderTest:        "java_library",
+		ModuleTypeUnderTestFactory: java.LibraryFactory,
+		Blueprint: `java_library {
         name: "example_lib",
         srcs: [
 			"a.java",
@@ -251,14 +251,14 @@
 		],
         bazel_module: { bp2build_available: true },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("event_log_tags", "example_lib_logtags", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
 				"srcs": `[
         "a.logtag",
         "b.logtag",
     ]`,
 			}),
-			makeBazelTarget("java_library", "example_lib", attrNameToString{
+			makeBazelTarget("java_library", "example_lib", AttrNameToString{
 				"srcs": `[
         "a.java",
         "b.java",
@@ -269,18 +269,18 @@
 }
 
 func TestJavaLibraryResources(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		filesystem: map[string]string{
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Filesystem: map[string]string{
 			"res/a.res":      "",
 			"res/b.res":      "",
 			"res/dir1/b.res": "",
 		},
-		blueprint: `java_library {
+		Blueprint: `java_library {
     name: "java-lib-1",
 	java_resources: ["res/a.res", "res/b.res"],
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"resources": `[
         "res/a.res",
         "res/b.res",
@@ -291,18 +291,18 @@
 }
 
 func TestJavaLibraryResourceDirs(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		filesystem: map[string]string{
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Filesystem: map[string]string{
 			"res/a.res":      "",
 			"res/b.res":      "",
 			"res/dir1/b.res": "",
 		},
-		blueprint: `java_library {
+		Blueprint: `java_library {
     name: "java-lib-1",
 	java_resource_dirs: ["res"],
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"resource_strip_prefix": `"res"`,
 				"resources": `[
         "res/a.res",
@@ -315,18 +315,18 @@
 }
 
 func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		filesystem: map[string]string{
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Filesystem: map[string]string{
 			"res/a.res":         "",
 			"res/exclude/b.res": "",
 		},
-		blueprint: `java_library {
+		Blueprint: `java_library {
     name: "java-lib-1",
 	java_resource_dirs: ["res"],
 	exclude_java_resource_dirs: ["res/exclude"],
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"resource_strip_prefix": `"res"`,
 				"resources":             `["res/a.res"]`,
 			}),
@@ -335,19 +335,19 @@
 }
 
 func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		filesystem: map[string]string{
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Filesystem: map[string]string{
 			"res/a.res":            "",
 			"res/dir1/b.res":       "",
 			"res/dir1/exclude.res": "",
 		},
-		blueprint: `java_library {
+		Blueprint: `java_library {
     name: "java-lib-1",
 	java_resource_dirs: ["res"],
 	exclude_java_resources: ["res/dir1/exclude.res"],
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
 				"resource_strip_prefix": `"res"`,
 				"resources": `[
         "res/a.res",
@@ -359,16 +359,16 @@
 }
 
 func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) {
-	runJavaLibraryTestCase(t, bp2buildTestCase{
-		filesystem: map[string]string{
+	runJavaLibraryTestCase(t, Bp2buildTestCase{
+		Filesystem: map[string]string{
 			"res/a.res":  "",
 			"res1/a.res": "",
 		},
-		blueprint: `java_library {
+		Blueprint: `java_library {
     name: "java-lib-1",
 	java_resource_dirs: ["res", "res1"],
 }`,
-		expectedErr:          fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
-		expectedBazelTargets: []string{},
+		ExpectedErr:          fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
+		ExpectedBazelTargets: []string{},
 	})
 }
diff --git a/bp2build/java_library_host_conversion_test.go b/bp2build/java_library_host_conversion_test.go
index 83cc551..1dcf163 100644
--- a/bp2build/java_library_host_conversion_test.go
+++ b/bp2build/java_library_host_conversion_test.go
@@ -21,17 +21,17 @@
 	"android/soong/java"
 )
 
-func runJavaLibraryHostTestCase(t *testing.T, tc bp2buildTestCase) {
+func runJavaLibraryHostTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "java_library_host"
-	(&tc).moduleTypeUnderTestFactory = java.LibraryHostFactory
-	runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
+	(&tc).ModuleTypeUnderTest = "java_library_host"
+	(&tc).ModuleTypeUnderTestFactory = java.LibraryHostFactory
+	RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
 }
 
 func TestJavaLibraryHost(t *testing.T) {
-	runJavaLibraryHostTestCase(t, bp2buildTestCase{
-		description: "java_library_host with srcs, exclude_srcs and libs",
-		blueprint: `java_library_host {
+	runJavaLibraryHostTestCase(t, Bp2buildTestCase{
+		Description: "java_library_host with srcs, exclude_srcs and libs",
+		Blueprint: `java_library_host {
     name: "java-lib-host-1",
     srcs: ["a.java", "b.java"],
     exclude_srcs: ["b.java"],
@@ -45,8 +45,8 @@
     bazel_module: { bp2build_available: true },
     java_version: "9",
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_library", "java-lib-host-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_library", "java-lib-host-1", AttrNameToString{
 				"srcs": `["a.java"]`,
 				"deps": `[":java-lib-host-2"]`,
 				"target_compatible_with": `select({
@@ -54,7 +54,7 @@
         "//conditions:default": [],
     })`,
 			}),
-			makeBazelTarget("java_library", "java-lib-host-2", attrNameToString{
+			makeBazelTarget("java_library", "java-lib-host-2", AttrNameToString{
 				"javacopts": `["-source 1.9 -target 1.9"]`,
 				"srcs":      `["c.java"]`,
 				"target_compatible_with": `select({
diff --git a/bp2build/java_plugin_conversion_test.go b/bp2build/java_plugin_conversion_test.go
index dc763e7..2d2e5ff 100644
--- a/bp2build/java_plugin_conversion_test.go
+++ b/bp2build/java_plugin_conversion_test.go
@@ -21,19 +21,19 @@
 	"android/soong/java"
 )
 
-func runJavaPluginTestCase(t *testing.T, tc bp2buildTestCase) {
+func runJavaPluginTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "java_plugin"
-	(&tc).moduleTypeUnderTestFactory = java.PluginFactory
-	runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
+	(&tc).ModuleTypeUnderTest = "java_plugin"
+	(&tc).ModuleTypeUnderTestFactory = java.PluginFactory
+	RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
 		ctx.RegisterModuleType("java_library", java.LibraryFactory)
 	}, tc)
 }
 
 func TestJavaPlugin(t *testing.T) {
-	runJavaPluginTestCase(t, bp2buildTestCase{
-		description: "java_plugin with srcs, libs, static_libs",
-		blueprint: `java_plugin {
+	runJavaPluginTestCase(t, Bp2buildTestCase{
+		Description: "java_plugin with srcs, libs, static_libs",
+		Blueprint: `java_plugin {
     name: "java-plug-1",
     srcs: ["a.java", "b.java"],
     libs: ["java-lib-1"],
@@ -53,8 +53,8 @@
     srcs: ["c.java"],
     bazel_module: { bp2build_available: false },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_plugin", "java-plug-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_plugin", "java-plug-1", AttrNameToString{
 				"target_compatible_with": `select({
         "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
         "//conditions:default": [],
@@ -74,9 +74,9 @@
 }
 
 func TestJavaPluginNoSrcs(t *testing.T) {
-	runJavaPluginTestCase(t, bp2buildTestCase{
-		description: "java_plugin without srcs converts (static) libs to deps",
-		blueprint: `java_plugin {
+	runJavaPluginTestCase(t, Bp2buildTestCase{
+		Description: "java_plugin without srcs converts (static) libs to deps",
+		Blueprint: `java_plugin {
     name: "java-plug-1",
     libs: ["java-lib-1"],
     static_libs: ["java-lib-2"],
@@ -94,8 +94,8 @@
     srcs: ["c.java"],
     bazel_module: { bp2build_available: false },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("java_plugin", "java-plug-1", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("java_plugin", "java-plug-1", AttrNameToString{
 				"target_compatible_with": `select({
         "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
         "//conditions:default": [],
diff --git a/bp2build/java_proto_conversion_test.go b/bp2build/java_proto_conversion_test.go
index c6feeb8..6465641 100644
--- a/bp2build/java_proto_conversion_test.go
+++ b/bp2build/java_proto_conversion_test.go
@@ -22,11 +22,11 @@
 	"android/soong/java"
 )
 
-func runJavaProtoTestCase(t *testing.T, tc bp2buildTestCase) {
+func runJavaProtoTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "java_library_static"
-	(&tc).moduleTypeUnderTestFactory = java.LibraryFactory
-	runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
+	(&tc).ModuleTypeUnderTest = "java_library_static"
+	(&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
+	RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
 }
 
 func TestJavaProto(t *testing.T) {
@@ -70,25 +70,25 @@
     srcs: ["a.proto"],
 }`
 
-	protoLibrary := makeBazelTarget("proto_library", "java-protos_proto", attrNameToString{
+	protoLibrary := makeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{
 		"srcs": `["a.proto"]`,
 	})
 
 	for _, tc := range testCases {
 		javaLibraryName := fmt.Sprintf("java-protos_%s", tc.javaLibraryNameExtension)
 
-		runJavaProtoTestCase(t, bp2buildTestCase{
-			description: fmt.Sprintf("java_proto %s", tc.protoType),
-			blueprint:   fmt.Sprintf(bp, tc.protoType),
-			expectedBazelTargets: []string{
+		runJavaProtoTestCase(t, Bp2buildTestCase{
+			Description: fmt.Sprintf("java_proto %s", tc.protoType),
+			Blueprint:   fmt.Sprintf(bp, tc.protoType),
+			ExpectedBazelTargets: []string{
 				protoLibrary,
 				makeBazelTarget(
 					tc.javaLibraryType,
 					javaLibraryName,
-					attrNameToString{
+					AttrNameToString{
 						"deps": `[":java-protos_proto"]`,
 					}),
-				makeBazelTarget("java_library", "java-protos", attrNameToString{
+				makeBazelTarget("java_library", "java-protos", AttrNameToString{
 					"exports": fmt.Sprintf(`[":%s"]`, javaLibraryName),
 				}),
 			},
@@ -97,25 +97,25 @@
 }
 
 func TestJavaProtoDefault(t *testing.T) {
-	runJavaProtoTestCase(t, bp2buildTestCase{
-		description: "java_library proto default",
-		blueprint: `java_library_static {
+	runJavaProtoTestCase(t, Bp2buildTestCase{
+		Description: "java_library proto default",
+		Blueprint: `java_library_static {
     name: "java-protos",
     srcs: ["a.proto"],
     java_version: "7",
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("proto_library", "java-protos_proto", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{
 				"srcs": `["a.proto"]`,
 			}),
 			makeBazelTarget(
 				"java_lite_proto_library",
 				"java-protos_java_proto_lite",
-				attrNameToString{
+				AttrNameToString{
 					"deps": `[":java-protos_proto"]`,
 				}),
-			makeBazelTarget("java_library", "java-protos", attrNameToString{
+			makeBazelTarget("java_library", "java-protos", AttrNameToString{
 				"exports":   `[":java-protos_java_proto_lite"]`,
 				"javacopts": `["-source 1.7 -target 1.7"]`,
 			}),
diff --git a/bp2build/linker_config_conversion_test.go b/bp2build/linker_config_conversion_test.go
index 4662af4..3b8a363 100644
--- a/bp2build/linker_config_conversion_test.go
+++ b/bp2build/linker_config_conversion_test.go
@@ -21,23 +21,23 @@
 	"android/soong/linkerconfig"
 )
 
-func runLinkerConfigTestCase(t *testing.T, tc bp2buildTestCase) {
+func runLinkerConfigTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "linker_config"
-	(&tc).moduleTypeUnderTestFactory = linkerconfig.LinkerConfigFactory
+	(&tc).ModuleTypeUnderTest = "linker_config"
+	(&tc).ModuleTypeUnderTestFactory = linkerconfig.LinkerConfigFactory
 	runBp2BuildTestCaseSimple(t, tc)
 }
 
 func TestLinkerConfigConvertsSrc(t *testing.T) {
 	runLinkerConfigTestCase(t,
-		bp2buildTestCase{
-			blueprint: `
+		Bp2buildTestCase{
+			Blueprint: `
 linker_config {
 	name: "foo",
 	src: "a.json",
 }
 `,
-			expectedBazelTargets: []string{makeBazelTarget("linker_config", "foo", attrNameToString{
+			ExpectedBazelTargets: []string{makeBazelTarget("linker_config", "foo", AttrNameToString{
 				"src": `"a.json"`,
 			})},
 		})
@@ -46,14 +46,14 @@
 
 func TestLinkerConfigNoSrc(t *testing.T) {
 	runLinkerConfigTestCase(t,
-		bp2buildTestCase{
-			blueprint: `
+		Bp2buildTestCase{
+			Blueprint: `
 linker_config {
 	name: "foo",
 }
 `,
-			expectedBazelTargets: []string{},
-			expectedErr:          fmt.Errorf("Android.bp:2:1: module \"foo\": src: empty src is not supported"),
+			ExpectedBazelTargets: []string{},
+			ExpectedErr:          fmt.Errorf("Android.bp:2:1: module \"foo\": src: empty src is not supported"),
 		})
 
 }
diff --git a/bp2build/prebuilt_etc_conversion_test.go b/bp2build/prebuilt_etc_conversion_test.go
index 2e4b221..fce4c74 100644
--- a/bp2build/prebuilt_etc_conversion_test.go
+++ b/bp2build/prebuilt_etc_conversion_test.go
@@ -21,21 +21,21 @@
 	"testing"
 )
 
-func runPrebuiltEtcTestCase(t *testing.T, tc bp2buildTestCase) {
+func runPrebuiltEtcTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "prebuilt_etc"
-	(&tc).moduleTypeUnderTestFactory = etc.PrebuiltEtcFactory
-	runBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
+	(&tc).ModuleTypeUnderTest = "prebuilt_etc"
+	(&tc).ModuleTypeUnderTestFactory = etc.PrebuiltEtcFactory
+	RunBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
 }
 
 func registerPrebuiltEtcModuleTypes(ctx android.RegistrationContext) {
 }
 
 func TestPrebuiltEtcSimple(t *testing.T) {
-	runPrebuiltEtcTestCase(t, bp2buildTestCase{
-		description: "prebuilt_etc - simple example",
-		filesystem:  map[string]string{},
-		blueprint: `
+	runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+		Description: "prebuilt_etc - simple example",
+		Filesystem:  map[string]string{},
+		Blueprint: `
 prebuilt_etc {
     name: "apex_tz_version",
     src: "version/tz_version",
@@ -44,8 +44,8 @@
     installable: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
 				"filename":    `"tz_version"`,
 				"installable": `False`,
 				"src":         `"version/tz_version"`,
@@ -54,10 +54,10 @@
 }
 
 func TestPrebuiltEtcArchVariant(t *testing.T) {
-	runPrebuiltEtcTestCase(t, bp2buildTestCase{
-		description: "prebuilt_etc - arch variant",
-		filesystem:  map[string]string{},
-		blueprint: `
+	runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+		Description: "prebuilt_etc - arch variant",
+		Filesystem:  map[string]string{},
+		Blueprint: `
 prebuilt_etc {
     name: "apex_tz_version",
     src: "version/tz_version",
@@ -74,8 +74,8 @@
     }
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
 				"filename":    `"tz_version"`,
 				"installable": `False`,
 				"src": `select({
@@ -88,10 +88,10 @@
 }
 
 func TestPrebuiltEtcArchAndTargetVariant(t *testing.T) {
-	runPrebuiltEtcTestCase(t, bp2buildTestCase{
-		description: "prebuilt_etc - arch variant",
-		filesystem:  map[string]string{},
-		blueprint: `
+	runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+		Description: "prebuilt_etc - arch variant",
+		Filesystem:  map[string]string{},
+		Blueprint: `
 prebuilt_etc {
     name: "apex_tz_version",
     src: "version/tz_version",
@@ -113,8 +113,8 @@
     },
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
 				"filename":    `"tz_version"`,
 				"installable": `False`,
 				"src": `select({
@@ -129,21 +129,21 @@
 			})}})
 }
 
-func runPrebuiltUsrShareTestCase(t *testing.T, tc bp2buildTestCase) {
+func runPrebuiltUsrShareTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	(&tc).moduleTypeUnderTest = "prebuilt_usr_share"
-	(&tc).moduleTypeUnderTestFactory = etc.PrebuiltUserShareFactory
-	runBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
+	(&tc).ModuleTypeUnderTest = "prebuilt_usr_share"
+	(&tc).ModuleTypeUnderTestFactory = etc.PrebuiltUserShareFactory
+	RunBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
 }
 
 func registerPrebuiltUsrShareModuleTypes(ctx android.RegistrationContext) {
 }
 
 func TestPrebuiltUsrShareSimple(t *testing.T) {
-	runPrebuiltUsrShareTestCase(t, bp2buildTestCase{
-		description: "prebuilt_usr_share - simple example",
-		filesystem:  map[string]string{},
-		blueprint: `
+	runPrebuiltUsrShareTestCase(t, Bp2buildTestCase{
+		Description: "prebuilt_usr_share - simple example",
+		Filesystem:  map[string]string{},
+		Blueprint: `
 prebuilt_usr_share {
     name: "apex_tz_version",
     src: "version/tz_version",
@@ -152,8 +152,8 @@
     installable: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
 				"filename":    `"tz_version"`,
 				"installable": `False`,
 				"src":         `"version/tz_version"`,
@@ -162,10 +162,10 @@
 }
 
 func TestPrebuiltEtcNoSubdir(t *testing.T) {
-	runPrebuiltEtcTestCase(t, bp2buildTestCase{
-		description: "prebuilt_etc - no subdir",
-		filesystem:  map[string]string{},
-		blueprint: `
+	runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+		Description: "prebuilt_etc - no subdir",
+		Filesystem:  map[string]string{},
+		Blueprint: `
 prebuilt_etc {
     name: "apex_tz_version",
     src: "version/tz_version",
@@ -173,8 +173,8 @@
     installable: false,
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
 				"filename":    `"tz_version"`,
 				"installable": `False`,
 				"src":         `"version/tz_version"`,
diff --git a/bp2build/python_binary_conversion_test.go b/bp2build/python_binary_conversion_test.go
index 22bd028..79da5d5 100644
--- a/bp2build/python_binary_conversion_test.go
+++ b/bp2build/python_binary_conversion_test.go
@@ -7,27 +7,27 @@
 	"android/soong/python"
 )
 
-func runBp2BuildTestCaseWithPythonLibraries(t *testing.T, tc bp2buildTestCase) {
+func runBp2BuildTestCaseWithPythonLibraries(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
+	RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
 		ctx.RegisterModuleType("python_library", python.PythonLibraryFactory)
 		ctx.RegisterModuleType("python_library_host", python.PythonLibraryHostFactory)
 	}, tc)
 }
 
 func TestPythonBinaryHostSimple(t *testing.T) {
-	runBp2BuildTestCaseWithPythonLibraries(t, bp2buildTestCase{
-		description:                "simple python_binary_host converts to a native py_binary",
-		moduleTypeUnderTest:        "python_binary_host",
-		moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
-		filesystem: map[string]string{
+	runBp2BuildTestCaseWithPythonLibraries(t, Bp2buildTestCase{
+		Description:                "simple python_binary_host converts to a native py_binary",
+		ModuleTypeUnderTest:        "python_binary_host",
+		ModuleTypeUnderTestFactory: python.PythonBinaryHostFactory,
+		Filesystem: map[string]string{
 			"a.py":           "",
 			"b/c.py":         "",
 			"b/d.py":         "",
 			"b/e.py":         "",
 			"files/data.txt": "",
 		},
-		blueprint: `python_binary_host {
+		Blueprint: `python_binary_host {
     name: "foo",
     main: "a.py",
     srcs: ["**/*.py"],
@@ -41,8 +41,8 @@
       srcs: ["b/e.py"],
       bazel_module: { bp2build_available: false },
     }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("py_binary", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("py_binary", "foo", AttrNameToString{
 				"data":    `["files/data.txt"]`,
 				"deps":    `[":bar"]`,
 				"main":    `"a.py"`,
@@ -62,11 +62,11 @@
 }
 
 func TestPythonBinaryHostPy2(t *testing.T) {
-	runBp2BuildTestCaseSimple(t, bp2buildTestCase{
-		description:                "py2 python_binary_host",
-		moduleTypeUnderTest:        "python_binary_host",
-		moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
-		blueprint: `python_binary_host {
+	runBp2BuildTestCaseSimple(t, Bp2buildTestCase{
+		Description:                "py2 python_binary_host",
+		ModuleTypeUnderTest:        "python_binary_host",
+		ModuleTypeUnderTestFactory: python.PythonBinaryHostFactory,
+		Blueprint: `python_binary_host {
     name: "foo",
     srcs: ["a.py"],
     version: {
@@ -81,8 +81,8 @@
     bazel_module: { bp2build_available: true },
 }
 `,
-		expectedBazelTargets: []string{
-			makeBazelTarget("py_binary", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("py_binary", "foo", AttrNameToString{
 				"python_version": `"PY2"`,
 				"imports":        `["."]`,
 				"srcs":           `["a.py"]`,
@@ -96,11 +96,11 @@
 }
 
 func TestPythonBinaryHostPy3(t *testing.T) {
-	runBp2BuildTestCaseSimple(t, bp2buildTestCase{
-		description:                "py3 python_binary_host",
-		moduleTypeUnderTest:        "python_binary_host",
-		moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
-		blueprint: `python_binary_host {
+	runBp2BuildTestCaseSimple(t, Bp2buildTestCase{
+		Description:                "py3 python_binary_host",
+		ModuleTypeUnderTest:        "python_binary_host",
+		ModuleTypeUnderTestFactory: python.PythonBinaryHostFactory,
+		Blueprint: `python_binary_host {
     name: "foo",
     srcs: ["a.py"],
     version: {
@@ -115,9 +115,9 @@
     bazel_module: { bp2build_available: true },
 }
 `,
-		expectedBazelTargets: []string{
+		ExpectedBazelTargets: []string{
 			// python_version is PY3 by default.
-			makeBazelTarget("py_binary", "foo", attrNameToString{
+			makeBazelTarget("py_binary", "foo", AttrNameToString{
 				"imports": `["."]`,
 				"srcs":    `["a.py"]`,
 				"target_compatible_with": `select({
@@ -130,15 +130,15 @@
 }
 
 func TestPythonBinaryHostArchVariance(t *testing.T) {
-	runBp2BuildTestCaseSimple(t, bp2buildTestCase{
-		description:                "test arch variants",
-		moduleTypeUnderTest:        "python_binary_host",
-		moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
-		filesystem: map[string]string{
+	runBp2BuildTestCaseSimple(t, Bp2buildTestCase{
+		Description:                "test arch variants",
+		ModuleTypeUnderTest:        "python_binary_host",
+		ModuleTypeUnderTestFactory: python.PythonBinaryHostFactory,
+		Filesystem: map[string]string{
 			"dir/arm.py": "",
 			"dir/x86.py": "",
 		},
-		blueprint: `python_binary_host {
+		Blueprint: `python_binary_host {
 					 name: "foo-arm",
 					 arch: {
 						 arm: {
@@ -149,8 +149,8 @@
 						 },
 					},
 				 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("py_binary", "foo-arm", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("py_binary", "foo-arm", AttrNameToString{
 				"imports": `["."]`,
 				"srcs": `select({
         "//build/bazel/platforms/arch:arm": ["arm.py"],
diff --git a/bp2build/python_library_conversion_test.go b/bp2build/python_library_conversion_test.go
index f51f106..1d6061b 100644
--- a/bp2build/python_library_conversion_test.go
+++ b/bp2build/python_library_conversion_test.go
@@ -21,7 +21,7 @@
 	expectedError        error
 }
 
-func convertPythonLibTestCaseToBp2build_Host(tc pythonLibBp2BuildTestCase) bp2buildTestCase {
+func convertPythonLibTestCaseToBp2build_Host(tc pythonLibBp2BuildTestCase) Bp2buildTestCase {
 	for i := range tc.expectedBazelTargets {
 		tc.expectedBazelTargets[i].attrs["target_compatible_with"] = `select({
         "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
@@ -32,7 +32,7 @@
 	return convertPythonLibTestCaseToBp2build(tc)
 }
 
-func convertPythonLibTestCaseToBp2build(tc pythonLibBp2BuildTestCase) bp2buildTestCase {
+func convertPythonLibTestCaseToBp2build(tc pythonLibBp2BuildTestCase) Bp2buildTestCase {
 	var bp2BuildTargets []string
 	for _, t := range tc.expectedBazelTargets {
 		bp2BuildTargets = append(bp2BuildTargets, makeBazelTarget(t.typ, t.name, t.attrs))
@@ -43,28 +43,28 @@
 	for k, v := range tc.filesystem {
 		filesystemCopy[k] = v
 	}
-	return bp2buildTestCase{
-		description:          tc.description,
-		filesystem:           filesystemCopy,
-		blueprint:            tc.blueprint,
-		expectedBazelTargets: bp2BuildTargets,
-		dir:                  tc.dir,
-		expectedErr:          tc.expectedError,
+	return Bp2buildTestCase{
+		Description:          tc.description,
+		Filesystem:           filesystemCopy,
+		Blueprint:            tc.blueprint,
+		ExpectedBazelTargets: bp2BuildTargets,
+		Dir:                  tc.dir,
+		ExpectedErr:          tc.expectedError,
 	}
 }
 
 func runPythonLibraryTestCase(t *testing.T, tc pythonLibBp2BuildTestCase) {
 	t.Helper()
 	testCase := convertPythonLibTestCaseToBp2build(tc)
-	testCase.description = fmt.Sprintf(testCase.description, "python_library")
-	testCase.blueprint = fmt.Sprintf(testCase.blueprint, "python_library")
-	for name, contents := range testCase.filesystem {
+	testCase.Description = fmt.Sprintf(testCase.Description, "python_library")
+	testCase.Blueprint = fmt.Sprintf(testCase.Blueprint, "python_library")
+	for name, contents := range testCase.Filesystem {
 		if strings.HasSuffix(name, "Android.bp") {
-			testCase.filesystem[name] = fmt.Sprintf(contents, "python_library")
+			testCase.Filesystem[name] = fmt.Sprintf(contents, "python_library")
 		}
 	}
-	testCase.moduleTypeUnderTest = "python_library"
-	testCase.moduleTypeUnderTestFactory = python.PythonLibraryFactory
+	testCase.ModuleTypeUnderTest = "python_library"
+	testCase.ModuleTypeUnderTestFactory = python.PythonLibraryFactory
 
 	runBp2BuildTestCaseSimple(t, testCase)
 }
@@ -72,16 +72,16 @@
 func runPythonLibraryHostTestCase(t *testing.T, tc pythonLibBp2BuildTestCase) {
 	t.Helper()
 	testCase := convertPythonLibTestCaseToBp2build_Host(tc)
-	testCase.description = fmt.Sprintf(testCase.description, "python_library_host")
-	testCase.blueprint = fmt.Sprintf(testCase.blueprint, "python_library_host")
-	for name, contents := range testCase.filesystem {
+	testCase.Description = fmt.Sprintf(testCase.Description, "python_library_host")
+	testCase.Blueprint = fmt.Sprintf(testCase.Blueprint, "python_library_host")
+	for name, contents := range testCase.Filesystem {
 		if strings.HasSuffix(name, "Android.bp") {
-			testCase.filesystem[name] = fmt.Sprintf(contents, "python_library_host")
+			testCase.Filesystem[name] = fmt.Sprintf(contents, "python_library_host")
 		}
 	}
-	testCase.moduleTypeUnderTest = "python_library_host"
-	testCase.moduleTypeUnderTestFactory = python.PythonLibraryHostFactory
-	runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
+	testCase.ModuleTypeUnderTest = "python_library_host"
+	testCase.ModuleTypeUnderTestFactory = python.PythonLibraryHostFactory
+	RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
 		ctx.RegisterModuleType("python_library", python.PythonLibraryFactory)
 	},
 		testCase)
@@ -121,7 +121,7 @@
 				{
 					typ:  "py_library",
 					name: "foo",
-					attrs: attrNameToString{
+					attrs: AttrNameToString{
 						"data": `["files/data.txt"]`,
 						"deps": `[":bar"]`,
 						"srcs": `[
@@ -155,7 +155,7 @@
 				{
 					typ:  "py_library",
 					name: "foo",
-					attrs: attrNameToString{
+					attrs: AttrNameToString{
 						"srcs":         `["a.py"]`,
 						"srcs_version": `"PY2"`,
 						"imports":      `["."]`,
@@ -183,7 +183,7 @@
 				{
 					typ:  "py_library",
 					name: "foo",
-					attrs: attrNameToString{
+					attrs: AttrNameToString{
 						"srcs":         `["a.py"]`,
 						"srcs_version": `"PY3"`,
 						"imports":      `["."]`,
@@ -212,7 +212,7 @@
 					// srcs_version is PY2ANDPY3 by default.
 					typ:  "py_library",
 					name: "foo",
-					attrs: attrNameToString{
+					attrs: AttrNameToString{
 						"srcs":    `["a.py"]`,
 						"imports": `["."]`,
 					},
@@ -238,7 +238,7 @@
 					// srcs_version is PY2ANDPY3 by default.
 					typ:  "py_library",
 					name: "foo",
-					attrs: attrNameToString{
+					attrs: AttrNameToString{
 						"srcs":         `["a.py"]`,
 						"imports":      `["../.."]`,
 						"srcs_version": `"PY3"`,
@@ -292,7 +292,7 @@
 			{
 				typ:  "py_library",
 				name: "foo",
-				attrs: attrNameToString{
+				attrs: AttrNameToString{
 					"srcs": `select({
         "//build/bazel/platforms/arch:arm": ["arm.py"],
         "//build/bazel/platforms/arch:x86": ["x86.py"],
@@ -324,21 +324,21 @@
 			{
 				typ:  "proto_library",
 				name: "foo_proto",
-				attrs: attrNameToString{
+				attrs: AttrNameToString{
 					"srcs": `["dir/myproto.proto"]`,
 				},
 			},
 			{
 				typ:  "py_proto_library",
 				name: "foo_py_proto",
-				attrs: attrNameToString{
+				attrs: AttrNameToString{
 					"deps": `[":foo_proto"]`,
 				},
 			},
 			{
 				typ:  "py_library",
 				name: "foo",
-				attrs: attrNameToString{
+				attrs: AttrNameToString{
 					"srcs":         `["dir/mylib.py"]`,
 					"srcs_version": `"PY3"`,
 					"imports":      `["."]`,
diff --git a/bp2build/sh_conversion_test.go b/bp2build/sh_conversion_test.go
index ac89087..d8f701d 100644
--- a/bp2build/sh_conversion_test.go
+++ b/bp2build/sh_conversion_test.go
@@ -48,25 +48,25 @@
 	}
 }
 
-func runShBinaryTestCase(t *testing.T, tc bp2buildTestCase) {
+func runShBinaryTestCase(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
+	RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
 }
 
 func TestShBinarySimple(t *testing.T) {
-	runShBinaryTestCase(t, bp2buildTestCase{
-		description:                "sh_binary test",
-		moduleTypeUnderTest:        "sh_binary",
-		moduleTypeUnderTestFactory: sh.ShBinaryFactory,
-		blueprint: `sh_binary {
+	runShBinaryTestCase(t, Bp2buildTestCase{
+		Description:                "sh_binary test",
+		ModuleTypeUnderTest:        "sh_binary",
+		ModuleTypeUnderTestFactory: sh.ShBinaryFactory,
+		Blueprint: `sh_binary {
     name: "foo",
     src: "foo.sh",
     filename: "foo.exe",
     sub_dir: "sub",
     bazel_module: { bp2build_available: true },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("sh_binary", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("sh_binary", "foo", AttrNameToString{
 				"srcs":     `["foo.sh"]`,
 				"filename": `"foo.exe"`,
 				"sub_dir":  `"sub"`,
@@ -75,17 +75,17 @@
 }
 
 func TestShBinaryDefaults(t *testing.T) {
-	runShBinaryTestCase(t, bp2buildTestCase{
-		description:                "sh_binary test",
-		moduleTypeUnderTest:        "sh_binary",
-		moduleTypeUnderTestFactory: sh.ShBinaryFactory,
-		blueprint: `sh_binary {
+	runShBinaryTestCase(t, Bp2buildTestCase{
+		Description:                "sh_binary test",
+		ModuleTypeUnderTest:        "sh_binary",
+		ModuleTypeUnderTestFactory: sh.ShBinaryFactory,
+		Blueprint: `sh_binary {
     name: "foo",
     src: "foo.sh",
     bazel_module: { bp2build_available: true },
 }`,
-		expectedBazelTargets: []string{
-			makeBazelTarget("sh_binary", "foo", attrNameToString{
+		ExpectedBazelTargets: []string{
+			makeBazelTarget("sh_binary", "foo", AttrNameToString{
 				"srcs": `["foo.sh"]`,
 			})},
 	})
diff --git a/bp2build/soong_config_module_type_conversion_test.go b/bp2build/soong_config_module_type_conversion_test.go
index 8460cae..a94b2b9 100644
--- a/bp2build/soong_config_module_type_conversion_test.go
+++ b/bp2build/soong_config_module_type_conversion_test.go
@@ -20,9 +20,9 @@
 	"testing"
 )
 
-func runSoongConfigModuleTypeTest(t *testing.T, tc bp2buildTestCase) {
+func runSoongConfigModuleTypeTest(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, registerSoongConfigModuleTypes, tc)
+	RunBp2BuildTestCase(t, registerSoongConfigModuleTypes, tc)
 }
 
 func registerSoongConfigModuleTypes(ctx android.RegistrationContext) {
@@ -61,12 +61,12 @@
 }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - soong_config_module_type is supported in bp2build",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		blueprint:                  bp,
-		expectedBazelTargets: []string{`cc_library_static(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - soong_config_module_type is supported in bp2build",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Blueprint:                  bp,
+		ExpectedBazelTargets: []string{`cc_library_static(
     name = "foo",
     copts = select({
         "//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"],
@@ -107,15 +107,15 @@
 }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - soong_config_module_type_import is supported in bp2build",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		filesystem: map[string]string{
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - soong_config_module_type_import is supported in bp2build",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Filesystem: map[string]string{
 			"foo/bar/SoongConfig.bp": configBp,
 		},
-		blueprint: bp,
-		expectedBazelTargets: []string{`cc_library_static(
+		Blueprint: bp,
+		ExpectedBazelTargets: []string{`cc_library_static(
     name = "foo",
     copts = select({
         "//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"],
@@ -161,12 +161,12 @@
 }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for string vars",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		blueprint:                  bp,
-		expectedBazelTargets: []string{`cc_library_static(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for string vars",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Blueprint:                  bp,
+		ExpectedBazelTargets: []string{`cc_library_static(
     name = "foo",
     copts = select({
         "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
@@ -232,12 +232,12 @@
 	},
 }`
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for multiple variable types",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		blueprint:                  bp,
-		expectedBazelTargets: []string{`cc_library_static(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for multiple variable types",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Blueprint:                  bp,
+		ExpectedBazelTargets: []string{`cc_library_static(
     name = "foo",
     copts = select({
         "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
@@ -298,15 +298,15 @@
 cc_library_static { name: "soc_default_static_dep", bazel_module: { bp2build_available: false } }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for label list attributes",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		blueprint:                  bp,
-		filesystem: map[string]string{
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for label list attributes",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Blueprint:                  bp,
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": otherDeps,
 		},
-		expectedBazelTargets: []string{`cc_library_static(
+		ExpectedBazelTargets: []string{`cc_library_static(
     name = "foo",
     copts = select({
         "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
@@ -365,12 +365,12 @@
 }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - defaults with a single namespace",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		blueprint:                  bp,
-		expectedBazelTargets: []string{`cc_library_static(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - defaults with a single namespace",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Blueprint:                  bp,
+		ExpectedBazelTargets: []string{`cc_library_static(
     name = "lib",
     copts = select({
         "//build/bazel/product_variables:vendor_foo__feature": [
@@ -446,12 +446,12 @@
 }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - multiple defaults with a single namespace",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		blueprint:                  bp,
-		expectedBazelTargets: []string{`cc_library_static(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - multiple defaults with a single namespace",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Blueprint:                  bp,
+		ExpectedBazelTargets: []string{`cc_library_static(
     name = "lib",
     asflags = select({
         "//build/bazel/product_variables:acme__feature": ["-asflag_bar"],
@@ -562,12 +562,12 @@
 }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - defaults with multiple namespaces",
-		moduleTypeUnderTest:        "cc_library_static",
-		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
-		blueprint:                  bp,
-		expectedBazelTargets: []string{`cc_library_static(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - defaults with multiple namespaces",
+		ModuleTypeUnderTest:        "cc_library_static",
+		ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
+		Blueprint:                  bp,
+		ExpectedBazelTargets: []string{`cc_library_static(
     name = "lib",
     copts = select({
         "//build/bazel/product_variables:vendor_bar__feature": ["-DVENDOR_BAR_FEATURE"],
@@ -653,15 +653,15 @@
 cc_library { name: "lib_default", bazel_module: { bp2build_available: false } }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for library_linking_strategy",
-		moduleTypeUnderTest:        "cc_binary",
-		moduleTypeUnderTestFactory: cc.BinaryFactory,
-		blueprint:                  bp,
-		filesystem: map[string]string{
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for library_linking_strategy",
+		ModuleTypeUnderTest:        "cc_binary",
+		ModuleTypeUnderTestFactory: cc.BinaryFactory,
+		Blueprint:                  bp,
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": otherDeps,
 		},
-		expectedBazelTargets: []string{`cc_binary(
+		ExpectedBazelTargets: []string{`cc_binary(
     name = "library_linking_strategy_sample_binary",
     deps = select({
         "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [
@@ -734,15 +734,15 @@
 cc_library { name: "lib_b", bazel_module: { bp2build_available: false } }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for library_linking_strategy",
-		moduleTypeUnderTest:        "cc_binary",
-		moduleTypeUnderTestFactory: cc.BinaryFactory,
-		blueprint:                  bp,
-		filesystem: map[string]string{
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for library_linking_strategy",
+		ModuleTypeUnderTest:        "cc_binary",
+		ModuleTypeUnderTestFactory: cc.BinaryFactory,
+		Blueprint:                  bp,
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": otherDeps,
 		},
-		expectedBazelTargets: []string{`cc_binary(
+		ExpectedBazelTargets: []string{`cc_binary(
     name = "library_linking_strategy_sample_binary",
     deps = select({
         "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [
@@ -822,15 +822,15 @@
 cc_library { name: "lib_default", bazel_module: { bp2build_available: false } }
 `
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for library_linking_strategy",
-		moduleTypeUnderTest:        "cc_binary",
-		moduleTypeUnderTestFactory: cc.BinaryFactory,
-		blueprint:                  bp,
-		filesystem: map[string]string{
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for library_linking_strategy",
+		ModuleTypeUnderTest:        "cc_binary",
+		ModuleTypeUnderTestFactory: cc.BinaryFactory,
+		Blueprint:                  bp,
+		Filesystem: map[string]string{
 			"foo/bar/Android.bp": otherDeps,
 		},
-		expectedBazelTargets: []string{`cc_binary(
+		ExpectedBazelTargets: []string{`cc_binary(
     name = "alphabet_binary",
     deps = select({
         "//build/bazel/product_variables:android__alphabet__a": [],
@@ -888,13 +888,13 @@
     },
 }`
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for library_linking_strategy",
-		moduleTypeUnderTest:        "cc_binary",
-		moduleTypeUnderTestFactory: cc.BinaryFactory,
-		blueprint:                  bp,
-		filesystem:                 map[string]string{},
-		expectedBazelTargets: []string{`cc_binary(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for library_linking_strategy",
+		ModuleTypeUnderTest:        "cc_binary",
+		ModuleTypeUnderTestFactory: cc.BinaryFactory,
+		Blueprint:                  bp,
+		Filesystem:                 map[string]string{},
+		ExpectedBazelTargets: []string{`cc_binary(
     name = "alphabet_binary",
     local_includes = ["."],
     srcs = ["main.cc"],
@@ -941,13 +941,13 @@
     enabled: false,
 }`
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for library_linking_strategy",
-		moduleTypeUnderTest:        "cc_binary",
-		moduleTypeUnderTestFactory: cc.BinaryFactory,
-		blueprint:                  bp,
-		filesystem:                 map[string]string{},
-		expectedBazelTargets: []string{`cc_binary(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for library_linking_strategy",
+		ModuleTypeUnderTest:        "cc_binary",
+		ModuleTypeUnderTestFactory: cc.BinaryFactory,
+		Blueprint:                  bp,
+		Filesystem:                 map[string]string{},
+		ExpectedBazelTargets: []string{`cc_binary(
     name = "alphabet_binary",
     local_includes = ["."],
     srcs = ["main.cc"],
@@ -985,13 +985,13 @@
     defaults: ["alphabet_sample_cc_defaults"],
 }`
 
-	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
-		description:                "soong config variables - generates selects for library_linking_strategy",
-		moduleTypeUnderTest:        "cc_binary",
-		moduleTypeUnderTestFactory: cc.BinaryFactory,
-		blueprint:                  bp,
-		filesystem:                 map[string]string{},
-		expectedBazelTargets: []string{`cc_binary(
+	runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
+		Description:                "soong config variables - generates selects for library_linking_strategy",
+		ModuleTypeUnderTest:        "cc_binary",
+		ModuleTypeUnderTestFactory: cc.BinaryFactory,
+		Blueprint:                  bp,
+		Filesystem:                 map[string]string{},
+		ExpectedBazelTargets: []string{`cc_binary(
     name = "alphabet_binary",
     local_includes = ["."],
     srcs = ["main.cc"],
diff --git a/bp2build/testing.go b/bp2build/testing.go
index 580bac4..3ee5096 100644
--- a/bp2build/testing.go
+++ b/bp2build/testing.go
@@ -53,16 +53,16 @@
 	return false
 }
 
-func errored(t *testing.T, tc bp2buildTestCase, errs []error) bool {
+func errored(t *testing.T, tc Bp2buildTestCase, errs []error) bool {
 	t.Helper()
-	if tc.expectedErr != nil {
+	if tc.ExpectedErr != nil {
 		// Rely on checkErrors, as this test case is expected to have an error.
 		return false
 	}
 
 	if len(errs) > 0 {
 		for _, err := range errs {
-			t.Errorf("%s: %s", tc.description, err)
+			t.Errorf("%s: %s", tc.Description, err)
 		}
 		return true
 	}
@@ -71,42 +71,42 @@
 	return false
 }
 
-func runBp2BuildTestCaseSimple(t *testing.T, tc bp2buildTestCase) {
+func runBp2BuildTestCaseSimple(t *testing.T, tc Bp2buildTestCase) {
 	t.Helper()
-	runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
+	RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
 }
 
-type bp2buildTestCase struct {
-	description                string
-	moduleTypeUnderTest        string
-	moduleTypeUnderTestFactory android.ModuleFactory
-	blueprint                  string
-	expectedBazelTargets       []string
-	filesystem                 map[string]string
-	dir                        string
+type Bp2buildTestCase struct {
+	Description                string
+	ModuleTypeUnderTest        string
+	ModuleTypeUnderTestFactory android.ModuleFactory
+	Blueprint                  string
+	ExpectedBazelTargets       []string
+	Filesystem                 map[string]string
+	Dir                        string
 	// An error with a string contained within the string of the expected error
-	expectedErr         error
-	unconvertedDepsMode unconvertedDepsMode
+	ExpectedErr         error
+	UnconvertedDepsMode unconvertedDepsMode
 }
 
-func runBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc bp2buildTestCase) {
+func RunBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc Bp2buildTestCase) {
 	t.Helper()
 	dir := "."
 	filesystem := make(map[string][]byte)
 	toParse := []string{
 		"Android.bp",
 	}
-	for f, content := range tc.filesystem {
+	for f, content := range tc.Filesystem {
 		if strings.HasSuffix(f, "Android.bp") {
 			toParse = append(toParse, f)
 		}
 		filesystem[f] = []byte(content)
 	}
-	config := android.TestConfig(buildDir, nil, tc.blueprint, filesystem)
+	config := android.TestConfig(buildDir, nil, tc.Blueprint, filesystem)
 	ctx := android.NewTestContext(config)
 
 	registerModuleTypes(ctx)
-	ctx.RegisterModuleType(tc.moduleTypeUnderTest, tc.moduleTypeUnderTestFactory)
+	ctx.RegisterModuleType(tc.ModuleTypeUnderTest, tc.ModuleTypeUnderTestFactory)
 	ctx.RegisterBp2BuildConfig(bp2buildConfig)
 	ctx.RegisterForBazelConversion()
 
@@ -120,35 +120,35 @@
 	}
 
 	parseAndResolveErrs := append(parseErrs, resolveDepsErrs...)
-	if tc.expectedErr != nil && checkError(t, parseAndResolveErrs, tc.expectedErr) {
+	if tc.ExpectedErr != nil && checkError(t, parseAndResolveErrs, tc.ExpectedErr) {
 		return
 	}
 
 	checkDir := dir
-	if tc.dir != "" {
-		checkDir = tc.dir
+	if tc.Dir != "" {
+		checkDir = tc.Dir
 	}
 	codegenCtx := NewCodegenContext(config, *ctx.Context, Bp2Build)
-	codegenCtx.unconvertedDepMode = tc.unconvertedDepsMode
+	codegenCtx.unconvertedDepMode = tc.UnconvertedDepsMode
 	bazelTargets, errs := generateBazelTargetsForDir(codegenCtx, checkDir)
-	if tc.expectedErr != nil {
-		if checkError(t, errs, tc.expectedErr) {
+	if tc.ExpectedErr != nil {
+		if checkError(t, errs, tc.ExpectedErr) {
 			return
 		} else {
-			t.Errorf("Expected error: %q, got: %q and %q", tc.expectedErr, errs, parseAndResolveErrs)
+			t.Errorf("Expected error: %q, got: %q and %q", tc.ExpectedErr, errs, parseAndResolveErrs)
 		}
 	} else {
 		android.FailIfErrored(t, errs)
 	}
-	if actualCount, expectedCount := len(bazelTargets), len(tc.expectedBazelTargets); actualCount != expectedCount {
+	if actualCount, expectedCount := len(bazelTargets), len(tc.ExpectedBazelTargets); actualCount != expectedCount {
 		t.Errorf("%s: Expected %d bazel target (%s), got `%d`` (%s)",
-			tc.description, expectedCount, tc.expectedBazelTargets, actualCount, bazelTargets)
+			tc.Description, expectedCount, tc.ExpectedBazelTargets, actualCount, bazelTargets)
 	} else {
 		for i, target := range bazelTargets {
-			if w, g := tc.expectedBazelTargets[i], target.content; w != g {
+			if w, g := tc.ExpectedBazelTargets[i], target.content; w != g {
 				t.Errorf(
 					"%s: Expected generated Bazel target to be `%s`, got `%s`",
-					tc.description, w, g)
+					tc.Description, w, g)
 			}
 		}
 	}
@@ -391,10 +391,10 @@
 }`, typ, name)
 }
 
-type attrNameToString map[string]string
+type AttrNameToString map[string]string
 
-func (a attrNameToString) clone() attrNameToString {
-	newAttrs := make(attrNameToString, len(a))
+func (a AttrNameToString) clone() AttrNameToString {
+	newAttrs := make(AttrNameToString, len(a))
 	for k, v := range a {
 		newAttrs[k] = v
 	}
@@ -403,7 +403,7 @@
 
 // makeBazelTargetNoRestrictions returns bazel target build file definition that can be host or
 // device specific, or independent of host/device.
-func makeBazelTargetHostOrDevice(typ, name string, attrs attrNameToString, hod android.HostOrDeviceSupported) string {
+func makeBazelTargetHostOrDevice(typ, name string, attrs AttrNameToString, hod android.HostOrDeviceSupported) string {
 	if _, ok := attrs["target_compatible_with"]; !ok {
 		switch hod {
 		case android.HostSupported:
@@ -426,15 +426,15 @@
 )`, typ, strings.Join(attrStrings, "\n"))
 }
 
-// makeBazelTargetNoRestrictions returns bazel target build file definition that does not add a
+// MakeBazelTargetNoRestrictions returns bazel target build file definition that does not add a
 // target_compatible_with.  This is useful for module types like filegroup and genrule that arch not
 // arch variant
-func makeBazelTargetNoRestrictions(typ, name string, attrs attrNameToString) string {
+func MakeBazelTargetNoRestrictions(typ, name string, attrs AttrNameToString) string {
 	return makeBazelTargetHostOrDevice(typ, name, attrs, android.HostAndDeviceDefault)
 }
 
 // makeBazelTargetNoRestrictions returns bazel target build file definition that is device specific
 // as this is the most common default in Soong.
-func makeBazelTarget(typ, name string, attrs attrNameToString) string {
+func makeBazelTarget(typ, name string, attrs AttrNameToString) string {
 	return makeBazelTargetHostOrDevice(typ, name, attrs, android.DeviceSupported)
 }