Merge "export common bp2build testing functions"

This commit is contained in:
Liz Kammer
2022-08-04 18:11:16 +00:00
committed by Gerrit Code Review
31 changed files with 1990 additions and 1986 deletions

View File

@@ -94,6 +94,10 @@ func (ll *LabelList) IsNil() bool {
return ll.Includes == nil && ll.Excludes == nil 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 { func (ll *LabelList) deepCopy() LabelList {
return LabelList{ return LabelList{
Includes: ll.Includes[:], Includes: ll.Includes[:],

View File

@@ -21,28 +21,28 @@ import (
"testing" "testing"
) )
func runAndroidAppCertificateTestCase(t *testing.T, tc bp2buildTestCase) { func runAndroidAppCertificateTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerAndroidAppCertificateModuleTypes, tc) RunBp2BuildTestCase(t, registerAndroidAppCertificateModuleTypes, tc)
} }
func registerAndroidAppCertificateModuleTypes(ctx android.RegistrationContext) { func registerAndroidAppCertificateModuleTypes(ctx android.RegistrationContext) {
} }
func TestAndroidAppCertificateSimple(t *testing.T) { func TestAndroidAppCertificateSimple(t *testing.T) {
runAndroidAppCertificateTestCase(t, bp2buildTestCase{ runAndroidAppCertificateTestCase(t, Bp2buildTestCase{
description: "Android app certificate - simple example", Description: "Android app certificate - simple example",
moduleTypeUnderTest: "android_app_certificate", ModuleTypeUnderTest: "android_app_certificate",
moduleTypeUnderTestFactory: java.AndroidAppCertificateFactory, ModuleTypeUnderTestFactory: java.AndroidAppCertificateFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
android_app_certificate { android_app_certificate {
name: "com.android.apogee.cert", name: "com.android.apogee.cert",
certificate: "chamber_of_secrets_dir", certificate: "chamber_of_secrets_dir",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTargetNoRestrictions("android_app_certificate", "com.android.apogee.cert", attrNameToString{ MakeBazelTargetNoRestrictions("android_app_certificate", "com.android.apogee.cert", AttrNameToString{
"certificate": `"chamber_of_secrets_dir"`, "certificate": `"chamber_of_secrets_dir"`,
}), }),
}}) }})

View File

@@ -21,33 +21,33 @@ import (
"testing" "testing"
) )
func runAndroidAppTestCase(t *testing.T, tc bp2buildTestCase) { func runAndroidAppTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerAndroidAppModuleTypes, tc) RunBp2BuildTestCase(t, registerAndroidAppModuleTypes, tc)
} }
func registerAndroidAppModuleTypes(ctx android.RegistrationContext) { func registerAndroidAppModuleTypes(ctx android.RegistrationContext) {
} }
func TestMinimalAndroidApp(t *testing.T) { func TestMinimalAndroidApp(t *testing.T) {
runAndroidAppTestCase(t, bp2buildTestCase{ runAndroidAppTestCase(t, Bp2buildTestCase{
description: "Android app - simple example", Description: "Android app - simple example",
moduleTypeUnderTest: "android_app", ModuleTypeUnderTest: "android_app",
moduleTypeUnderTestFactory: java.AndroidAppFactory, ModuleTypeUnderTestFactory: java.AndroidAppFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"app.java": "", "app.java": "",
"res/res.png": "", "res/res.png": "",
"AndroidManifest.xml": "", "AndroidManifest.xml": "",
}, },
blueprint: ` Blueprint: `
android_app { android_app {
name: "TestApp", name: "TestApp",
srcs: ["app.java"], srcs: ["app.java"],
sdk_version: "current", sdk_version: "current",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("android_binary", "TestApp", attrNameToString{ makeBazelTarget("android_binary", "TestApp", AttrNameToString{
"srcs": `["app.java"]`, "srcs": `["app.java"]`,
"manifest": `"AndroidManifest.xml"`, "manifest": `"AndroidManifest.xml"`,
"resource_files": `["res/res.png"]`, "resource_files": `["res/res.png"]`,
@@ -56,17 +56,17 @@ android_app {
} }
func TestAndroidAppAllSupportedFields(t *testing.T) { func TestAndroidAppAllSupportedFields(t *testing.T) {
runAndroidAppTestCase(t, bp2buildTestCase{ runAndroidAppTestCase(t, Bp2buildTestCase{
description: "Android app - all supported fields", Description: "Android app - all supported fields",
moduleTypeUnderTest: "android_app", ModuleTypeUnderTest: "android_app",
moduleTypeUnderTestFactory: java.AndroidAppFactory, ModuleTypeUnderTestFactory: java.AndroidAppFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"app.java": "", "app.java": "",
"resa/res.png": "", "resa/res.png": "",
"resb/res.png": "", "resb/res.png": "",
"manifest/AndroidManifest.xml": "", "manifest/AndroidManifest.xml": "",
}, },
blueprint: simpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + ` Blueprint: simpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + `
android_app { android_app {
name: "TestApp", name: "TestApp",
srcs: ["app.java"], srcs: ["app.java"],
@@ -78,8 +78,8 @@ android_app {
java_version: "7", java_version: "7",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("android_binary", "TestApp", attrNameToString{ makeBazelTarget("android_binary", "TestApp", AttrNameToString{
"srcs": `["app.java"]`, "srcs": `["app.java"]`,
"manifest": `"manifest/AndroidManifest.xml"`, "manifest": `"manifest/AndroidManifest.xml"`,
"resource_files": `[ "resource_files": `[
@@ -94,17 +94,17 @@ android_app {
} }
func TestAndroidAppArchVariantSrcs(t *testing.T) { func TestAndroidAppArchVariantSrcs(t *testing.T) {
runAndroidAppTestCase(t, bp2buildTestCase{ runAndroidAppTestCase(t, Bp2buildTestCase{
description: "Android app - arch variant srcs", Description: "Android app - arch variant srcs",
moduleTypeUnderTest: "android_app", ModuleTypeUnderTest: "android_app",
moduleTypeUnderTestFactory: java.AndroidAppFactory, ModuleTypeUnderTestFactory: java.AndroidAppFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"arm.java": "", "arm.java": "",
"x86.java": "", "x86.java": "",
"res/res.png": "", "res/res.png": "",
"AndroidManifest.xml": "", "AndroidManifest.xml": "",
}, },
blueprint: ` Blueprint: `
android_app { android_app {
name: "TestApp", name: "TestApp",
sdk_version: "current", sdk_version: "current",
@@ -118,8 +118,8 @@ android_app {
} }
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("android_binary", "TestApp", attrNameToString{ makeBazelTarget("android_binary", "TestApp", AttrNameToString{
"srcs": `select({ "srcs": `select({
"//build/bazel/platforms/arch:arm": ["arm.java"], "//build/bazel/platforms/arch:arm": ["arm.java"],
"//build/bazel/platforms/arch:x86": ["x86.java"], "//build/bazel/platforms/arch:x86": ["x86.java"],

View File

@@ -25,9 +25,9 @@ import (
"testing" "testing"
) )
func runApexTestCase(t *testing.T, tc bp2buildTestCase) { func runApexTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerApexModuleTypes, tc) RunBp2BuildTestCase(t, registerApexModuleTypes, tc)
} }
func registerApexModuleTypes(ctx android.RegistrationContext) { func registerApexModuleTypes(ctx android.RegistrationContext) {
@@ -43,9 +43,9 @@ func registerApexModuleTypes(ctx android.RegistrationContext) {
ctx.RegisterModuleType("prebuilt_etc", etc.PrebuiltEtcFactory) ctx.RegisterModuleType("prebuilt_etc", etc.PrebuiltEtcFactory)
} }
func runOverrideApexTestCase(t *testing.T, tc bp2buildTestCase) { func runOverrideApexTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerOverrideApexModuleTypes, tc) RunBp2BuildTestCase(t, registerOverrideApexModuleTypes, tc)
} }
func registerOverrideApexModuleTypes(ctx android.RegistrationContext) { func registerOverrideApexModuleTypes(ctx android.RegistrationContext) {
@@ -63,12 +63,12 @@ func registerOverrideApexModuleTypes(ctx android.RegistrationContext) {
} }
func TestApexBundleSimple(t *testing.T) { func TestApexBundleSimple(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - example with all props, file_context is a module in same Android.bp", Description: "apex - example with all props, file_context is a module in same Android.bp",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
apex_key { apex_key {
name: "com.android.apogee.key", name: "com.android.apogee.key",
public_key: "com.android.apogee.avbpubkey", public_key: "com.android.apogee.avbpubkey",
@@ -140,8 +140,8 @@ apex {
logging_parent: "logging.parent", logging_parent: "logging.parent",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"android_manifest": `"ApogeeAndroidManifest.xml"`, "android_manifest": `"ApogeeAndroidManifest.xml"`,
"binaries": `[ "binaries": `[
":cc_binary_1", ":cc_binary_1",
@@ -181,11 +181,11 @@ apex {
} }
func TestApexBundleSimple_fileContextsInAnotherAndroidBp(t *testing.T) { func TestApexBundleSimple_fileContextsInAnotherAndroidBp(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - file contexts is a module in another Android.bp", Description: "apex - file contexts is a module in another Android.bp",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"a/b/Android.bp": ` "a/b/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -196,14 +196,14 @@ filegroup {
} }
`, `,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
file_contexts: ":com.android.apogee-file_contexts", file_contexts: ":com.android.apogee-file_contexts",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"file_contexts": `"//a/b:com.android.apogee-file_contexts"`, "file_contexts": `"//a/b:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
}), }),
@@ -211,19 +211,19 @@ apex {
} }
func TestApexBundleSimple_fileContextsIsFile(t *testing.T) { func TestApexBundleSimple_fileContextsIsFile(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - file contexts is a file", Description: "apex - file contexts is a file",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
file_contexts: "file_contexts_file", file_contexts: "file_contexts_file",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"file_contexts": `"file_contexts_file"`, "file_contexts": `"file_contexts_file"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
}), }),
@@ -231,11 +231,11 @@ apex {
} }
func TestApexBundleSimple_fileContextsIsNotSpecified(t *testing.T) { func TestApexBundleSimple_fileContextsIsNotSpecified(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - file contexts is not specified", Description: "apex - file contexts is not specified",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -246,13 +246,13 @@ filegroup {
} }
`, `,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
}), }),
@@ -260,11 +260,11 @@ apex {
} }
func TestApexBundleCompileMultilibBoth(t *testing.T) { func TestApexBundleCompileMultilibBoth(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - example with compile_multilib=both", Description: "apex - example with compile_multilib=both",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -273,9 +273,9 @@ filegroup {
} }
`, `,
}, },
blueprint: createMultilibBlueprint("both"), Blueprint: createMultilibBlueprint("both"),
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"native_shared_libs_32": `[ "native_shared_libs_32": `[
":native_shared_lib_1", ":native_shared_lib_1",
":native_shared_lib_3", ":native_shared_lib_3",
@@ -304,11 +304,11 @@ filegroup {
} }
func TestApexBundleCompileMultilibFirst(t *testing.T) { func TestApexBundleCompileMultilibFirst(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - example with compile_multilib=first", Description: "apex - example with compile_multilib=first",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -317,9 +317,9 @@ filegroup {
} }
`, `,
}, },
blueprint: createMultilibBlueprint("first"), Blueprint: createMultilibBlueprint("first"),
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"native_shared_libs_32": `select({ "native_shared_libs_32": `select({
"//build/bazel/platforms/arch:arm": [ "//build/bazel/platforms/arch:arm": [
":native_shared_lib_1", ":native_shared_lib_1",
@@ -353,11 +353,11 @@ filegroup {
} }
func TestApexBundleCompileMultilib32(t *testing.T) { func TestApexBundleCompileMultilib32(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - example with compile_multilib=32", Description: "apex - example with compile_multilib=32",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -366,9 +366,9 @@ filegroup {
} }
`, `,
}, },
blueprint: createMultilibBlueprint("32"), Blueprint: createMultilibBlueprint("32"),
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"native_shared_libs_32": `[ "native_shared_libs_32": `[
":native_shared_lib_1", ":native_shared_lib_1",
":native_shared_lib_3", ":native_shared_lib_3",
@@ -384,11 +384,11 @@ filegroup {
} }
func TestApexBundleCompileMultilib64(t *testing.T) { func TestApexBundleCompileMultilib64(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - example with compile_multilib=64", Description: "apex - example with compile_multilib=64",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -397,9 +397,9 @@ filegroup {
} }
`, `,
}, },
blueprint: createMultilibBlueprint("64"), Blueprint: createMultilibBlueprint("64"),
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"native_shared_libs_64": `select({ "native_shared_libs_64": `select({
"//build/bazel/platforms/arch:arm64": [ "//build/bazel/platforms/arch:arm64": [
":native_shared_lib_1", ":native_shared_lib_1",
@@ -420,11 +420,11 @@ filegroup {
} }
func TestApexBundleDefaultPropertyValues(t *testing.T) { func TestApexBundleDefaultPropertyValues(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - default property values", Description: "apex - default property values",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -433,13 +433,13 @@ filegroup {
} }
`, `,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
manifest: "apogee_manifest.json", manifest: "apogee_manifest.json",
} }
`, `,
expectedBazelTargets: []string{makeBazelTarget("apex", "com.android.apogee", attrNameToString{ ExpectedBazelTargets: []string{makeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"manifest": `"apogee_manifest.json"`, "manifest": `"apogee_manifest.json"`,
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
}), }),
@@ -447,11 +447,11 @@ apex {
} }
func TestApexBundleHasBazelModuleProps(t *testing.T) { func TestApexBundleHasBazelModuleProps(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{ runApexTestCase(t, Bp2buildTestCase{
description: "apex - has bazel module props", Description: "apex - has bazel module props",
moduleTypeUnderTest: "apex", ModuleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory, ModuleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "apogee-file_contexts", name: "apogee-file_contexts",
@@ -460,14 +460,14 @@ filegroup {
} }
`, `,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "apogee", name: "apogee",
manifest: "manifest.json", manifest: "manifest.json",
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{makeBazelTarget("apex", "apogee", attrNameToString{ ExpectedBazelTargets: []string{makeBazelTarget("apex", "apogee", AttrNameToString{
"manifest": `"manifest.json"`, "manifest": `"manifest.json"`,
"file_contexts": `"//system/sepolicy/apex:apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:apogee-file_contexts"`,
}), }),
@@ -525,12 +525,12 @@ apex {
} }
func TestBp2BuildOverrideApex(t *testing.T) { func TestBp2BuildOverrideApex(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex", Description: "override_apex",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
apex_key { apex_key {
name: "com.android.apogee.key", name: "com.android.apogee.key",
public_key: "com.android.apogee.avbpubkey", public_key: "com.android.apogee.avbpubkey",
@@ -623,8 +623,8 @@ override_apex {
compressible: true, compressible: true,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"android_manifest": `"ApogeeAndroidManifest.xml"`, "android_manifest": `"ApogeeAndroidManifest.xml"`,
"binaries": `[ "binaries": `[
":cc_binary_1", ":cc_binary_1",
@@ -659,11 +659,11 @@ override_apex {
} }
func TestApexBundleSimple_manifestIsEmpty_baseApexOverrideApexInDifferentAndroidBp(t *testing.T) { func TestApexBundleSimple_manifestIsEmpty_baseApexOverrideApexInDifferentAndroidBp(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - manifest of base apex is empty, base apex and override_apex is in different Android.bp", Description: "override_apex - manifest of base apex is empty, base apex and override_apex is in different Android.bp",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -677,14 +677,14 @@ apex {
} }
`, `,
}, },
blueprint: ` Blueprint: `
override_apex { override_apex {
name: "com.google.android.apogee", name: "com.google.android.apogee",
base: ":com.android.apogee", base: ":com.android.apogee",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"//a/b:apex_manifest.json"`, "manifest": `"//a/b:apex_manifest.json"`,
}), }),
@@ -692,11 +692,11 @@ override_apex {
} }
func TestApexBundleSimple_manifestIsSet_baseApexOverrideApexInDifferentAndroidBp(t *testing.T) { func TestApexBundleSimple_manifestIsSet_baseApexOverrideApexInDifferentAndroidBp(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - manifest of base apex is set, base apex and override_apex is in different Android.bp", Description: "override_apex - manifest of base apex is set, base apex and override_apex is in different Android.bp",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -711,14 +711,14 @@ apex {
} }
`, `,
}, },
blueprint: ` Blueprint: `
override_apex { override_apex {
name: "com.google.android.apogee", name: "com.google.android.apogee",
base: ":com.android.apogee", base: ":com.android.apogee",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"//a/b:apogee_manifest.json"`, "manifest": `"//a/b:apogee_manifest.json"`,
}), }),
@@ -726,11 +726,11 @@ override_apex {
} }
func TestApexBundleSimple_manifestIsEmpty_baseApexOverrideApexInSameAndroidBp(t *testing.T) { func TestApexBundleSimple_manifestIsEmpty_baseApexOverrideApexInSameAndroidBp(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - manifest of base apex is empty, base apex and override_apex is in same Android.bp", Description: "override_apex - manifest of base apex is empty, base apex and override_apex is in same Android.bp",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -738,7 +738,7 @@ filegroup {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -749,8 +749,8 @@ override_apex {
base: ":com.android.apogee", base: ":com.android.apogee",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
}), }),
@@ -758,11 +758,11 @@ override_apex {
} }
func TestApexBundleSimple_manifestIsSet_baseApexOverrideApexInSameAndroidBp(t *testing.T) { func TestApexBundleSimple_manifestIsSet_baseApexOverrideApexInSameAndroidBp(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - manifest of base apex is set, base apex and override_apex is in same Android.bp", Description: "override_apex - manifest of base apex is set, base apex and override_apex is in same Android.bp",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -770,7 +770,7 @@ filegroup {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
manifest: "apogee_manifest.json", manifest: "apogee_manifest.json",
@@ -782,8 +782,8 @@ override_apex {
base: ":com.android.apogee", base: ":com.android.apogee",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apogee_manifest.json"`, "manifest": `"apogee_manifest.json"`,
}), }),
@@ -791,11 +791,11 @@ override_apex {
} }
func TestApexBundleSimple_packageNameOverride(t *testing.T) { func TestApexBundleSimple_packageNameOverride(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - override package name", Description: "override_apex - override package name",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -803,7 +803,7 @@ filegroup {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -815,8 +815,8 @@ override_apex {
package_name: "com.google.android.apogee", package_name: "com.google.android.apogee",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
"package_name": `"com.google.android.apogee"`, "package_name": `"com.google.android.apogee"`,
@@ -825,11 +825,11 @@ override_apex {
} }
func TestApexBundleSimple_NoPrebuiltsOverride(t *testing.T) { func TestApexBundleSimple_NoPrebuiltsOverride(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - no override", Description: "override_apex - no override",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -837,7 +837,7 @@ filegroup {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
}, },
blueprint: ` Blueprint: `
prebuilt_etc { prebuilt_etc {
name: "prebuilt_file", name: "prebuilt_file",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -854,8 +854,8 @@ override_apex {
base: ":com.android.apogee", base: ":com.android.apogee",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
"prebuilts": `[":prebuilt_file"]`, "prebuilts": `[":prebuilt_file"]`,
@@ -864,11 +864,11 @@ override_apex {
} }
func TestApexBundleSimple_PrebuiltsOverride(t *testing.T) { func TestApexBundleSimple_PrebuiltsOverride(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - ooverride", Description: "override_apex - ooverride",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -876,7 +876,7 @@ filegroup {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
}, },
blueprint: ` Blueprint: `
prebuilt_etc { prebuilt_etc {
name: "prebuilt_file", name: "prebuilt_file",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -899,8 +899,8 @@ override_apex {
prebuilts: ["prebuilt_file2"] prebuilts: ["prebuilt_file2"]
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
"prebuilts": `[":prebuilt_file2"]`, "prebuilts": `[":prebuilt_file2"]`,
@@ -909,11 +909,11 @@ override_apex {
} }
func TestApexBundleSimple_PrebuiltsOverrideEmptyList(t *testing.T) { func TestApexBundleSimple_PrebuiltsOverrideEmptyList(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - override with empty list", Description: "override_apex - override with empty list",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -921,7 +921,7 @@ filegroup {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
}, },
blueprint: ` Blueprint: `
prebuilt_etc { prebuilt_etc {
name: "prebuilt_file", name: "prebuilt_file",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -939,8 +939,8 @@ override_apex {
prebuilts: [], prebuilts: [],
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
"prebuilts": `[]`, "prebuilts": `[]`,
@@ -949,11 +949,11 @@ override_apex {
} }
func TestApexBundleSimple_NoLoggingParentOverride(t *testing.T) { func TestApexBundleSimple_NoLoggingParentOverride(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - logging_parent - no override", Description: "override_apex - logging_parent - no override",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -961,7 +961,7 @@ filegroup {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -973,8 +973,8 @@ override_apex {
base: ":com.android.apogee", base: ":com.android.apogee",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
"logging_parent": `"foo.bar.baz"`, "logging_parent": `"foo.bar.baz"`,
@@ -983,11 +983,11 @@ override_apex {
} }
func TestApexBundleSimple_LoggingParentOverride(t *testing.T) { func TestApexBundleSimple_LoggingParentOverride(t *testing.T) {
runOverrideApexTestCase(t, bp2buildTestCase{ runOverrideApexTestCase(t, Bp2buildTestCase{
description: "override_apex - logging_parent - override", Description: "override_apex - logging_parent - override",
moduleTypeUnderTest: "override_apex", ModuleTypeUnderTest: "override_apex",
moduleTypeUnderTestFactory: apex.OverrideApexFactory, ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"system/sepolicy/apex/Android.bp": ` "system/sepolicy/apex/Android.bp": `
filegroup { filegroup {
name: "com.android.apogee-file_contexts", name: "com.android.apogee-file_contexts",
@@ -995,7 +995,7 @@ filegroup {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
}, },
blueprint: ` Blueprint: `
apex { apex {
name: "com.android.apogee", name: "com.android.apogee",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -1008,8 +1008,8 @@ override_apex {
logging_parent: "foo.bar.baz.override", logging_parent: "foo.bar.baz.override",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("apex", "com.google.android.apogee", attrNameToString{ makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{
"file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`,
"manifest": `"apex_manifest.json"`, "manifest": `"apex_manifest.json"`,
"logging_parent": `"foo.bar.baz.override"`, "logging_parent": `"foo.bar.baz.override"`,

View File

@@ -21,28 +21,28 @@ import (
"testing" "testing"
) )
func runApexKeyTestCase(t *testing.T, tc bp2buildTestCase) { func runApexKeyTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerApexKeyModuleTypes, tc) RunBp2BuildTestCase(t, registerApexKeyModuleTypes, tc)
} }
func registerApexKeyModuleTypes(ctx android.RegistrationContext) { func registerApexKeyModuleTypes(ctx android.RegistrationContext) {
} }
func TestApexKeySimple(t *testing.T) { func TestApexKeySimple(t *testing.T) {
runApexKeyTestCase(t, bp2buildTestCase{ runApexKeyTestCase(t, Bp2buildTestCase{
description: "apex key - simple example", Description: "apex key - simple example",
moduleTypeUnderTest: "apex_key", ModuleTypeUnderTest: "apex_key",
moduleTypeUnderTestFactory: apex.ApexKeyFactory, ModuleTypeUnderTestFactory: apex.ApexKeyFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
apex_key { apex_key {
name: "com.android.apogee.key", name: "com.android.apogee.key",
public_key: "com.android.apogee.avbpubkey", public_key: "com.android.apogee.avbpubkey",
private_key: "com.android.apogee.pem", 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"`, "private_key": `"com.android.apogee.pem"`,
"public_key": `"com.android.apogee.avbpubkey"`, "public_key": `"com.android.apogee.avbpubkey"`,
}), }),

File diff suppressed because it is too large Load Diff

View File

@@ -31,7 +31,7 @@ const (
type testBazelTarget struct { type testBazelTarget struct {
typ string typ string
name string name string
attrs attrNameToString attrs AttrNameToString
} }
func generateBazelTargetsForTest(targets []testBazelTarget, hod android.HostOrDeviceSupported) []string { func generateBazelTargetsForTest(targets []testBazelTarget, hod android.HostOrDeviceSupported) []string {
@@ -73,12 +73,12 @@ func runCcBinaryTestCase(t *testing.T, testCase ccBinaryBp2buildTestCase) {
description := fmt.Sprintf("%s %s", moduleTypeUnderTest, testCase.description) description := fmt.Sprintf("%s %s", moduleTypeUnderTest, testCase.description)
t.Run(description, func(t *testing.T) { t.Run(description, func(t *testing.T) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerCcBinaryModuleTypes, bp2buildTestCase{ RunBp2BuildTestCase(t, registerCcBinaryModuleTypes, Bp2buildTestCase{
expectedBazelTargets: generateBazelTargetsForTest(testCase.targets, android.DeviceSupported), ExpectedBazelTargets: generateBazelTargetsForTest(testCase.targets, android.DeviceSupported),
moduleTypeUnderTest: moduleTypeUnderTest, ModuleTypeUnderTest: moduleTypeUnderTest,
moduleTypeUnderTestFactory: cc.BinaryFactory, ModuleTypeUnderTestFactory: cc.BinaryFactory,
description: description, Description: description,
blueprint: binaryReplacer.Replace(testCase.blueprint), Blueprint: binaryReplacer.Replace(testCase.blueprint),
}) })
}) })
} }
@@ -88,12 +88,12 @@ func runCcHostBinaryTestCase(t *testing.T, testCase ccBinaryBp2buildTestCase) {
moduleTypeUnderTest := "cc_binary_host" moduleTypeUnderTest := "cc_binary_host"
description := fmt.Sprintf("%s %s", moduleTypeUnderTest, testCase.description) description := fmt.Sprintf("%s %s", moduleTypeUnderTest, testCase.description)
t.Run(description, func(t *testing.T) { t.Run(description, func(t *testing.T) {
runBp2BuildTestCase(t, registerCcBinaryModuleTypes, bp2buildTestCase{ RunBp2BuildTestCase(t, registerCcBinaryModuleTypes, Bp2buildTestCase{
expectedBazelTargets: generateBazelTargetsForTest(testCase.targets, android.HostSupported), ExpectedBazelTargets: generateBazelTargetsForTest(testCase.targets, android.HostSupported),
moduleTypeUnderTest: moduleTypeUnderTest, ModuleTypeUnderTest: moduleTypeUnderTest,
moduleTypeUnderTestFactory: cc.BinaryHostFactory, ModuleTypeUnderTestFactory: cc.BinaryHostFactory,
description: description, Description: description,
blueprint: hostBinaryReplacer.Replace(testCase.blueprint), Blueprint: hostBinaryReplacer.Replace(testCase.blueprint),
}) })
}) })
} }
@@ -126,7 +126,7 @@ func TestBasicCcBinary(t *testing.T) {
} }
`, `,
targets: []testBazelTarget{ targets: []testBazelTarget{
{"cc_binary", "foo", attrNameToString{ {"cc_binary", "foo", AttrNameToString{
"absolute_includes": `["absolute_dir"]`, "absolute_includes": `["absolute_dir"]`,
"asflags": `["-Dasflag"]`, "asflags": `["-Dasflag"]`,
"conlyflags": `["-Dconlyflag"]`, "conlyflags": `["-Dconlyflag"]`,
@@ -166,7 +166,7 @@ func TestCcBinaryWithSharedLdflagDisableFeature(t *testing.T) {
} }
`, `,
targets: []testBazelTarget{ targets: []testBazelTarget{
{"cc_binary", "foo", attrNameToString{ {"cc_binary", "foo", AttrNameToString{
"features": `["-static_flag"]`, "features": `["-static_flag"]`,
"linkopts": `["-shared"]`, "linkopts": `["-shared"]`,
}, },
@@ -186,7 +186,7 @@ func TestCcBinaryWithLinkStatic(t *testing.T) {
} }
`, `,
targets: []testBazelTarget{ targets: []testBazelTarget{
{"cc_binary", "foo", attrNameToString{ {"cc_binary", "foo", AttrNameToString{
"linkshared": `False`, "linkshared": `False`,
}, },
}, },
@@ -205,7 +205,7 @@ func TestCcBinaryVersionScript(t *testing.T) {
} }
`, `,
targets: []testBazelTarget{ targets: []testBazelTarget{
{"cc_binary", "foo", attrNameToString{ {"cc_binary", "foo", AttrNameToString{
"additional_linker_inputs": `["vs"]`, "additional_linker_inputs": `["vs"]`,
"linkopts": `["-Wl,--version-script,$(location vs)"]`, "linkopts": `["-Wl,--version-script,$(location vs)"]`,
}, },
@@ -230,7 +230,7 @@ func TestCcBinarySplitSrcsByLang(t *testing.T) {
} }
` + simpleModuleDoNotConvertBp2build("filegroup", "fg_foo"), ` + simpleModuleDoNotConvertBp2build("filegroup", "fg_foo"),
targets: []testBazelTarget{ targets: []testBazelTarget{
{"cc_binary", "foo", attrNameToString{ {"cc_binary", "foo", AttrNameToString{
"srcs": `[ "srcs": `[
"cpponly.cpp", "cpponly.cpp",
":fg_foo_cpp_srcs", ":fg_foo_cpp_srcs",
@@ -285,7 +285,7 @@ genrule {
simpleModuleDoNotConvertBp2build("cc_library", "shared_dep") + simpleModuleDoNotConvertBp2build("cc_library", "shared_dep") +
simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep"), simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep"),
targets: []testBazelTarget{ targets: []testBazelTarget{
{"cc_binary", "foo", attrNameToString{ {"cc_binary", "foo", AttrNameToString{
"deps": `[ "deps": `[
":implementation_static_dep", ":implementation_static_dep",
":static_dep", ":static_dep",
@@ -314,21 +314,21 @@ func TestCcBinaryNocrtTests(t *testing.T) {
baseTestCases := []struct { baseTestCases := []struct {
description string description string
soongProperty string soongProperty string
bazelAttr attrNameToString bazelAttr AttrNameToString
}{ }{
{ {
description: "nocrt: true", description: "nocrt: true",
soongProperty: `nocrt: true,`, soongProperty: `nocrt: true,`,
bazelAttr: attrNameToString{"link_crt": `False`}, bazelAttr: AttrNameToString{"link_crt": `False`},
}, },
{ {
description: "nocrt: false", description: "nocrt: false",
soongProperty: `nocrt: false,`, soongProperty: `nocrt: false,`,
bazelAttr: attrNameToString{}, bazelAttr: AttrNameToString{},
}, },
{ {
description: "nocrt: not set", description: "nocrt: not set",
bazelAttr: attrNameToString{}, bazelAttr: AttrNameToString{},
}, },
} }
@@ -357,21 +357,21 @@ func TestCcBinaryNo_libcrtTests(t *testing.T) {
baseTestCases := []struct { baseTestCases := []struct {
description string description string
soongProperty string soongProperty string
bazelAttr attrNameToString bazelAttr AttrNameToString
}{ }{
{ {
description: "no_libcrt: true", description: "no_libcrt: true",
soongProperty: `no_libcrt: true,`, soongProperty: `no_libcrt: true,`,
bazelAttr: attrNameToString{"use_libcrt": `False`}, bazelAttr: AttrNameToString{"use_libcrt": `False`},
}, },
{ {
description: "no_libcrt: false", description: "no_libcrt: false",
soongProperty: `no_libcrt: false,`, soongProperty: `no_libcrt: false,`,
bazelAttr: attrNameToString{"use_libcrt": `True`}, bazelAttr: AttrNameToString{"use_libcrt": `True`},
}, },
{ {
description: "no_libcrt: not set", description: "no_libcrt: not set",
bazelAttr: attrNameToString{}, bazelAttr: AttrNameToString{},
}, },
} }
@@ -400,35 +400,35 @@ func TestCcBinaryPropertiesToFeatures(t *testing.T) {
baseTestCases := []struct { baseTestCases := []struct {
description string description string
soongProperty string soongProperty string
bazelAttr attrNameToString bazelAttr AttrNameToString
}{ }{
{ {
description: "pack_relocation: true", description: "pack_relocation: true",
soongProperty: `pack_relocations: true,`, soongProperty: `pack_relocations: true,`,
bazelAttr: attrNameToString{}, bazelAttr: AttrNameToString{},
}, },
{ {
description: "pack_relocations: false", description: "pack_relocations: false",
soongProperty: `pack_relocations: false,`, soongProperty: `pack_relocations: false,`,
bazelAttr: attrNameToString{"features": `["disable_pack_relocations"]`}, bazelAttr: AttrNameToString{"features": `["disable_pack_relocations"]`},
}, },
{ {
description: "pack_relocations: not set", description: "pack_relocations: not set",
bazelAttr: attrNameToString{}, bazelAttr: AttrNameToString{},
}, },
{ {
description: "pack_relocation: true", description: "pack_relocation: true",
soongProperty: `allow_undefined_symbols: true,`, soongProperty: `allow_undefined_symbols: true,`,
bazelAttr: attrNameToString{"features": `["-no_undefined_symbols"]`}, bazelAttr: AttrNameToString{"features": `["-no_undefined_symbols"]`},
}, },
{ {
description: "allow_undefined_symbols: false", description: "allow_undefined_symbols: false",
soongProperty: `allow_undefined_symbols: false,`, soongProperty: `allow_undefined_symbols: false,`,
bazelAttr: attrNameToString{}, bazelAttr: AttrNameToString{},
}, },
{ {
description: "allow_undefined_symbols: not set", description: "allow_undefined_symbols: not set",
bazelAttr: attrNameToString{}, bazelAttr: AttrNameToString{},
}, },
} }
@@ -462,11 +462,11 @@ func TestCcBinarySharedProto(t *testing.T) {
include_build_directory: false, include_build_directory: false,
}`, }`,
targets: []testBazelTarget{ targets: []testBazelTarget{
{"proto_library", "foo_proto", attrNameToString{ {"proto_library", "foo_proto", AttrNameToString{
"srcs": `["foo.proto"]`, "srcs": `["foo.proto"]`,
}}, {"cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{ }}, {"cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
"deps": `[":foo_proto"]`, "deps": `[":foo_proto"]`,
}}, {"cc_binary", "foo", attrNameToString{ }}, {"cc_binary", "foo", AttrNameToString{
"dynamic_deps": `[":libprotobuf-cpp-lite"]`, "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
"whole_archive_deps": `[":foo_cc_proto_lite"]`, "whole_archive_deps": `[":foo_cc_proto_lite"]`,
}}, }},
@@ -485,11 +485,11 @@ func TestCcBinaryStaticProto(t *testing.T) {
include_build_directory: false, include_build_directory: false,
}`, }`,
targets: []testBazelTarget{ targets: []testBazelTarget{
{"proto_library", "foo_proto", attrNameToString{ {"proto_library", "foo_proto", AttrNameToString{
"srcs": `["foo.proto"]`, "srcs": `["foo.proto"]`,
}}, {"cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{ }}, {"cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
"deps": `[":foo_proto"]`, "deps": `[":foo_proto"]`,
}}, {"cc_binary", "foo", attrNameToString{ }}, {"cc_binary", "foo", AttrNameToString{
"deps": `[":libprotobuf-cpp-lite"]`, "deps": `[":libprotobuf-cpp-lite"]`,
"whole_archive_deps": `[":foo_cc_proto_lite"]`, "whole_archive_deps": `[":foo_cc_proto_lite"]`,
"linkshared": `False`, "linkshared": `False`,
@@ -510,7 +510,7 @@ func TestCcBinaryConvertLex(t *testing.T) {
} }
`, `,
targets: []testBazelTarget{ targets: []testBazelTarget{
{"genlex", "foo_genlex_l", attrNameToString{ {"genlex", "foo_genlex_l", AttrNameToString{
"srcs": `[ "srcs": `[
"foo1.l", "foo1.l",
"foo2.l", "foo2.l",
@@ -520,7 +520,7 @@ func TestCcBinaryConvertLex(t *testing.T) {
"--bar_opt", "--bar_opt",
]`, ]`,
}}, }},
{"genlex", "foo_genlex_ll", attrNameToString{ {"genlex", "foo_genlex_ll", AttrNameToString{
"srcs": `[ "srcs": `[
"bar1.ll", "bar1.ll",
"bar2.ll", "bar2.ll",
@@ -530,7 +530,7 @@ func TestCcBinaryConvertLex(t *testing.T) {
"--bar_opt", "--bar_opt",
]`, ]`,
}}, }},
{"cc_binary", "foo", attrNameToString{ {"cc_binary", "foo", AttrNameToString{
"srcs": `[ "srcs": `[
"bar.cc", "bar.cc",
":foo_genlex_ll", ":foo_genlex_ll",

File diff suppressed because it is too large Load Diff

View File

@@ -59,17 +59,17 @@ func registerCcLibraryHeadersModuleTypes(ctx android.RegistrationContext) {
cc.RegisterCCBuildComponents(ctx) cc.RegisterCCBuildComponents(ctx)
} }
func runCcLibraryHeadersTestCase(t *testing.T, tc bp2buildTestCase) { func runCcLibraryHeadersTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerCcLibraryHeadersModuleTypes, tc) RunBp2BuildTestCase(t, registerCcLibraryHeadersModuleTypes, tc)
} }
func TestCcLibraryHeadersSimple(t *testing.T) { func TestCcLibraryHeadersSimple(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
description: "cc_library_headers test", Description: "cc_library_headers test",
moduleTypeUnderTest: "cc_library_headers", ModuleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory, ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"lib-1/lib1a.h": "", "lib-1/lib1a.h": "",
"lib-1/lib1b.h": "", "lib-1/lib1b.h": "",
"lib-2/lib2a.h": "", "lib-2/lib2a.h": "",
@@ -82,7 +82,7 @@ func TestCcLibraryHeadersSimple(t *testing.T) {
"arch_x86_exported_include_dir/b.h": "", "arch_x86_exported_include_dir/b.h": "",
"arch_x86_64_exported_include_dir/c.h": "", "arch_x86_64_exported_include_dir/c.h": "",
}, },
blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "foo_headers", name: "foo_headers",
export_include_dirs: ["dir-1", "dir-2"], export_include_dirs: ["dir-1", "dir-2"],
@@ -105,8 +105,8 @@ cc_library_headers {
// TODO: Also support export_header_lib_headers // TODO: Also support export_header_lib_headers
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{ makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"export_includes": `[ "export_includes": `[
"dir-1", "dir-1",
"dir-2", "dir-2",
@@ -124,12 +124,12 @@ cc_library_headers {
} }
func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) { func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
description: "cc_library_headers test with os-specific header_libs props", Description: "cc_library_headers test with os-specific header_libs props",
moduleTypeUnderTest: "cc_library_headers", ModuleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory, ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibraryPreamble + ` Blueprint: soongCcLibraryPreamble + `
cc_library_headers { cc_library_headers {
name: "android-lib", name: "android-lib",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -182,8 +182,8 @@ cc_library_headers {
}, },
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{ makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":base-lib"] + select({ "deps": `[":base-lib"] + select({
"//build/bazel/platforms/os:android": [":android-lib"], "//build/bazel/platforms/os:android": [":android-lib"],
"//build/bazel/platforms/os:darwin": [":darwin-lib"], "//build/bazel/platforms/os:darwin": [":darwin-lib"],
@@ -198,12 +198,12 @@ cc_library_headers {
} }
func TestCcLibraryHeadersOsSpecficHeaderLibsExportHeaderLibHeaders(t *testing.T) { func TestCcLibraryHeadersOsSpecficHeaderLibsExportHeaderLibHeaders(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
description: "cc_library_headers test with os-specific header_libs and export_header_lib_headers props", Description: "cc_library_headers test with os-specific header_libs and export_header_lib_headers props",
moduleTypeUnderTest: "cc_library_headers", ModuleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory, ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibraryPreamble + ` Blueprint: soongCcLibraryPreamble + `
cc_library_headers { cc_library_headers {
name: "android-lib", name: "android-lib",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -222,8 +222,8 @@ cc_library_headers {
}, },
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{ makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `select({ "deps": `select({
"//build/bazel/platforms/os:android": [":exported-lib"], "//build/bazel/platforms/os:android": [":exported-lib"],
"//conditions:default": [], "//conditions:default": [],
@@ -234,12 +234,12 @@ cc_library_headers {
} }
func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) { func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
description: "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props", Description: "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props",
moduleTypeUnderTest: "cc_library_headers", ModuleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory, ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibraryPreamble + `cc_library_headers { Blueprint: soongCcLibraryPreamble + `cc_library_headers {
name: "foo_headers", name: "foo_headers",
export_system_include_dirs: [ export_system_include_dirs: [
"shared_include_dir", "shared_include_dir",
@@ -275,8 +275,8 @@ func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
}, },
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{ makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"export_system_includes": `["shared_include_dir"] + select({ "export_system_includes": `["shared_include_dir"] + select({
"//build/bazel/platforms/arch:arm": ["arm_include_dir"], "//build/bazel/platforms/arch:arm": ["arm_include_dir"],
"//build/bazel/platforms/arch:x86_64": ["x86_64_include_dir"], "//build/bazel/platforms/arch:x86_64": ["x86_64_include_dir"],
@@ -293,11 +293,11 @@ func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
} }
func TestCcLibraryHeadersNoCrtIgnored(t *testing.T) { func TestCcLibraryHeadersNoCrtIgnored(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
description: "cc_library_headers test", Description: "cc_library_headers test",
moduleTypeUnderTest: "cc_library_headers", ModuleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory, ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"lib-1/lib1a.h": "", "lib-1/lib1a.h": "",
"lib-1/lib1b.h": "", "lib-1/lib1b.h": "",
"lib-2/lib2a.h": "", "lib-2/lib2a.h": "",
@@ -310,15 +310,15 @@ func TestCcLibraryHeadersNoCrtIgnored(t *testing.T) {
"arch_x86_exported_include_dir/b.h": "", "arch_x86_exported_include_dir/b.h": "",
"arch_x86_64_exported_include_dir/c.h": "", "arch_x86_64_exported_include_dir/c.h": "",
}, },
blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "lib-1", name: "lib-1",
export_include_dirs: ["lib-1"], export_include_dirs: ["lib-1"],
no_libcrt: true, no_libcrt: true,
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_headers", "lib-1", attrNameToString{ makeBazelTarget("cc_library_headers", "lib-1", AttrNameToString{
"export_includes": `["lib-1"]`, "export_includes": `["lib-1"]`,
}), }),
}, },
@@ -326,12 +326,12 @@ cc_library_headers {
} }
func TestCcLibraryHeadersExportedStaticLibHeadersReexported(t *testing.T) { func TestCcLibraryHeadersExportedStaticLibHeadersReexported(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
description: "cc_library_headers exported_static_lib_headers is reexported", Description: "cc_library_headers exported_static_lib_headers is reexported",
moduleTypeUnderTest: "cc_library_headers", ModuleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory, ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "foo_headers", name: "foo_headers",
export_static_lib_headers: ["foo_export"], export_static_lib_headers: ["foo_export"],
@@ -339,8 +339,8 @@ cc_library_headers {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"), ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{ makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":foo_export"]`, "deps": `[":foo_export"]`,
}), }),
}, },
@@ -348,12 +348,12 @@ cc_library_headers {
} }
func TestCcLibraryHeadersExportedSharedLibHeadersReexported(t *testing.T) { func TestCcLibraryHeadersExportedSharedLibHeadersReexported(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
description: "cc_library_headers exported_shared_lib_headers is reexported", Description: "cc_library_headers exported_shared_lib_headers is reexported",
moduleTypeUnderTest: "cc_library_headers", ModuleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory, ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "foo_headers", name: "foo_headers",
export_shared_lib_headers: ["foo_export"], export_shared_lib_headers: ["foo_export"],
@@ -361,8 +361,8 @@ cc_library_headers {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"), ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{ makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":foo_export"]`, "deps": `[":foo_export"]`,
}), }),
}, },
@@ -370,12 +370,12 @@ cc_library_headers {
} }
func TestCcLibraryHeadersExportedHeaderLibHeadersReexported(t *testing.T) { func TestCcLibraryHeadersExportedHeaderLibHeadersReexported(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
description: "cc_library_headers exported_header_lib_headers is reexported", Description: "cc_library_headers exported_header_lib_headers is reexported",
moduleTypeUnderTest: "cc_library_headers", ModuleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory, ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "foo_headers", name: "foo_headers",
export_header_lib_headers: ["foo_export"], export_header_lib_headers: ["foo_export"],
@@ -383,8 +383,8 @@ cc_library_headers {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"), ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_headers", "foo_headers", attrNameToString{ makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":foo_export"]`, "deps": `[":foo_export"]`,
}), }),
}, },

View File

@@ -35,17 +35,17 @@ func registerCcLibrarySharedModuleTypes(ctx android.RegistrationContext) {
ctx.RegisterModuleType("cc_library", cc.LibraryFactory) ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
} }
func runCcLibrarySharedTestCase(t *testing.T, tc bp2buildTestCase) { func runCcLibrarySharedTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "cc_library_shared" (&tc).ModuleTypeUnderTest = "cc_library_shared"
(&tc).moduleTypeUnderTestFactory = cc.LibrarySharedFactory (&tc).ModuleTypeUnderTestFactory = cc.LibrarySharedFactory
runBp2BuildTestCase(t, registerCcLibrarySharedModuleTypes, tc) RunBp2BuildTestCase(t, registerCcLibrarySharedModuleTypes, tc)
} }
func TestCcLibrarySharedSimple(t *testing.T) { func TestCcLibrarySharedSimple(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared simple overall test", Description: "cc_library_shared simple overall test",
filesystem: map[string]string{ Filesystem: map[string]string{
// NOTE: include_dir headers *should not* appear in Bazel hdrs later (?) // 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_a.h": "",
"include_dir_1/include_dir_1_b.h": "", "include_dir_1/include_dir_1_b.h": "",
@@ -65,7 +65,7 @@ func TestCcLibrarySharedSimple(t *testing.T) {
"implicit_include_1.h": "", "implicit_include_1.h": "",
"implicit_include_2.h": "", "implicit_include_2.h": "",
}, },
blueprint: soongCcLibrarySharedPreamble + ` Blueprint: soongCcLibrarySharedPreamble + `
cc_library_headers { cc_library_headers {
name: "header_lib_1", name: "header_lib_1",
export_include_dirs: ["header_lib_1"], export_include_dirs: ["header_lib_1"],
@@ -141,8 +141,8 @@ cc_library_shared {
// TODO: Also support export_header_lib_headers // TODO: Also support export_header_lib_headers
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"absolute_includes": `[ "absolute_includes": `[
"include_dir_1", "include_dir_1",
"include_dir_2", "include_dir_2",
@@ -184,10 +184,10 @@ cc_library_shared {
} }
func TestCcLibrarySharedArchSpecificSharedLib(t *testing.T) { func TestCcLibrarySharedArchSpecificSharedLib(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared arch-specific shared_libs with whole_static_libs", Description: "cc_library_shared arch-specific shared_libs with whole_static_libs",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibrarySharedPreamble + ` Blueprint: soongCcLibrarySharedPreamble + `
cc_library_static { cc_library_static {
name: "static_dep", name: "static_dep",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -201,8 +201,8 @@ cc_library_shared {
arch: { arm64: { shared_libs: ["shared_dep"], whole_static_libs: ["static_dep"] } }, arch: { arm64: { shared_libs: ["shared_dep"], whole_static_libs: ["static_dep"] } },
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"implementation_dynamic_deps": `select({ "implementation_dynamic_deps": `select({
"//build/bazel/platforms/arch:arm64": [":shared_dep"], "//build/bazel/platforms/arch:arm64": [":shared_dep"],
"//conditions:default": [], "//conditions:default": [],
@@ -217,10 +217,10 @@ cc_library_shared {
} }
func TestCcLibrarySharedOsSpecificSharedLib(t *testing.T) { func TestCcLibrarySharedOsSpecificSharedLib(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared os-specific shared_libs", Description: "cc_library_shared os-specific shared_libs",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibrarySharedPreamble + ` Blueprint: soongCcLibrarySharedPreamble + `
cc_library_shared { cc_library_shared {
name: "shared_dep", name: "shared_dep",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -230,8 +230,8 @@ cc_library_shared {
target: { android: { shared_libs: ["shared_dep"], } }, target: { android: { shared_libs: ["shared_dep"], } },
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"implementation_dynamic_deps": `select({ "implementation_dynamic_deps": `select({
"//build/bazel/platforms/os:android": [":shared_dep"], "//build/bazel/platforms/os:android": [":shared_dep"],
"//conditions:default": [], "//conditions:default": [],
@@ -242,10 +242,10 @@ cc_library_shared {
} }
func TestCcLibrarySharedBaseArchOsSpecificSharedLib(t *testing.T) { func TestCcLibrarySharedBaseArchOsSpecificSharedLib(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared base, arch, and os-specific shared_libs", Description: "cc_library_shared base, arch, and os-specific shared_libs",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibrarySharedPreamble + ` Blueprint: soongCcLibrarySharedPreamble + `
cc_library_shared { cc_library_shared {
name: "shared_dep", name: "shared_dep",
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
@@ -265,8 +265,8 @@ cc_library_shared {
arch: { arm64: { shared_libs: ["shared_dep3"] } }, arch: { arm64: { shared_libs: ["shared_dep3"] } },
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"implementation_dynamic_deps": `[":shared_dep"] + select({ "implementation_dynamic_deps": `[":shared_dep"] + select({
"//build/bazel/platforms/arch:arm64": [":shared_dep3"], "//build/bazel/platforms/arch:arm64": [":shared_dep3"],
"//conditions:default": [], "//conditions:default": [],
@@ -280,22 +280,22 @@ cc_library_shared {
} }
func TestCcLibrarySharedSimpleExcludeSrcs(t *testing.T) { func TestCcLibrarySharedSimpleExcludeSrcs(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared simple exclude_srcs", Description: "cc_library_shared simple exclude_srcs",
filesystem: map[string]string{ Filesystem: map[string]string{
"common.c": "", "common.c": "",
"foo-a.c": "", "foo-a.c": "",
"foo-excluded.c": "", "foo-excluded.c": "",
}, },
blueprint: soongCcLibrarySharedPreamble + ` Blueprint: soongCcLibrarySharedPreamble + `
cc_library_shared { cc_library_shared {
name: "foo_shared", name: "foo_shared",
srcs: ["common.c", "foo-*.c"], srcs: ["common.c", "foo-*.c"],
exclude_srcs: ["foo-excluded.c"], exclude_srcs: ["foo-excluded.c"],
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"srcs_c": `[ "srcs_c": `[
"common.c", "common.c",
"foo-a.c", "foo-a.c",
@@ -306,10 +306,10 @@ cc_library_shared {
} }
func TestCcLibrarySharedStrip(t *testing.T) { func TestCcLibrarySharedStrip(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared stripping", Description: "cc_library_shared stripping",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: soongCcLibrarySharedPreamble + ` Blueprint: soongCcLibrarySharedPreamble + `
cc_library_shared { cc_library_shared {
name: "foo_shared", name: "foo_shared",
strip: { strip: {
@@ -321,8 +321,8 @@ cc_library_shared {
}, },
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"strip": `{ "strip": `{
"all": True, "all": True,
"keep_symbols": False, "keep_symbols": False,
@@ -339,19 +339,19 @@ cc_library_shared {
} }
func TestCcLibrarySharedVersionScript(t *testing.T) { func TestCcLibrarySharedVersionScript(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared version script", Description: "cc_library_shared version script",
filesystem: map[string]string{ Filesystem: map[string]string{
"version_script": "", "version_script": "",
}, },
blueprint: soongCcLibrarySharedPreamble + ` Blueprint: soongCcLibrarySharedPreamble + `
cc_library_shared { cc_library_shared {
name: "foo_shared", name: "foo_shared",
version_script: "version_script", version_script: "version_script",
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"additional_linker_inputs": `["version_script"]`, "additional_linker_inputs": `["version_script"]`,
"linkopts": `["-Wl,--version-script,$(location version_script)"]`, "linkopts": `["-Wl,--version-script,$(location version_script)"]`,
}), }),
@@ -360,12 +360,12 @@ cc_library_shared {
} }
func TestCcLibrarySharedNoCrtTrue(t *testing.T) { func TestCcLibrarySharedNoCrtTrue(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared - nocrt: true emits attribute", Description: "cc_library_shared - nocrt: true emits attribute",
filesystem: map[string]string{ Filesystem: map[string]string{
"impl.cpp": "", "impl.cpp": "",
}, },
blueprint: soongCcLibraryPreamble + ` Blueprint: soongCcLibraryPreamble + `
cc_library_shared { cc_library_shared {
name: "foo_shared", name: "foo_shared",
srcs: ["impl.cpp"], srcs: ["impl.cpp"],
@@ -373,8 +373,8 @@ cc_library_shared {
include_build_directory: false, include_build_directory: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"link_crt": `False`, "link_crt": `False`,
"srcs": `["impl.cpp"]`, "srcs": `["impl.cpp"]`,
}), }),
@@ -383,12 +383,12 @@ cc_library_shared {
} }
func TestCcLibrarySharedNoCrtFalse(t *testing.T) { func TestCcLibrarySharedNoCrtFalse(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared - nocrt: false doesn't emit attribute", Description: "cc_library_shared - nocrt: false doesn't emit attribute",
filesystem: map[string]string{ Filesystem: map[string]string{
"impl.cpp": "", "impl.cpp": "",
}, },
blueprint: soongCcLibraryPreamble + ` Blueprint: soongCcLibraryPreamble + `
cc_library_shared { cc_library_shared {
name: "foo_shared", name: "foo_shared",
srcs: ["impl.cpp"], srcs: ["impl.cpp"],
@@ -396,8 +396,8 @@ cc_library_shared {
include_build_directory: false, include_build_directory: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo_shared", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
"srcs": `["impl.cpp"]`, "srcs": `["impl.cpp"]`,
}), }),
}, },
@@ -405,12 +405,12 @@ cc_library_shared {
} }
func TestCcLibrarySharedNoCrtArchVariant(t *testing.T) { func TestCcLibrarySharedNoCrtArchVariant(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared - nocrt in select", Description: "cc_library_shared - nocrt in select",
filesystem: map[string]string{ Filesystem: map[string]string{
"impl.cpp": "", "impl.cpp": "",
}, },
blueprint: soongCcLibraryPreamble + ` Blueprint: soongCcLibraryPreamble + `
cc_library_shared { cc_library_shared {
name: "foo_shared", name: "foo_shared",
srcs: ["impl.cpp"], srcs: ["impl.cpp"],
@@ -425,13 +425,13 @@ cc_library_shared {
include_build_directory: false, 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) { func TestCcLibrarySharedProto(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
blueprint: soongCcProtoPreamble + `cc_library_shared { Blueprint: soongCcProtoPreamble + `cc_library_shared {
name: "foo", name: "foo",
srcs: ["foo.proto"], srcs: ["foo.proto"],
proto: { proto: {
@@ -439,12 +439,12 @@ func TestCcLibrarySharedProto(t *testing.T) {
}, },
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("proto_library", "foo_proto", attrNameToString{ makeBazelTarget("proto_library", "foo_proto", AttrNameToString{
"srcs": `["foo.proto"]`, "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"]`, "deps": `[":foo_proto"]`,
}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{ }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"dynamic_deps": `[":libprotobuf-cpp-lite"]`, "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
"whole_archive_deps": `[":foo_cc_proto_lite"]`, "whole_archive_deps": `[":foo_cc_proto_lite"]`,
}), }),
@@ -453,14 +453,14 @@ func TestCcLibrarySharedProto(t *testing.T) {
} }
func TestCcLibrarySharedUseVersionLib(t *testing.T) { func TestCcLibrarySharedUseVersionLib(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
blueprint: soongCcProtoPreamble + `cc_library_shared { Blueprint: soongCcProtoPreamble + `cc_library_shared {
name: "foo", name: "foo",
use_version_lib: true, use_version_lib: true,
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo", attrNameToString{ makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"use_version_lib": "True", "use_version_lib": "True",
}), }),
}, },
@@ -468,12 +468,12 @@ func TestCcLibrarySharedUseVersionLib(t *testing.T) {
} }
func TestCcLibrarySharedStubs(t *testing.T) { func TestCcLibrarySharedStubs(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared stubs", Description: "cc_library_shared stubs",
moduleTypeUnderTest: "cc_library_shared", ModuleTypeUnderTest: "cc_library_shared",
moduleTypeUnderTestFactory: cc.LibrarySharedFactory, ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
dir: "foo/bar", Dir: "foo/bar",
filesystem: map[string]string{ Filesystem: map[string]string{
"foo/bar/Android.bp": ` "foo/bar/Android.bp": `
cc_library_shared { cc_library_shared {
name: "a", name: "a",
@@ -483,8 +483,8 @@ cc_library_shared {
} }
`, `,
}, },
blueprint: soongCcLibraryPreamble, Blueprint: soongCcLibraryPreamble,
expectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "a", attrNameToString{ ExpectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "a", AttrNameToString{
"stubs_symbol_file": `"a.map.txt"`, "stubs_symbol_file": `"a.map.txt"`,
"stubs_versions": `[ "stubs_versions": `[
"28", "28",
@@ -498,11 +498,11 @@ cc_library_shared {
} }
func TestCcLibrarySharedSystemSharedLibsSharedEmpty(t *testing.T) { func TestCcLibrarySharedSystemSharedLibsSharedEmpty(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared system_shared_libs empty shared default", Description: "cc_library_shared system_shared_libs empty shared default",
moduleTypeUnderTest: "cc_library_shared", ModuleTypeUnderTest: "cc_library_shared",
moduleTypeUnderTestFactory: cc.LibrarySharedFactory, ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
blueprint: soongCcLibrarySharedPreamble + ` Blueprint: soongCcLibrarySharedPreamble + `
cc_defaults { cc_defaults {
name: "empty_defaults", name: "empty_defaults",
shared: { shared: {
@@ -515,18 +515,18 @@ cc_library_shared {
defaults: ["empty_defaults"], defaults: ["empty_defaults"],
} }
`, `,
expectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "empty", attrNameToString{ ExpectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "empty", AttrNameToString{
"system_dynamic_deps": "[]", "system_dynamic_deps": "[]",
})}, })},
}) })
} }
func TestCcLibrarySharedConvertLex(t *testing.T) { func TestCcLibrarySharedConvertLex(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_shared with lex files", Description: "cc_library_shared with lex files",
moduleTypeUnderTest: "cc_library_shared", ModuleTypeUnderTest: "cc_library_shared",
moduleTypeUnderTestFactory: cc.LibrarySharedFactory, ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"foo.c": "", "foo.c": "",
"bar.cc": "", "bar.cc": "",
"foo1.l": "", "foo1.l": "",
@@ -534,29 +534,29 @@ func TestCcLibrarySharedConvertLex(t *testing.T) {
"foo2.l": "", "foo2.l": "",
"bar2.ll": "", "bar2.ll": "",
}, },
blueprint: `cc_library_shared { Blueprint: `cc_library_shared {
name: "foo_lib", name: "foo_lib",
srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"], srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
lex: { flags: ["--foo_flags"] }, lex: { flags: ["--foo_flags"] },
include_build_directory: false, include_build_directory: false,
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("genlex", "foo_lib_genlex_l", attrNameToString{ makeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{
"srcs": `[ "srcs": `[
"foo1.l", "foo1.l",
"foo2.l", "foo2.l",
]`, ]`,
"lexopts": `["--foo_flags"]`, "lexopts": `["--foo_flags"]`,
}), }),
makeBazelTarget("genlex", "foo_lib_genlex_ll", attrNameToString{ makeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{
"srcs": `[ "srcs": `[
"bar1.ll", "bar1.ll",
"bar2.ll", "bar2.ll",
]`, ]`,
"lexopts": `["--foo_flags"]`, "lexopts": `["--foo_flags"]`,
}), }),
makeBazelTarget("cc_library_shared", "foo_lib", attrNameToString{ makeBazelTarget("cc_library_shared", "foo_lib", AttrNameToString{
"srcs": `[ "srcs": `[
"bar.cc", "bar.cc",
":foo_lib_genlex_ll", ":foo_lib_genlex_ll",
@@ -571,8 +571,8 @@ func TestCcLibrarySharedConvertLex(t *testing.T) {
} }
func TestCcLibrarySharedClangUnknownFlags(t *testing.T) { func TestCcLibrarySharedClangUnknownFlags(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
blueprint: soongCcProtoPreamble + `cc_library_shared { Blueprint: soongCcProtoPreamble + `cc_library_shared {
name: "foo", name: "foo",
conlyflags: ["-a", "-finline-functions"], conlyflags: ["-a", "-finline-functions"],
cflags: ["-b","-finline-functions"], cflags: ["-b","-finline-functions"],
@@ -580,8 +580,8 @@ func TestCcLibrarySharedClangUnknownFlags(t *testing.T) {
ldflags: ["-d","-finline-functions", "-e"], ldflags: ["-d","-finline-functions", "-e"],
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo", attrNameToString{ makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"conlyflags": `["-a"]`, "conlyflags": `["-a"]`,
"copts": `["-b"]`, "copts": `["-b"]`,
"cppflags": `["-c"]`, "cppflags": `["-c"]`,
@@ -595,8 +595,8 @@ func TestCcLibrarySharedClangUnknownFlags(t *testing.T) {
} }
func TestCCLibraryFlagSpaceSplitting(t *testing.T) { func TestCCLibraryFlagSpaceSplitting(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
blueprint: soongCcProtoPreamble + `cc_library_shared { Blueprint: soongCcProtoPreamble + `cc_library_shared {
name: "foo", name: "foo",
conlyflags: [ "-include header.h"], conlyflags: [ "-include header.h"],
cflags: ["-include header.h"], cflags: ["-include header.h"],
@@ -604,8 +604,8 @@ func TestCCLibraryFlagSpaceSplitting(t *testing.T) {
version_script: "version_script", version_script: "version_script",
include_build_directory: false, include_build_directory: false,
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_library_shared", "foo", attrNameToString{ makeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"additional_linker_inputs": `["version_script"]`, "additional_linker_inputs": `["version_script"]`,
"conlyflags": `[ "conlyflags": `[
"-include", "-include",

File diff suppressed because it is too large Load Diff

View File

@@ -26,23 +26,23 @@ func registerCcObjectModuleTypes(ctx android.RegistrationContext) {
ctx.RegisterModuleType("cc_defaults", func() android.Module { return cc.DefaultsFactory() }) 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() t.Helper()
(&tc).moduleTypeUnderTest = "cc_object" (&tc).ModuleTypeUnderTest = "cc_object"
(&tc).moduleTypeUnderTestFactory = cc.ObjectFactory (&tc).ModuleTypeUnderTestFactory = cc.ObjectFactory
runBp2BuildTestCase(t, registerCcObjectModuleTypes, tc) RunBp2BuildTestCase(t, registerCcObjectModuleTypes, tc)
} }
func TestCcObjectSimple(t *testing.T) { func TestCcObjectSimple(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "simple cc_object generates cc_object with include header dep", Description: "simple cc_object generates cc_object with include header dep",
filesystem: map[string]string{ Filesystem: map[string]string{
"a/b/foo.h": "", "a/b/foo.h": "",
"a/b/bar.h": "", "a/b/bar.h": "",
"a/b/exclude.c": "", "a/b/exclude.c": "",
"a/b/c.c": "", "a/b/c.c": "",
}, },
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
local_include_dirs: ["include"], local_include_dirs: ["include"],
system_shared_libs: [], system_shared_libs: [],
@@ -59,8 +59,8 @@ func TestCcObjectSimple(t *testing.T) {
min_sdk_version: "29", min_sdk_version: "29",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `[ "copts": `[
"-fno-addrsig", "-fno-addrsig",
"-Wno-gcc-compat", "-Wno-gcc-compat",
@@ -73,16 +73,16 @@ func TestCcObjectSimple(t *testing.T) {
]`, ]`,
"srcs": `["a/b/c.c"]`, "srcs": `["a/b/c.c"]`,
"system_dynamic_deps": `[]`, "system_dynamic_deps": `[]`,
"sdk_version": `"current"`, "sdk_version": `"current"`,
"min_sdk_version": `"29"`, "min_sdk_version": `"29"`,
}), }),
}, },
}) })
} }
func TestCcObjectDefaults(t *testing.T) { func TestCcObjectDefaults(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
system_shared_libs: [], system_shared_libs: [],
srcs: [ srcs: [
@@ -105,8 +105,8 @@ cc_defaults {
], ],
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `[ "copts": `[
"-Werror", "-Werror",
"-fno-addrsig", "-fno-addrsig",
@@ -119,13 +119,13 @@ cc_defaults {
} }
func TestCcObjectCcObjetDepsInObjs(t *testing.T) { func TestCcObjectCcObjetDepsInObjs(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "cc_object with cc_object deps in objs props", Description: "cc_object with cc_object deps in objs props",
filesystem: map[string]string{ Filesystem: map[string]string{
"a/b/c.c": "", "a/b/c.c": "",
"x/y/z.c": "", "x/y/z.c": "",
}, },
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
system_shared_libs: [], system_shared_libs: [],
srcs: ["a/b/c.c"], srcs: ["a/b/c.c"],
@@ -140,12 +140,12 @@ cc_object {
include_build_directory: false, include_build_directory: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "bar", attrNameToString{ makeBazelTarget("cc_object", "bar", AttrNameToString{
"copts": `["-fno-addrsig"]`, "copts": `["-fno-addrsig"]`,
"srcs": `["x/y/z.c"]`, "srcs": `["x/y/z.c"]`,
"system_dynamic_deps": `[]`, "system_dynamic_deps": `[]`,
}), makeBazelTarget("cc_object", "foo", attrNameToString{ }), makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `["-fno-addrsig"]`, "copts": `["-fno-addrsig"]`,
"deps": `[":bar"]`, "deps": `[":bar"]`,
"srcs": `["a/b/c.c"]`, "srcs": `["a/b/c.c"]`,
@@ -156,21 +156,21 @@ cc_object {
} }
func TestCcObjectIncludeBuildDirFalse(t *testing.T) { func TestCcObjectIncludeBuildDirFalse(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "cc_object with include_build_dir: false", Description: "cc_object with include_build_dir: false",
filesystem: map[string]string{ Filesystem: map[string]string{
"a/b/c.c": "", "a/b/c.c": "",
"x/y/z.c": "", "x/y/z.c": "",
}, },
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
system_shared_libs: [], system_shared_libs: [],
srcs: ["a/b/c.c"], srcs: ["a/b/c.c"],
include_build_directory: false, include_build_directory: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `["-fno-addrsig"]`, "copts": `["-fno-addrsig"]`,
"srcs": `["a/b/c.c"]`, "srcs": `["a/b/c.c"]`,
"system_dynamic_deps": `[]`, "system_dynamic_deps": `[]`,
@@ -180,9 +180,9 @@ func TestCcObjectIncludeBuildDirFalse(t *testing.T) {
} }
func TestCcObjectProductVariable(t *testing.T) { func TestCcObjectProductVariable(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "cc_object with product variable", Description: "cc_object with product variable",
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
system_shared_libs: [], system_shared_libs: [],
include_build_directory: false, include_build_directory: false,
@@ -194,8 +194,8 @@ func TestCcObjectProductVariable(t *testing.T) {
srcs: ["src.S"], srcs: ["src.S"],
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"asflags": `select({ "asflags": `select({
"//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"], "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
"//conditions:default": [], "//conditions:default": [],
@@ -209,9 +209,9 @@ func TestCcObjectProductVariable(t *testing.T) {
} }
func TestCcObjectCflagsOneArch(t *testing.T) { func TestCcObjectCflagsOneArch(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "cc_object setting cflags for one arch", Description: "cc_object setting cflags for one arch",
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
system_shared_libs: [], system_shared_libs: [],
srcs: ["a.cpp"], srcs: ["a.cpp"],
@@ -226,8 +226,8 @@ func TestCcObjectCflagsOneArch(t *testing.T) {
include_build_directory: false, include_build_directory: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `["-fno-addrsig"] + select({ "copts": `["-fno-addrsig"] + select({
"//build/bazel/platforms/arch:x86": ["-fPIC"], "//build/bazel/platforms/arch:x86": ["-fPIC"],
"//conditions:default": [], "//conditions:default": [],
@@ -243,9 +243,9 @@ func TestCcObjectCflagsOneArch(t *testing.T) {
} }
func TestCcObjectCflagsFourArch(t *testing.T) { func TestCcObjectCflagsFourArch(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "cc_object setting cflags for 4 architectures", Description: "cc_object setting cflags for 4 architectures",
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
system_shared_libs: [], system_shared_libs: [],
srcs: ["base.cpp"], srcs: ["base.cpp"],
@@ -270,8 +270,8 @@ func TestCcObjectCflagsFourArch(t *testing.T) {
include_build_directory: false, include_build_directory: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `["-fno-addrsig"] + select({ "copts": `["-fno-addrsig"] + select({
"//build/bazel/platforms/arch:arm": ["-Wall"], "//build/bazel/platforms/arch:arm": ["-Wall"],
"//build/bazel/platforms/arch:arm64": ["-Wall"], "//build/bazel/platforms/arch:arm64": ["-Wall"],
@@ -293,17 +293,17 @@ func TestCcObjectCflagsFourArch(t *testing.T) {
} }
func TestCcObjectLinkerScript(t *testing.T) { func TestCcObjectLinkerScript(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "cc_object setting linker_script", Description: "cc_object setting linker_script",
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
srcs: ["base.cpp"], srcs: ["base.cpp"],
linker_script: "bunny.lds", linker_script: "bunny.lds",
include_build_directory: false, include_build_directory: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `["-fno-addrsig"]`, "copts": `["-fno-addrsig"]`,
"linker_script": `"bunny.lds"`, "linker_script": `"bunny.lds"`,
"srcs": `["base.cpp"]`, "srcs": `["base.cpp"]`,
@@ -313,9 +313,9 @@ func TestCcObjectLinkerScript(t *testing.T) {
} }
func TestCcObjectDepsAndLinkerScriptSelects(t *testing.T) { func TestCcObjectDepsAndLinkerScriptSelects(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "cc_object setting deps and linker_script across archs", Description: "cc_object setting deps and linker_script across archs",
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
srcs: ["base.cpp"], srcs: ["base.cpp"],
arch: { arch: {
@@ -359,8 +359,8 @@ cc_object {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `["-fno-addrsig"]`, "copts": `["-fno-addrsig"]`,
"deps": `select({ "deps": `select({
"//build/bazel/platforms/arch:arm": [":arm_obj"], "//build/bazel/platforms/arch:arm": [":arm_obj"],
@@ -381,9 +381,9 @@ cc_object {
} }
func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) { func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) {
runCcObjectTestCase(t, bp2buildTestCase{ runCcObjectTestCase(t, Bp2buildTestCase{
description: "cc_object setting srcs based on linux and bionic archs", Description: "cc_object setting srcs based on linux and bionic archs",
blueprint: `cc_object { Blueprint: `cc_object {
name: "foo", name: "foo",
srcs: ["base.cpp"], srcs: ["base.cpp"],
target: { target: {
@@ -400,8 +400,8 @@ func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) {
include_build_directory: false, include_build_directory: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("cc_object", "foo", attrNameToString{ makeBazelTarget("cc_object", "foo", AttrNameToString{
"copts": `["-fno-addrsig"]`, "copts": `["-fno-addrsig"]`,
"srcs": `["base.cpp"] + select({ "srcs": `["base.cpp"] + select({
"//build/bazel/platforms/os_arch:android_arm64": [ "//build/bazel/platforms/os_arch:android_arm64": [

View File

@@ -22,24 +22,24 @@ import (
func TestPrebuiltLibraryStaticAndSharedSimple(t *testing.T) { func TestPrebuiltLibraryStaticAndSharedSimple(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library static and shared simple", Description: "prebuilt library static and shared simple",
moduleTypeUnderTest: "cc_prebuilt_library", ModuleTypeUnderTest: "cc_prebuilt_library",
moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library { cc_prebuilt_library {
name: "libtest", name: "libtest",
srcs: ["libf.so"], srcs: ["libf.so"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", attrNameToString{ makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{
"static_library": `"libf.so"`, "static_library": `"libf.so"`,
}), }),
makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{ makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
"shared_library": `"libf.so"`, "shared_library": `"libf.so"`,
}), }),
}, },
@@ -48,15 +48,15 @@ cc_prebuilt_library {
func TestPrebuiltLibraryWithArchVariance(t *testing.T) { func TestPrebuiltLibraryWithArchVariance(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library with arch variance", Description: "prebuilt library with arch variance",
moduleTypeUnderTest: "cc_prebuilt_library", ModuleTypeUnderTest: "cc_prebuilt_library",
moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"libg.so": "", "libg.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library { cc_prebuilt_library {
name: "libtest", name: "libtest",
arch: { arch: {
@@ -65,15 +65,15 @@ cc_prebuilt_library {
}, },
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", attrNameToString{ makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{
"static_library": `select({ "static_library": `select({
"//build/bazel/platforms/arch:arm": "libg.so", "//build/bazel/platforms/arch:arm": "libg.so",
"//build/bazel/platforms/arch:arm64": "libf.so", "//build/bazel/platforms/arch:arm64": "libf.so",
"//conditions:default": None, "//conditions:default": None,
})`, })`,
}), }),
makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{ makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
"shared_library": `select({ "shared_library": `select({
"//build/bazel/platforms/arch:arm": "libg.so", "//build/bazel/platforms/arch:arm": "libg.so",
"//build/bazel/platforms/arch:arm64": "libf.so", "//build/bazel/platforms/arch:arm64": "libf.so",
@@ -86,16 +86,16 @@ cc_prebuilt_library {
func TestPrebuiltLibraryAdditionalAttrs(t *testing.T) { func TestPrebuiltLibraryAdditionalAttrs(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library additional attributes", Description: "prebuilt library additional attributes",
moduleTypeUnderTest: "cc_prebuilt_library", ModuleTypeUnderTest: "cc_prebuilt_library",
moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"testdir/1/": "", "testdir/1/": "",
"testdir/2/": "", "testdir/2/": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library { cc_prebuilt_library {
name: "libtest", name: "libtest",
srcs: ["libf.so"], srcs: ["libf.so"],
@@ -103,14 +103,14 @@ cc_prebuilt_library {
export_system_include_dirs: ["testdir/2/"], export_system_include_dirs: ["testdir/2/"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", attrNameToString{ makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{
"static_library": `"libf.so"`, "static_library": `"libf.so"`,
"export_includes": `["testdir/1/"]`, "export_includes": `["testdir/1/"]`,
"export_system_includes": `["testdir/2/"]`, "export_system_includes": `["testdir/2/"]`,
}), }),
// TODO(b/229374533): When fixed, update this test // TODO(b/229374533): When fixed, update this test
makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{ makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
"shared_library": `"libf.so"`, "shared_library": `"libf.so"`,
}), }),
}, },
@@ -119,15 +119,15 @@ cc_prebuilt_library {
func TestPrebuiltLibrarySharedStanzaFails(t *testing.T) { func TestPrebuiltLibrarySharedStanzaFails(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library with shared stanza fails because multiple sources", Description: "prebuilt library with shared stanza fails because multiple sources",
moduleTypeUnderTest: "cc_prebuilt_library", ModuleTypeUnderTest: "cc_prebuilt_library",
moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"libg.so": "", "libg.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library { cc_prebuilt_library {
name: "libtest", name: "libtest",
srcs: ["libf.so"], srcs: ["libf.so"],
@@ -136,21 +136,21 @@ cc_prebuilt_library {
}, },
bazel_module: { bp2build_available: true }, 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) { func TestPrebuiltLibraryStaticStanzaFails(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library with static stanza fails because multiple sources", Description: "prebuilt library with static stanza fails because multiple sources",
moduleTypeUnderTest: "cc_prebuilt_library", ModuleTypeUnderTest: "cc_prebuilt_library",
moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"libg.so": "", "libg.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library { cc_prebuilt_library {
name: "libtest", name: "libtest",
srcs: ["libf.so"], srcs: ["libf.so"],
@@ -159,21 +159,21 @@ cc_prebuilt_library {
}, },
bazel_module: { bp2build_available: true }, 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) { func TestPrebuiltLibrarySharedAndStaticStanzas(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library with both shared and static stanzas", Description: "prebuilt library with both shared and static stanzas",
moduleTypeUnderTest: "cc_prebuilt_library", ModuleTypeUnderTest: "cc_prebuilt_library",
moduleTypeUnderTestFactory: cc.PrebuiltLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"libg.so": "", "libg.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library { cc_prebuilt_library {
name: "libtest", name: "libtest",
static: { static: {
@@ -184,11 +184,11 @@ cc_prebuilt_library {
}, },
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", attrNameToString{ makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{
"static_library": `"libf.so"`, "static_library": `"libf.so"`,
}), }),
makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{ makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
"shared_library": `"libg.so"`, "shared_library": `"libg.so"`,
}), }),
}, },

View File

@@ -9,21 +9,21 @@ import (
func TestSharedPrebuiltLibrary(t *testing.T) { func TestSharedPrebuiltLibrary(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library shared simple", Description: "prebuilt library shared simple",
moduleTypeUnderTest: "cc_prebuilt_library_shared", ModuleTypeUnderTest: "cc_prebuilt_library_shared",
moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library_shared { cc_prebuilt_library_shared {
name: "libtest", name: "libtest",
srcs: ["libf.so"], srcs: ["libf.so"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{ makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
"shared_library": `"libf.so"`, "shared_library": `"libf.so"`,
}), }),
}, },
@@ -32,15 +32,15 @@ cc_prebuilt_library_shared {
func TestSharedPrebuiltLibraryWithArchVariance(t *testing.T) { func TestSharedPrebuiltLibraryWithArchVariance(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library shared with arch variance", Description: "prebuilt library shared with arch variance",
moduleTypeUnderTest: "cc_prebuilt_library_shared", ModuleTypeUnderTest: "cc_prebuilt_library_shared",
moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"libg.so": "", "libg.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library_shared { cc_prebuilt_library_shared {
name: "libtest", name: "libtest",
arch: { arch: {
@@ -49,8 +49,8 @@ cc_prebuilt_library_shared {
}, },
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_library_shared", "libtest", attrNameToString{ makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{
"shared_library": `select({ "shared_library": `select({
"//build/bazel/platforms/arch:arm": "libg.so", "//build/bazel/platforms/arch:arm": "libg.so",
"//build/bazel/platforms/arch:arm64": "libf.so", "//build/bazel/platforms/arch:arm64": "libf.so",
@@ -63,15 +63,15 @@ cc_prebuilt_library_shared {
func TestSharedPrebuiltLibrarySharedStanzaFails(t *testing.T) { func TestSharedPrebuiltLibrarySharedStanzaFails(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library shared with shared stanza fails because multiple sources", Description: "prebuilt library shared with shared stanza fails because multiple sources",
moduleTypeUnderTest: "cc_prebuilt_library_shared", ModuleTypeUnderTest: "cc_prebuilt_library_shared",
moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"libg.so": "", "libg.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library_shared { cc_prebuilt_library_shared {
name: "libtest", name: "libtest",
srcs: ["libf.so"], srcs: ["libf.so"],
@@ -80,6 +80,6 @@ cc_prebuilt_library_shared {
}, },
bazel_module: { bp2build_available: true}, bazel_module: { bp2build_available: true},
}`, }`,
expectedErr: fmt.Errorf("Expected at most one source file"), ExpectedErr: fmt.Errorf("Expected at most one source file"),
}) })
} }

View File

@@ -22,21 +22,21 @@ import (
func TestStaticPrebuiltLibrary(t *testing.T) { func TestStaticPrebuiltLibrary(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library static simple", Description: "prebuilt library static simple",
moduleTypeUnderTest: "cc_prebuilt_library_static", ModuleTypeUnderTest: "cc_prebuilt_library_static",
moduleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library_static { cc_prebuilt_library_static {
name: "libtest", name: "libtest",
srcs: ["libf.so"], srcs: ["libf.so"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_library_static", "libtest", attrNameToString{ makeBazelTarget("prebuilt_library_static", "libtest", AttrNameToString{
"static_library": `"libf.so"`, "static_library": `"libf.so"`,
}), }),
}, },
@@ -45,15 +45,15 @@ cc_prebuilt_library_static {
func TestStaticPrebuiltLibraryWithArchVariance(t *testing.T) { func TestStaticPrebuiltLibraryWithArchVariance(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library static with arch variance", Description: "prebuilt library static with arch variance",
moduleTypeUnderTest: "cc_prebuilt_library_static", ModuleTypeUnderTest: "cc_prebuilt_library_static",
moduleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"libg.so": "", "libg.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library_static { cc_prebuilt_library_static {
name: "libtest", name: "libtest",
arch: { arch: {
@@ -62,8 +62,8 @@ cc_prebuilt_library_static {
}, },
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_library_static", "libtest", attrNameToString{ makeBazelTarget("prebuilt_library_static", "libtest", AttrNameToString{
"static_library": `select({ "static_library": `select({
"//build/bazel/platforms/arch:arm": "libg.so", "//build/bazel/platforms/arch:arm": "libg.so",
"//build/bazel/platforms/arch:arm64": "libf.so", "//build/bazel/platforms/arch:arm64": "libf.so",
@@ -76,15 +76,15 @@ cc_prebuilt_library_static {
func TestStaticPrebuiltLibraryStaticStanzaFails(t *testing.T) { func TestStaticPrebuiltLibraryStaticStanzaFails(t *testing.T) {
runBp2BuildTestCaseSimple(t, runBp2BuildTestCaseSimple(t,
bp2buildTestCase{ Bp2buildTestCase{
description: "prebuilt library with static stanza fails because multiple sources", Description: "prebuilt library with static stanza fails because multiple sources",
moduleTypeUnderTest: "cc_prebuilt_library_static", ModuleTypeUnderTest: "cc_prebuilt_library_static",
moduleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory, ModuleTypeUnderTestFactory: cc.PrebuiltStaticLibraryFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"libf.so": "", "libf.so": "",
"libg.so": "", "libg.so": "",
}, },
blueprint: ` Blueprint: `
cc_prebuilt_library_static { cc_prebuilt_library_static {
name: "libtest", name: "libtest",
srcs: ["libf.so"], srcs: ["libf.so"],
@@ -93,16 +93,16 @@ cc_prebuilt_library_static {
}, },
bazel_module: { bp2build_available: true }, 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) { func TestCcLibraryStaticConvertLex(t *testing.T) {
runCcLibrarySharedTestCase(t, bp2buildTestCase{ runCcLibrarySharedTestCase(t, Bp2buildTestCase{
description: "cc_library_static with lex files", Description: "cc_library_static with lex files",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"foo.c": "", "foo.c": "",
"bar.cc": "", "bar.cc": "",
"foo1.l": "", "foo1.l": "",
@@ -110,29 +110,29 @@ func TestCcLibraryStaticConvertLex(t *testing.T) {
"foo2.l": "", "foo2.l": "",
"bar2.ll": "", "bar2.ll": "",
}, },
blueprint: `cc_library_static { Blueprint: `cc_library_static {
name: "foo_lib", name: "foo_lib",
srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"], srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
lex: { flags: ["--foo_flags"] }, lex: { flags: ["--foo_flags"] },
include_build_directory: false, include_build_directory: false,
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("genlex", "foo_lib_genlex_l", attrNameToString{ makeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{
"srcs": `[ "srcs": `[
"foo1.l", "foo1.l",
"foo2.l", "foo2.l",
]`, ]`,
"lexopts": `["--foo_flags"]`, "lexopts": `["--foo_flags"]`,
}), }),
makeBazelTarget("genlex", "foo_lib_genlex_ll", attrNameToString{ makeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{
"srcs": `[ "srcs": `[
"bar1.ll", "bar1.ll",
"bar2.ll", "bar2.ll",
]`, ]`,
"lexopts": `["--foo_flags"]`, "lexopts": `["--foo_flags"]`,
}), }),
makeBazelTarget("cc_library_static", "foo_lib", attrNameToString{ makeBazelTarget("cc_library_static", "foo_lib", AttrNameToString{
"srcs": `[ "srcs": `[
"bar.cc", "bar.cc",
":foo_lib_genlex_ll", ":foo_lib_genlex_ll",

View File

@@ -21,38 +21,38 @@ import (
"testing" "testing"
) )
func runFilegroupTestCase(t *testing.T, tc bp2buildTestCase) { func runFilegroupTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "filegroup" (&tc).ModuleTypeUnderTest = "filegroup"
(&tc).moduleTypeUnderTestFactory = android.FileGroupFactory (&tc).ModuleTypeUnderTestFactory = android.FileGroupFactory
runBp2BuildTestCase(t, registerFilegroupModuleTypes, tc) RunBp2BuildTestCase(t, registerFilegroupModuleTypes, tc)
} }
func registerFilegroupModuleTypes(ctx android.RegistrationContext) {} func registerFilegroupModuleTypes(ctx android.RegistrationContext) {}
func TestFilegroupSameNameAsFile_OneFile(t *testing.T) { func TestFilegroupSameNameAsFile_OneFile(t *testing.T) {
runFilegroupTestCase(t, bp2buildTestCase{ runFilegroupTestCase(t, Bp2buildTestCase{
description: "filegroup - same name as file, with one file", Description: "filegroup - same name as file, with one file",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
filegroup { filegroup {
name: "foo", name: "foo",
srcs: ["foo"], srcs: ["foo"],
} }
`, `,
expectedBazelTargets: []string{}}) ExpectedBazelTargets: []string{}})
} }
func TestFilegroupSameNameAsFile_MultipleFiles(t *testing.T) { func TestFilegroupSameNameAsFile_MultipleFiles(t *testing.T) {
runFilegroupTestCase(t, bp2buildTestCase{ runFilegroupTestCase(t, Bp2buildTestCase{
description: "filegroup - same name as file, with multiple files", Description: "filegroup - same name as file, with multiple files",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
filegroup { filegroup {
name: "foo", name: "foo",
srcs: ["foo", "bar"], 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"),
}) })
} }

View File

@@ -27,11 +27,11 @@ func registerGenruleModuleTypes(ctx android.RegistrationContext) {
ctx.RegisterModuleType("genrule_defaults", func() android.Module { return genrule.DefaultsFactory() }) 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() t.Helper()
(&tc).moduleTypeUnderTest = "genrule" (&tc).ModuleTypeUnderTest = "genrule"
(&tc).moduleTypeUnderTestFactory = genrule.GenRuleFactory (&tc).ModuleTypeUnderTestFactory = genrule.GenRuleFactory
runBp2BuildTestCase(t, registerGenruleModuleTypes, tc) RunBp2BuildTestCase(t, registerGenruleModuleTypes, tc)
} }
func otherGenruleBp(genruleTarget string) map[string]string { func otherGenruleBp(genruleTarget string) map[string]string {
@@ -101,7 +101,7 @@ func TestGenruleCliVariableReplacement(t *testing.T) {
}` }`
for _, tc := range testCases { for _, tc := range testCases {
moduleAttrs := attrNameToString{ moduleAttrs := AttrNameToString{
"cmd": fmt.Sprintf(`"$(location :foo.tool) --genDir=%s arg $(SRCS) $(OUTS)"`, tc.genDir), "cmd": fmt.Sprintf(`"$(location :foo.tool) --genDir=%s arg $(SRCS) $(OUTS)"`, tc.genDir),
"outs": `["foo.out"]`, "outs": `["foo.out"]`,
"srcs": `["foo.in"]`, "srcs": `["foo.in"]`,
@@ -113,12 +113,12 @@ func TestGenruleCliVariableReplacement(t *testing.T) {
} }
t.Run(tc.moduleType, func(t *testing.T) { t.Run(tc.moduleType, func(t *testing.T) {
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
bp2buildTestCase{ Bp2buildTestCase{
moduleTypeUnderTest: tc.moduleType, ModuleTypeUnderTest: tc.moduleType,
moduleTypeUnderTestFactory: tc.factory, ModuleTypeUnderTestFactory: tc.factory,
blueprint: fmt.Sprintf(bp, tc.moduleType, tc.moduleType), Blueprint: fmt.Sprintf(bp, tc.moduleType, tc.moduleType),
expectedBazelTargets: expectedBazelTargets, ExpectedBazelTargets: expectedBazelTargets,
}) })
}) })
} }
@@ -169,13 +169,13 @@ func TestGenruleLocationsLabel(t *testing.T) {
}` }`
for _, tc := range testCases { for _, tc := range testCases {
fooAttrs := attrNameToString{ fooAttrs := AttrNameToString{
"cmd": `"$(locations :foo.tools) -s $(OUTS) $(SRCS)"`, "cmd": `"$(locations :foo.tools) -s $(OUTS) $(SRCS)"`,
"outs": `["foo.out"]`, "outs": `["foo.out"]`,
"srcs": `["foo.in"]`, "srcs": `["foo.in"]`,
"tools": `[":foo.tools"]`, "tools": `[":foo.tools"]`,
} }
fooToolsAttrs := attrNameToString{ fooToolsAttrs := AttrNameToString{
"cmd": `"cp $(SRCS) $(OUTS)"`, "cmd": `"cp $(SRCS) $(OUTS)"`,
"outs": `[ "outs": `[
"foo_tool.out", "foo_tool.out",
@@ -190,12 +190,12 @@ func TestGenruleLocationsLabel(t *testing.T) {
} }
t.Run(tc.moduleType, func(t *testing.T) { t.Run(tc.moduleType, func(t *testing.T) {
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
bp2buildTestCase{ Bp2buildTestCase{
moduleTypeUnderTest: tc.moduleType, ModuleTypeUnderTest: tc.moduleType,
moduleTypeUnderTestFactory: tc.factory, ModuleTypeUnderTestFactory: tc.factory,
blueprint: fmt.Sprintf(bp, tc.moduleType, tc.moduleType), Blueprint: fmt.Sprintf(bp, tc.moduleType, tc.moduleType),
expectedBazelTargets: expectedBazelTargets, ExpectedBazelTargets: expectedBazelTargets,
}) })
}) })
} }
@@ -238,7 +238,7 @@ func TestGenruleLocationsAbsoluteLabel(t *testing.T) {
}` }`
for _, tc := range testCases { for _, tc := range testCases {
moduleAttrs := attrNameToString{ moduleAttrs := AttrNameToString{
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`, "cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
"outs": `["foo.out"]`, "outs": `["foo.out"]`,
"srcs": `["foo.in"]`, "srcs": `["foo.in"]`,
@@ -250,13 +250,13 @@ func TestGenruleLocationsAbsoluteLabel(t *testing.T) {
} }
t.Run(tc.moduleType, func(t *testing.T) { t.Run(tc.moduleType, func(t *testing.T) {
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
bp2buildTestCase{ Bp2buildTestCase{
moduleTypeUnderTest: tc.moduleType, ModuleTypeUnderTest: tc.moduleType,
moduleTypeUnderTestFactory: tc.factory, ModuleTypeUnderTestFactory: tc.factory,
blueprint: fmt.Sprintf(bp, tc.moduleType), Blueprint: fmt.Sprintf(bp, tc.moduleType),
expectedBazelTargets: expectedBazelTargets, ExpectedBazelTargets: expectedBazelTargets,
filesystem: otherGenruleBp(tc.moduleType), Filesystem: otherGenruleBp(tc.moduleType),
}) })
}) })
} }
@@ -299,7 +299,7 @@ func TestGenruleSrcsLocationsAbsoluteLabel(t *testing.T) {
}` }`
for _, tc := range testCases { for _, tc := range testCases {
moduleAttrs := attrNameToString{ moduleAttrs := AttrNameToString{
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(location //other:other.tool)"`, "cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(location //other:other.tool)"`,
"outs": `["foo.out"]`, "outs": `["foo.out"]`,
"srcs": `["//other:other.tool"]`, "srcs": `["//other:other.tool"]`,
@@ -311,13 +311,13 @@ func TestGenruleSrcsLocationsAbsoluteLabel(t *testing.T) {
} }
t.Run(tc.moduleType, func(t *testing.T) { t.Run(tc.moduleType, func(t *testing.T) {
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
bp2buildTestCase{ Bp2buildTestCase{
moduleTypeUnderTest: tc.moduleType, ModuleTypeUnderTest: tc.moduleType,
moduleTypeUnderTestFactory: tc.factory, ModuleTypeUnderTestFactory: tc.factory,
blueprint: fmt.Sprintf(bp, tc.moduleType), Blueprint: fmt.Sprintf(bp, tc.moduleType),
expectedBazelTargets: expectedBazelTargets, ExpectedBazelTargets: expectedBazelTargets,
filesystem: otherGenruleBp(tc.moduleType), Filesystem: otherGenruleBp(tc.moduleType),
}) })
}) })
} }
@@ -360,7 +360,7 @@ func TestGenruleLocationLabelShouldSubstituteFirstToolLabel(t *testing.T) {
}` }`
for _, tc := range testCases { for _, tc := range testCases {
moduleAttrs := attrNameToString{ moduleAttrs := AttrNameToString{
"cmd": `"$(location //other:foo.tool) -s $(OUTS) $(SRCS)"`, "cmd": `"$(location //other:foo.tool) -s $(OUTS) $(SRCS)"`,
"outs": `["foo.out"]`, "outs": `["foo.out"]`,
"srcs": `["foo.in"]`, "srcs": `["foo.in"]`,
@@ -375,13 +375,13 @@ func TestGenruleLocationLabelShouldSubstituteFirstToolLabel(t *testing.T) {
} }
t.Run(tc.moduleType, func(t *testing.T) { t.Run(tc.moduleType, func(t *testing.T) {
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
bp2buildTestCase{ Bp2buildTestCase{
moduleTypeUnderTest: tc.moduleType, ModuleTypeUnderTest: tc.moduleType,
moduleTypeUnderTestFactory: tc.factory, ModuleTypeUnderTestFactory: tc.factory,
blueprint: fmt.Sprintf(bp, tc.moduleType), Blueprint: fmt.Sprintf(bp, tc.moduleType),
expectedBazelTargets: expectedBazelTargets, ExpectedBazelTargets: expectedBazelTargets,
filesystem: otherGenruleBp(tc.moduleType), Filesystem: otherGenruleBp(tc.moduleType),
}) })
}) })
} }
@@ -424,7 +424,7 @@ func TestGenruleLocationsLabelShouldSubstituteFirstToolLabel(t *testing.T) {
}` }`
for _, tc := range testCases { for _, tc := range testCases {
moduleAttrs := attrNameToString{ moduleAttrs := AttrNameToString{
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`, "cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
"outs": `["foo.out"]`, "outs": `["foo.out"]`,
"srcs": `["foo.in"]`, "srcs": `["foo.in"]`,
@@ -439,13 +439,13 @@ func TestGenruleLocationsLabelShouldSubstituteFirstToolLabel(t *testing.T) {
} }
t.Run(tc.moduleType, func(t *testing.T) { t.Run(tc.moduleType, func(t *testing.T) {
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
bp2buildTestCase{ Bp2buildTestCase{
moduleTypeUnderTest: tc.moduleType, ModuleTypeUnderTest: tc.moduleType,
moduleTypeUnderTestFactory: tc.factory, ModuleTypeUnderTestFactory: tc.factory,
blueprint: fmt.Sprintf(bp, tc.moduleType), Blueprint: fmt.Sprintf(bp, tc.moduleType),
expectedBazelTargets: expectedBazelTargets, ExpectedBazelTargets: expectedBazelTargets,
filesystem: otherGenruleBp(tc.moduleType), Filesystem: otherGenruleBp(tc.moduleType),
}) })
}) })
} }
@@ -487,7 +487,7 @@ func TestGenruleWithoutToolsOrToolFiles(t *testing.T) {
}` }`
for _, tc := range testCases { for _, tc := range testCases {
moduleAttrs := attrNameToString{ moduleAttrs := AttrNameToString{
"cmd": `"cp $(SRCS) $(OUTS)"`, "cmd": `"cp $(SRCS) $(OUTS)"`,
"outs": `["foo.out"]`, "outs": `["foo.out"]`,
"srcs": `["foo.in"]`, "srcs": `["foo.in"]`,
@@ -498,22 +498,22 @@ func TestGenruleWithoutToolsOrToolFiles(t *testing.T) {
} }
t.Run(tc.moduleType, func(t *testing.T) { t.Run(tc.moduleType, func(t *testing.T) {
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
bp2buildTestCase{ Bp2buildTestCase{
moduleTypeUnderTest: tc.moduleType, ModuleTypeUnderTest: tc.moduleType,
moduleTypeUnderTestFactory: tc.factory, ModuleTypeUnderTestFactory: tc.factory,
blueprint: fmt.Sprintf(bp, tc.moduleType), Blueprint: fmt.Sprintf(bp, tc.moduleType),
expectedBazelTargets: expectedBazelTargets, ExpectedBazelTargets: expectedBazelTargets,
}) })
}) })
} }
} }
func TestGenruleBp2BuildInlinesDefaults(t *testing.T) { func TestGenruleBp2BuildInlinesDefaults(t *testing.T) {
testCases := []bp2buildTestCase{ testCases := []Bp2buildTestCase{
{ {
description: "genrule applies properties from a genrule_defaults dependency if not specified", Description: "genrule applies properties from a genrule_defaults dependency if not specified",
blueprint: `genrule_defaults { Blueprint: `genrule_defaults {
name: "gen_defaults", name: "gen_defaults",
cmd: "do-something $(in) $(out)", cmd: "do-something $(in) $(out)",
} }
@@ -525,8 +525,8 @@ genrule {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTargetNoRestrictions("genrule", "gen", attrNameToString{ MakeBazelTargetNoRestrictions("genrule", "gen", AttrNameToString{
"cmd": `"do-something $(SRCS) $(OUTS)"`, "cmd": `"do-something $(SRCS) $(OUTS)"`,
"outs": `["out"]`, "outs": `["out"]`,
"srcs": `["in1"]`, "srcs": `["in1"]`,
@@ -534,8 +534,8 @@ genrule {
}, },
}, },
{ {
description: "genrule does merges properties from a genrule_defaults dependency, latest-first", Description: "genrule does merges properties from a genrule_defaults dependency, latest-first",
blueprint: `genrule_defaults { Blueprint: `genrule_defaults {
name: "gen_defaults", name: "gen_defaults",
out: ["out-from-defaults"], out: ["out-from-defaults"],
srcs: ["in-from-defaults"], srcs: ["in-from-defaults"],
@@ -550,8 +550,8 @@ genrule {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTargetNoRestrictions("genrule", "gen", attrNameToString{ MakeBazelTargetNoRestrictions("genrule", "gen", AttrNameToString{
"cmd": `"do-something $(SRCS) $(OUTS)"`, "cmd": `"do-something $(SRCS) $(OUTS)"`,
"outs": `[ "outs": `[
"out-from-defaults", "out-from-defaults",
@@ -565,8 +565,8 @@ genrule {
}, },
}, },
{ {
description: "genrule applies properties from list of genrule_defaults", Description: "genrule applies properties from list of genrule_defaults",
blueprint: `genrule_defaults { Blueprint: `genrule_defaults {
name: "gen_defaults1", name: "gen_defaults1",
cmd: "cp $(in) $(out)", cmd: "cp $(in) $(out)",
} }
@@ -583,8 +583,8 @@ genrule {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTargetNoRestrictions("genrule", "gen", attrNameToString{ MakeBazelTargetNoRestrictions("genrule", "gen", AttrNameToString{
"cmd": `"cp $(SRCS) $(OUTS)"`, "cmd": `"cp $(SRCS) $(OUTS)"`,
"outs": `["out"]`, "outs": `["out"]`,
"srcs": `["in1"]`, "srcs": `["in1"]`,
@@ -592,8 +592,8 @@ genrule {
}, },
}, },
{ {
description: "genrule applies properties from genrule_defaults transitively", Description: "genrule applies properties from genrule_defaults transitively",
blueprint: `genrule_defaults { Blueprint: `genrule_defaults {
name: "gen_defaults1", name: "gen_defaults1",
defaults: ["gen_defaults2"], defaults: ["gen_defaults2"],
cmd: "cmd1 $(in) $(out)", // overrides gen_defaults2's cmd property value. cmd: "cmd1 $(in) $(out)", // overrides gen_defaults2's cmd property value.
@@ -620,8 +620,8 @@ genrule {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTargetNoRestrictions("genrule", "gen", attrNameToString{ MakeBazelTargetNoRestrictions("genrule", "gen", AttrNameToString{
"cmd": `"cmd1 $(SRCS) $(OUTS)"`, "cmd": `"cmd1 $(SRCS) $(OUTS)"`,
"outs": `[ "outs": `[
"out-from-3", "out-from-3",
@@ -638,7 +638,7 @@ genrule {
} }
for _, testCase := range testCases { for _, testCase := range testCases {
t.Run(testCase.description, func(t *testing.T) { t.Run(testCase.Description, func(t *testing.T) {
runGenruleTestCase(t, testCase) runGenruleTestCase(t, testCase)
}) })
} }

View File

@@ -24,7 +24,7 @@ func TestGensrcs(t *testing.T) {
testcases := []struct { testcases := []struct {
name string name string
bp string bp string
expectedBazelAttrs attrNameToString expectedBazelAttrs AttrNameToString
}{ }{
{ {
name: "gensrcs with common usage of properties", name: "gensrcs with common usage of properties",
@@ -37,7 +37,7 @@ func TestGensrcs(t *testing.T) {
output_extension: "out", output_extension: "out",
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelAttrs: attrNameToString{ expectedBazelAttrs: AttrNameToString{
"srcs": `[ "srcs": `[
"test/input.txt", "test/input.txt",
":external_files__BP2BUILD__MISSING__DEP", ":external_files__BP2BUILD__MISSING__DEP",
@@ -56,7 +56,7 @@ func TestGensrcs(t *testing.T) {
cmd: "cat $(in) > $(out)", cmd: "cat $(in) > $(out)",
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelAttrs: attrNameToString{ expectedBazelAttrs: AttrNameToString{
"srcs": `["input.txt"]`, "srcs": `["input.txt"]`,
"cmd": `"cat $(SRC) > $(OUT)"`, "cmd": `"cat $(SRC) > $(OUT)"`,
}, },
@@ -65,15 +65,15 @@ func TestGensrcs(t *testing.T) {
for _, test := range testcases { for _, test := range testcases {
expectedBazelTargets := []string{ expectedBazelTargets := []string{
makeBazelTargetNoRestrictions("gensrcs", "foo", test.expectedBazelAttrs), MakeBazelTargetNoRestrictions("gensrcs", "foo", test.expectedBazelAttrs),
} }
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
bp2buildTestCase{ Bp2buildTestCase{
moduleTypeUnderTest: "gensrcs", ModuleTypeUnderTest: "gensrcs",
moduleTypeUnderTestFactory: genrule.GenSrcsFactory, ModuleTypeUnderTestFactory: genrule.GenSrcsFactory,
blueprint: test.bp, Blueprint: test.bp,
expectedBazelTargets: expectedBazelTargets, ExpectedBazelTargets: expectedBazelTargets,
}) })
}) })
} }

View File

@@ -22,11 +22,11 @@ import (
"android/soong/java" "android/soong/java"
) )
func runJavaBinaryHostTestCase(t *testing.T, tc bp2buildTestCase) { func runJavaBinaryHostTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "java_binary_host" (&tc).ModuleTypeUnderTest = "java_binary_host"
(&tc).moduleTypeUnderTestFactory = java.BinaryHostFactory (&tc).ModuleTypeUnderTestFactory = java.BinaryHostFactory
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) { RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("cc_library_host_shared", cc.LibraryHostSharedFactory) ctx.RegisterModuleType("cc_library_host_shared", cc.LibraryHostSharedFactory)
ctx.RegisterModuleType("java_library", java.LibraryFactory) ctx.RegisterModuleType("java_library", java.LibraryFactory)
}, tc) }, tc)
@@ -41,10 +41,10 @@ var fs = map[string]string{
} }
func TestJavaBinaryHost(t *testing.T) { func TestJavaBinaryHost(t *testing.T) {
runJavaBinaryHostTestCase(t, bp2buildTestCase{ runJavaBinaryHostTestCase(t, Bp2buildTestCase{
description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.", Description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
filesystem: fs, Filesystem: fs,
blueprint: `java_binary_host { Blueprint: `java_binary_host {
name: "java-binary-host-1", name: "java-binary-host-1",
srcs: ["a.java", "b.java"], srcs: ["a.java", "b.java"],
exclude_srcs: ["b.java"], exclude_srcs: ["b.java"],
@@ -54,8 +54,8 @@ func TestJavaBinaryHost(t *testing.T) {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
java_version: "8", java_version: "8",
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_binary", "java-binary-host-1", attrNameToString{ makeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{
"srcs": `["a.java"]`, "srcs": `["a.java"]`,
"main_class": `"com.android.test.MainClass"`, "main_class": `"com.android.test.MainClass"`,
"deps": `["//other:jni-lib-1"]`, "deps": `["//other:jni-lib-1"]`,
@@ -74,10 +74,10 @@ func TestJavaBinaryHost(t *testing.T) {
} }
func TestJavaBinaryHostRuntimeDeps(t *testing.T) { func TestJavaBinaryHostRuntimeDeps(t *testing.T) {
runJavaBinaryHostTestCase(t, bp2buildTestCase{ runJavaBinaryHostTestCase(t, Bp2buildTestCase{
description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.", Description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
filesystem: fs, Filesystem: fs,
blueprint: `java_binary_host { Blueprint: `java_binary_host {
name: "java-binary-host-1", name: "java-binary-host-1",
static_libs: ["java-dep-1"], static_libs: ["java-dep-1"],
manifest: "test.mf", manifest: "test.mf",
@@ -90,8 +90,8 @@ java_library {
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_binary", "java-binary-host-1", attrNameToString{ makeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{
"main_class": `"com.android.test.MainClass"`, "main_class": `"com.android.test.MainClass"`,
"runtime_deps": `[":java-dep-1"]`, "runtime_deps": `[":java-dep-1"]`,
"target_compatible_with": `select({ "target_compatible_with": `select({

View File

@@ -21,45 +21,45 @@ import (
"testing" "testing"
) )
func runJavaImportTestCase(t *testing.T, tc bp2buildTestCase) { func runJavaImportTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerJavaImportModuleTypes, tc) RunBp2BuildTestCase(t, registerJavaImportModuleTypes, tc)
} }
func registerJavaImportModuleTypes(ctx android.RegistrationContext) { func registerJavaImportModuleTypes(ctx android.RegistrationContext) {
} }
func TestJavaImportMinimal(t *testing.T) { func TestJavaImportMinimal(t *testing.T) {
runJavaImportTestCase(t, bp2buildTestCase{ runJavaImportTestCase(t, Bp2buildTestCase{
description: "Java import - simple example", Description: "Java import - simple example",
moduleTypeUnderTest: "java_import", ModuleTypeUnderTest: "java_import",
moduleTypeUnderTestFactory: java.ImportFactory, ModuleTypeUnderTestFactory: java.ImportFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"import.jar": "", "import.jar": "",
}, },
blueprint: ` Blueprint: `
java_import { java_import {
name: "example_import", name: "example_import",
jars: ["import.jar"], jars: ["import.jar"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_import", "example_import", attrNameToString{ makeBazelTarget("java_import", "example_import", AttrNameToString{
"jars": `["import.jar"]`, "jars": `["import.jar"]`,
}), }),
}}) }})
} }
func TestJavaImportArchVariant(t *testing.T) { func TestJavaImportArchVariant(t *testing.T) {
runJavaImportTestCase(t, bp2buildTestCase{ runJavaImportTestCase(t, Bp2buildTestCase{
description: "Java import - simple example", Description: "Java import - simple example",
moduleTypeUnderTest: "java_import", ModuleTypeUnderTest: "java_import",
moduleTypeUnderTestFactory: java.ImportFactory, ModuleTypeUnderTestFactory: java.ImportFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"import.jar": "", "import.jar": "",
}, },
blueprint: ` Blueprint: `
java_import { java_import {
name: "example_import", name: "example_import",
target: { target: {
@@ -73,8 +73,8 @@ java_import {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_import", "example_import", attrNameToString{ makeBazelTarget("java_import", "example_import", AttrNameToString{
"jars": `select({ "jars": `select({
"//build/bazel/platforms/os:android": ["android.jar"], "//build/bazel/platforms/os:android": ["android.jar"],
"//build/bazel/platforms/os:linux": ["linux.jar"], "//build/bazel/platforms/os:linux": ["linux.jar"],

View File

@@ -22,22 +22,22 @@ import (
"android/soong/java" "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() t.Helper()
(&tc).moduleTypeUnderTest = "java_library" (&tc).ModuleTypeUnderTest = "java_library"
(&tc).moduleTypeUnderTestFactory = java.LibraryFactory (&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
runBp2BuildTestCase(t, registrationCtxFunc, tc) RunBp2BuildTestCase(t, registrationCtxFunc, tc)
} }
func runJavaLibraryTestCase(t *testing.T, tc bp2buildTestCase) { func runJavaLibraryTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {}) runJavaLibraryTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
} }
func TestJavaLibrary(t *testing.T) { func TestJavaLibrary(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
description: "java_library with srcs, exclude_srcs and libs", Description: "java_library with srcs, exclude_srcs and libs",
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
srcs: ["a.java", "b.java"], srcs: ["a.java", "b.java"],
exclude_srcs: ["b.java"], exclude_srcs: ["b.java"],
@@ -50,12 +50,12 @@ java_library {
srcs: ["b.java"], srcs: ["b.java"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`, "srcs": `["a.java"]`,
"deps": `[":java-lib-2"]`, "deps": `[":java-lib-2"]`,
}), }),
makeBazelTarget("java_library", "java-lib-2", attrNameToString{ makeBazelTarget("java_library", "java-lib-2", AttrNameToString{
"srcs": `["b.java"]`, "srcs": `["b.java"]`,
}), }),
}, },
@@ -63,8 +63,8 @@ java_library {
} }
func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) { func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
srcs: ["a.java"], srcs: ["a.java"],
libs: ["java-lib-2"], libs: ["java-lib-2"],
@@ -83,8 +83,8 @@ java_library {
srcs: ["c.java"], srcs: ["c.java"],
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`, "srcs": `["a.java"]`,
"deps": `[ "deps": `[
":java-lib-2", ":java-lib-2",
@@ -97,8 +97,8 @@ java_library {
} }
func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) { func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
static_libs: ["java-lib-2"], static_libs: ["java-lib-2"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
@@ -109,8 +109,8 @@ java_library {
srcs: ["a.java"], srcs: ["a.java"],
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"exports": `[":java-lib-2"]`, "exports": `[":java-lib-2"]`,
}), }),
}, },
@@ -118,9 +118,9 @@ java_library {
} }
func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) { func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
expectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."), ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
libs: ["java-lib-2"], libs: ["java-lib-2"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
@@ -131,13 +131,13 @@ java_library {
srcs: ["a.java"], srcs: ["a.java"],
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
expectedBazelTargets: []string{}, ExpectedBazelTargets: []string{},
}) })
} }
func TestJavaLibraryPlugins(t *testing.T) { func TestJavaLibraryPlugins(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, bp2buildTestCase{ runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
plugins: ["java-plugin-1"], plugins: ["java-plugin-1"],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
@@ -148,8 +148,8 @@ java_plugin {
srcs: ["a.java"], srcs: ["a.java"],
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"plugins": `[":java-plugin-1"]`, "plugins": `[":java-plugin-1"]`,
}), }),
}, },
@@ -159,14 +159,14 @@ java_plugin {
} }
func TestJavaLibraryJavaVersion(t *testing.T) { func TestJavaLibraryJavaVersion(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
srcs: ["a.java"], srcs: ["a.java"],
java_version: "11", java_version: "11",
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`, "srcs": `["a.java"]`,
"javacopts": `["-source 11 -target 11"]`, "javacopts": `["-source 11 -target 11"]`,
}), }),
@@ -175,8 +175,8 @@ func TestJavaLibraryJavaVersion(t *testing.T) {
} }
func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) { func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
srcs: ["a.java"], srcs: ["a.java"],
javacflags: ["-Xsuper-fast"], javacflags: ["-Xsuper-fast"],
@@ -185,8 +185,8 @@ func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
javacflags: ["-Xep:SpeedLimit:OFF"], javacflags: ["-Xep:SpeedLimit:OFF"],
}, },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"javacopts": `[ "javacopts": `[
"-Xsuper-fast", "-Xsuper-fast",
"-Xep:SpeedLimit:OFF", "-Xep:SpeedLimit:OFF",
@@ -198,8 +198,8 @@ func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
} }
func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) { func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
srcs: ["a.java"], srcs: ["a.java"],
javacflags: ["-Xsuper-fast"], javacflags: ["-Xsuper-fast"],
@@ -207,8 +207,8 @@ func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T
javacflags: ["-Xep:SpeedLimit:OFF"], javacflags: ["-Xep:SpeedLimit:OFF"],
}, },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"javacopts": `["-Xsuper-fast"]`, "javacopts": `["-Xsuper-fast"]`,
"srcs": `["a.java"]`, "srcs": `["a.java"]`,
}), }),
@@ -217,8 +217,8 @@ func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T
} }
func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) { func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
srcs: ["a.java"], srcs: ["a.java"],
javacflags: ["-Xsuper-fast"], javacflags: ["-Xsuper-fast"],
@@ -227,8 +227,8 @@ func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T)
javacflags: ["-Xep:SpeedLimit:OFF"], javacflags: ["-Xep:SpeedLimit:OFF"],
}, },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"javacopts": `["-Xsuper-fast"]`, "javacopts": `["-Xsuper-fast"]`,
"srcs": `["a.java"]`, "srcs": `["a.java"]`,
}), }),
@@ -237,11 +237,11 @@ func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T)
} }
func TestJavaLibraryLogTags(t *testing.T) { func TestJavaLibraryLogTags(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
description: "Java library - logtags creates separate dependency", Description: "Java library - logtags creates separate dependency",
moduleTypeUnderTest: "java_library", ModuleTypeUnderTest: "java_library",
moduleTypeUnderTestFactory: java.LibraryFactory, ModuleTypeUnderTestFactory: java.LibraryFactory,
blueprint: `java_library { Blueprint: `java_library {
name: "example_lib", name: "example_lib",
srcs: [ srcs: [
"a.java", "a.java",
@@ -251,14 +251,14 @@ func TestJavaLibraryLogTags(t *testing.T) {
], ],
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("event_log_tags", "example_lib_logtags", attrNameToString{ makeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
"srcs": `[ "srcs": `[
"a.logtag", "a.logtag",
"b.logtag", "b.logtag",
]`, ]`,
}), }),
makeBazelTarget("java_library", "example_lib", attrNameToString{ makeBazelTarget("java_library", "example_lib", AttrNameToString{
"srcs": `[ "srcs": `[
"a.java", "a.java",
"b.java", "b.java",
@@ -269,18 +269,18 @@ func TestJavaLibraryLogTags(t *testing.T) {
} }
func TestJavaLibraryResources(t *testing.T) { func TestJavaLibraryResources(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
filesystem: map[string]string{ Filesystem: map[string]string{
"res/a.res": "", "res/a.res": "",
"res/b.res": "", "res/b.res": "",
"res/dir1/b.res": "", "res/dir1/b.res": "",
}, },
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
java_resources: ["res/a.res", "res/b.res"], java_resources: ["res/a.res", "res/b.res"],
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resources": `[ "resources": `[
"res/a.res", "res/a.res",
"res/b.res", "res/b.res",
@@ -291,18 +291,18 @@ func TestJavaLibraryResources(t *testing.T) {
} }
func TestJavaLibraryResourceDirs(t *testing.T) { func TestJavaLibraryResourceDirs(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
filesystem: map[string]string{ Filesystem: map[string]string{
"res/a.res": "", "res/a.res": "",
"res/b.res": "", "res/b.res": "",
"res/dir1/b.res": "", "res/dir1/b.res": "",
}, },
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
java_resource_dirs: ["res"], java_resource_dirs: ["res"],
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resource_strip_prefix": `"res"`, "resource_strip_prefix": `"res"`,
"resources": `[ "resources": `[
"res/a.res", "res/a.res",
@@ -315,18 +315,18 @@ func TestJavaLibraryResourceDirs(t *testing.T) {
} }
func TestJavaLibraryResourcesExcludeDir(t *testing.T) { func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
filesystem: map[string]string{ Filesystem: map[string]string{
"res/a.res": "", "res/a.res": "",
"res/exclude/b.res": "", "res/exclude/b.res": "",
}, },
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
java_resource_dirs: ["res"], java_resource_dirs: ["res"],
exclude_java_resource_dirs: ["res/exclude"], exclude_java_resource_dirs: ["res/exclude"],
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resource_strip_prefix": `"res"`, "resource_strip_prefix": `"res"`,
"resources": `["res/a.res"]`, "resources": `["res/a.res"]`,
}), }),
@@ -335,19 +335,19 @@ func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
} }
func TestJavaLibraryResourcesExcludeFile(t *testing.T) { func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
filesystem: map[string]string{ Filesystem: map[string]string{
"res/a.res": "", "res/a.res": "",
"res/dir1/b.res": "", "res/dir1/b.res": "",
"res/dir1/exclude.res": "", "res/dir1/exclude.res": "",
}, },
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
java_resource_dirs: ["res"], java_resource_dirs: ["res"],
exclude_java_resources: ["res/dir1/exclude.res"], exclude_java_resources: ["res/dir1/exclude.res"],
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resource_strip_prefix": `"res"`, "resource_strip_prefix": `"res"`,
"resources": `[ "resources": `[
"res/a.res", "res/a.res",
@@ -359,16 +359,16 @@ func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
} }
func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) { func TestJavaLibraryResourcesFailsWithMultipleDirs(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
filesystem: map[string]string{ Filesystem: map[string]string{
"res/a.res": "", "res/a.res": "",
"res1/a.res": "", "res1/a.res": "",
}, },
blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
java_resource_dirs: ["res", "res1"], java_resource_dirs: ["res", "res1"],
}`, }`,
expectedErr: fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"), ExpectedErr: fmt.Errorf("bp2build does not support more than one directory in java_resource_dirs (b/226423379)"),
expectedBazelTargets: []string{}, ExpectedBazelTargets: []string{},
}) })
} }

View File

@@ -21,17 +21,17 @@ import (
"android/soong/java" "android/soong/java"
) )
func runJavaLibraryHostTestCase(t *testing.T, tc bp2buildTestCase) { func runJavaLibraryHostTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "java_library_host" (&tc).ModuleTypeUnderTest = "java_library_host"
(&tc).moduleTypeUnderTestFactory = java.LibraryHostFactory (&tc).ModuleTypeUnderTestFactory = java.LibraryHostFactory
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc) RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
} }
func TestJavaLibraryHost(t *testing.T) { func TestJavaLibraryHost(t *testing.T) {
runJavaLibraryHostTestCase(t, bp2buildTestCase{ runJavaLibraryHostTestCase(t, Bp2buildTestCase{
description: "java_library_host with srcs, exclude_srcs and libs", Description: "java_library_host with srcs, exclude_srcs and libs",
blueprint: `java_library_host { Blueprint: `java_library_host {
name: "java-lib-host-1", name: "java-lib-host-1",
srcs: ["a.java", "b.java"], srcs: ["a.java", "b.java"],
exclude_srcs: ["b.java"], exclude_srcs: ["b.java"],
@@ -45,8 +45,8 @@ java_library_host {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
java_version: "9", java_version: "9",
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-host-1", attrNameToString{ makeBazelTarget("java_library", "java-lib-host-1", AttrNameToString{
"srcs": `["a.java"]`, "srcs": `["a.java"]`,
"deps": `[":java-lib-host-2"]`, "deps": `[":java-lib-host-2"]`,
"target_compatible_with": `select({ "target_compatible_with": `select({
@@ -54,7 +54,7 @@ java_library_host {
"//conditions:default": [], "//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"]`, "javacopts": `["-source 1.9 -target 1.9"]`,
"srcs": `["c.java"]`, "srcs": `["c.java"]`,
"target_compatible_with": `select({ "target_compatible_with": `select({

View File

@@ -21,19 +21,19 @@ import (
"android/soong/java" "android/soong/java"
) )
func runJavaPluginTestCase(t *testing.T, tc bp2buildTestCase) { func runJavaPluginTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "java_plugin" (&tc).ModuleTypeUnderTest = "java_plugin"
(&tc).moduleTypeUnderTestFactory = java.PluginFactory (&tc).ModuleTypeUnderTestFactory = java.PluginFactory
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) { RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("java_library", java.LibraryFactory) ctx.RegisterModuleType("java_library", java.LibraryFactory)
}, tc) }, tc)
} }
func TestJavaPlugin(t *testing.T) { func TestJavaPlugin(t *testing.T) {
runJavaPluginTestCase(t, bp2buildTestCase{ runJavaPluginTestCase(t, Bp2buildTestCase{
description: "java_plugin with srcs, libs, static_libs", Description: "java_plugin with srcs, libs, static_libs",
blueprint: `java_plugin { Blueprint: `java_plugin {
name: "java-plug-1", name: "java-plug-1",
srcs: ["a.java", "b.java"], srcs: ["a.java", "b.java"],
libs: ["java-lib-1"], libs: ["java-lib-1"],
@@ -53,8 +53,8 @@ java_library {
srcs: ["c.java"], srcs: ["c.java"],
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_plugin", "java-plug-1", attrNameToString{ makeBazelTarget("java_plugin", "java-plug-1", AttrNameToString{
"target_compatible_with": `select({ "target_compatible_with": `select({
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
"//conditions:default": [], "//conditions:default": [],
@@ -74,9 +74,9 @@ java_library {
} }
func TestJavaPluginNoSrcs(t *testing.T) { func TestJavaPluginNoSrcs(t *testing.T) {
runJavaPluginTestCase(t, bp2buildTestCase{ runJavaPluginTestCase(t, Bp2buildTestCase{
description: "java_plugin without srcs converts (static) libs to deps", Description: "java_plugin without srcs converts (static) libs to deps",
blueprint: `java_plugin { Blueprint: `java_plugin {
name: "java-plug-1", name: "java-plug-1",
libs: ["java-lib-1"], libs: ["java-lib-1"],
static_libs: ["java-lib-2"], static_libs: ["java-lib-2"],
@@ -94,8 +94,8 @@ java_library {
srcs: ["c.java"], srcs: ["c.java"],
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("java_plugin", "java-plug-1", attrNameToString{ makeBazelTarget("java_plugin", "java-plug-1", AttrNameToString{
"target_compatible_with": `select({ "target_compatible_with": `select({
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
"//conditions:default": [], "//conditions:default": [],

View File

@@ -22,11 +22,11 @@ import (
"android/soong/java" "android/soong/java"
) )
func runJavaProtoTestCase(t *testing.T, tc bp2buildTestCase) { func runJavaProtoTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "java_library_static" (&tc).ModuleTypeUnderTest = "java_library_static"
(&tc).moduleTypeUnderTestFactory = java.LibraryFactory (&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc) RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
} }
func TestJavaProto(t *testing.T) { func TestJavaProto(t *testing.T) {
@@ -70,25 +70,25 @@ func TestJavaProto(t *testing.T) {
srcs: ["a.proto"], srcs: ["a.proto"],
}` }`
protoLibrary := makeBazelTarget("proto_library", "java-protos_proto", attrNameToString{ protoLibrary := makeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{
"srcs": `["a.proto"]`, "srcs": `["a.proto"]`,
}) })
for _, tc := range testCases { for _, tc := range testCases {
javaLibraryName := fmt.Sprintf("java-protos_%s", tc.javaLibraryNameExtension) javaLibraryName := fmt.Sprintf("java-protos_%s", tc.javaLibraryNameExtension)
runJavaProtoTestCase(t, bp2buildTestCase{ runJavaProtoTestCase(t, Bp2buildTestCase{
description: fmt.Sprintf("java_proto %s", tc.protoType), Description: fmt.Sprintf("java_proto %s", tc.protoType),
blueprint: fmt.Sprintf(bp, tc.protoType), Blueprint: fmt.Sprintf(bp, tc.protoType),
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
protoLibrary, protoLibrary,
makeBazelTarget( makeBazelTarget(
tc.javaLibraryType, tc.javaLibraryType,
javaLibraryName, javaLibraryName,
attrNameToString{ AttrNameToString{
"deps": `[":java-protos_proto"]`, "deps": `[":java-protos_proto"]`,
}), }),
makeBazelTarget("java_library", "java-protos", attrNameToString{ makeBazelTarget("java_library", "java-protos", AttrNameToString{
"exports": fmt.Sprintf(`[":%s"]`, javaLibraryName), "exports": fmt.Sprintf(`[":%s"]`, javaLibraryName),
}), }),
}, },
@@ -97,25 +97,25 @@ func TestJavaProto(t *testing.T) {
} }
func TestJavaProtoDefault(t *testing.T) { func TestJavaProtoDefault(t *testing.T) {
runJavaProtoTestCase(t, bp2buildTestCase{ runJavaProtoTestCase(t, Bp2buildTestCase{
description: "java_library proto default", Description: "java_library proto default",
blueprint: `java_library_static { Blueprint: `java_library_static {
name: "java-protos", name: "java-protos",
srcs: ["a.proto"], srcs: ["a.proto"],
java_version: "7", java_version: "7",
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("proto_library", "java-protos_proto", attrNameToString{ makeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{
"srcs": `["a.proto"]`, "srcs": `["a.proto"]`,
}), }),
makeBazelTarget( makeBazelTarget(
"java_lite_proto_library", "java_lite_proto_library",
"java-protos_java_proto_lite", "java-protos_java_proto_lite",
attrNameToString{ AttrNameToString{
"deps": `[":java-protos_proto"]`, "deps": `[":java-protos_proto"]`,
}), }),
makeBazelTarget("java_library", "java-protos", attrNameToString{ makeBazelTarget("java_library", "java-protos", AttrNameToString{
"exports": `[":java-protos_java_proto_lite"]`, "exports": `[":java-protos_java_proto_lite"]`,
"javacopts": `["-source 1.7 -target 1.7"]`, "javacopts": `["-source 1.7 -target 1.7"]`,
}), }),

View File

@@ -21,23 +21,23 @@ import (
"android/soong/linkerconfig" "android/soong/linkerconfig"
) )
func runLinkerConfigTestCase(t *testing.T, tc bp2buildTestCase) { func runLinkerConfigTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "linker_config" (&tc).ModuleTypeUnderTest = "linker_config"
(&tc).moduleTypeUnderTestFactory = linkerconfig.LinkerConfigFactory (&tc).ModuleTypeUnderTestFactory = linkerconfig.LinkerConfigFactory
runBp2BuildTestCaseSimple(t, tc) runBp2BuildTestCaseSimple(t, tc)
} }
func TestLinkerConfigConvertsSrc(t *testing.T) { func TestLinkerConfigConvertsSrc(t *testing.T) {
runLinkerConfigTestCase(t, runLinkerConfigTestCase(t,
bp2buildTestCase{ Bp2buildTestCase{
blueprint: ` Blueprint: `
linker_config { linker_config {
name: "foo", name: "foo",
src: "a.json", src: "a.json",
} }
`, `,
expectedBazelTargets: []string{makeBazelTarget("linker_config", "foo", attrNameToString{ ExpectedBazelTargets: []string{makeBazelTarget("linker_config", "foo", AttrNameToString{
"src": `"a.json"`, "src": `"a.json"`,
})}, })},
}) })
@@ -46,14 +46,14 @@ linker_config {
func TestLinkerConfigNoSrc(t *testing.T) { func TestLinkerConfigNoSrc(t *testing.T) {
runLinkerConfigTestCase(t, runLinkerConfigTestCase(t,
bp2buildTestCase{ Bp2buildTestCase{
blueprint: ` Blueprint: `
linker_config { linker_config {
name: "foo", name: "foo",
} }
`, `,
expectedBazelTargets: []string{}, ExpectedBazelTargets: []string{},
expectedErr: fmt.Errorf("Android.bp:2:1: module \"foo\": src: empty src is not supported"), ExpectedErr: fmt.Errorf("Android.bp:2:1: module \"foo\": src: empty src is not supported"),
}) })
} }

View File

@@ -21,21 +21,21 @@ import (
"testing" "testing"
) )
func runPrebuiltEtcTestCase(t *testing.T, tc bp2buildTestCase) { func runPrebuiltEtcTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "prebuilt_etc" (&tc).ModuleTypeUnderTest = "prebuilt_etc"
(&tc).moduleTypeUnderTestFactory = etc.PrebuiltEtcFactory (&tc).ModuleTypeUnderTestFactory = etc.PrebuiltEtcFactory
runBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc) RunBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
} }
func registerPrebuiltEtcModuleTypes(ctx android.RegistrationContext) { func registerPrebuiltEtcModuleTypes(ctx android.RegistrationContext) {
} }
func TestPrebuiltEtcSimple(t *testing.T) { func TestPrebuiltEtcSimple(t *testing.T) {
runPrebuiltEtcTestCase(t, bp2buildTestCase{ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
description: "prebuilt_etc - simple example", Description: "prebuilt_etc - simple example",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
prebuilt_etc { prebuilt_etc {
name: "apex_tz_version", name: "apex_tz_version",
src: "version/tz_version", src: "version/tz_version",
@@ -44,8 +44,8 @@ prebuilt_etc {
installable: false, installable: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{ makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
"filename": `"tz_version"`, "filename": `"tz_version"`,
"installable": `False`, "installable": `False`,
"src": `"version/tz_version"`, "src": `"version/tz_version"`,
@@ -54,10 +54,10 @@ prebuilt_etc {
} }
func TestPrebuiltEtcArchVariant(t *testing.T) { func TestPrebuiltEtcArchVariant(t *testing.T) {
runPrebuiltEtcTestCase(t, bp2buildTestCase{ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
description: "prebuilt_etc - arch variant", Description: "prebuilt_etc - arch variant",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
prebuilt_etc { prebuilt_etc {
name: "apex_tz_version", name: "apex_tz_version",
src: "version/tz_version", src: "version/tz_version",
@@ -74,8 +74,8 @@ prebuilt_etc {
} }
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{ makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
"filename": `"tz_version"`, "filename": `"tz_version"`,
"installable": `False`, "installable": `False`,
"src": `select({ "src": `select({
@@ -88,10 +88,10 @@ prebuilt_etc {
} }
func TestPrebuiltEtcArchAndTargetVariant(t *testing.T) { func TestPrebuiltEtcArchAndTargetVariant(t *testing.T) {
runPrebuiltEtcTestCase(t, bp2buildTestCase{ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
description: "prebuilt_etc - arch variant", Description: "prebuilt_etc - arch variant",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
prebuilt_etc { prebuilt_etc {
name: "apex_tz_version", name: "apex_tz_version",
src: "version/tz_version", src: "version/tz_version",
@@ -113,8 +113,8 @@ prebuilt_etc {
}, },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{ makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
"filename": `"tz_version"`, "filename": `"tz_version"`,
"installable": `False`, "installable": `False`,
"src": `select({ "src": `select({
@@ -129,21 +129,21 @@ prebuilt_etc {
})}}) })}})
} }
func runPrebuiltUsrShareTestCase(t *testing.T, tc bp2buildTestCase) { func runPrebuiltUsrShareTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
(&tc).moduleTypeUnderTest = "prebuilt_usr_share" (&tc).ModuleTypeUnderTest = "prebuilt_usr_share"
(&tc).moduleTypeUnderTestFactory = etc.PrebuiltUserShareFactory (&tc).ModuleTypeUnderTestFactory = etc.PrebuiltUserShareFactory
runBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc) RunBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
} }
func registerPrebuiltUsrShareModuleTypes(ctx android.RegistrationContext) { func registerPrebuiltUsrShareModuleTypes(ctx android.RegistrationContext) {
} }
func TestPrebuiltUsrShareSimple(t *testing.T) { func TestPrebuiltUsrShareSimple(t *testing.T) {
runPrebuiltUsrShareTestCase(t, bp2buildTestCase{ runPrebuiltUsrShareTestCase(t, Bp2buildTestCase{
description: "prebuilt_usr_share - simple example", Description: "prebuilt_usr_share - simple example",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
prebuilt_usr_share { prebuilt_usr_share {
name: "apex_tz_version", name: "apex_tz_version",
src: "version/tz_version", src: "version/tz_version",
@@ -152,8 +152,8 @@ prebuilt_usr_share {
installable: false, installable: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{ makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
"filename": `"tz_version"`, "filename": `"tz_version"`,
"installable": `False`, "installable": `False`,
"src": `"version/tz_version"`, "src": `"version/tz_version"`,
@@ -162,10 +162,10 @@ prebuilt_usr_share {
} }
func TestPrebuiltEtcNoSubdir(t *testing.T) { func TestPrebuiltEtcNoSubdir(t *testing.T) {
runPrebuiltEtcTestCase(t, bp2buildTestCase{ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
description: "prebuilt_etc - no subdir", Description: "prebuilt_etc - no subdir",
filesystem: map[string]string{}, Filesystem: map[string]string{},
blueprint: ` Blueprint: `
prebuilt_etc { prebuilt_etc {
name: "apex_tz_version", name: "apex_tz_version",
src: "version/tz_version", src: "version/tz_version",
@@ -173,8 +173,8 @@ prebuilt_etc {
installable: false, installable: false,
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("prebuilt_file", "apex_tz_version", attrNameToString{ makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
"filename": `"tz_version"`, "filename": `"tz_version"`,
"installable": `False`, "installable": `False`,
"src": `"version/tz_version"`, "src": `"version/tz_version"`,

View File

@@ -7,27 +7,27 @@ import (
"android/soong/python" "android/soong/python"
) )
func runBp2BuildTestCaseWithPythonLibraries(t *testing.T, tc bp2buildTestCase) { func runBp2BuildTestCaseWithPythonLibraries(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) { RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("python_library", python.PythonLibraryFactory) ctx.RegisterModuleType("python_library", python.PythonLibraryFactory)
ctx.RegisterModuleType("python_library_host", python.PythonLibraryHostFactory) ctx.RegisterModuleType("python_library_host", python.PythonLibraryHostFactory)
}, tc) }, tc)
} }
func TestPythonBinaryHostSimple(t *testing.T) { func TestPythonBinaryHostSimple(t *testing.T) {
runBp2BuildTestCaseWithPythonLibraries(t, bp2buildTestCase{ runBp2BuildTestCaseWithPythonLibraries(t, Bp2buildTestCase{
description: "simple python_binary_host converts to a native py_binary", Description: "simple python_binary_host converts to a native py_binary",
moduleTypeUnderTest: "python_binary_host", ModuleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory, ModuleTypeUnderTestFactory: python.PythonBinaryHostFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"a.py": "", "a.py": "",
"b/c.py": "", "b/c.py": "",
"b/d.py": "", "b/d.py": "",
"b/e.py": "", "b/e.py": "",
"files/data.txt": "", "files/data.txt": "",
}, },
blueprint: `python_binary_host { Blueprint: `python_binary_host {
name: "foo", name: "foo",
main: "a.py", main: "a.py",
srcs: ["**/*.py"], srcs: ["**/*.py"],
@@ -41,8 +41,8 @@ func TestPythonBinaryHostSimple(t *testing.T) {
srcs: ["b/e.py"], srcs: ["b/e.py"],
bazel_module: { bp2build_available: false }, bazel_module: { bp2build_available: false },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("py_binary", "foo", attrNameToString{ makeBazelTarget("py_binary", "foo", AttrNameToString{
"data": `["files/data.txt"]`, "data": `["files/data.txt"]`,
"deps": `[":bar"]`, "deps": `[":bar"]`,
"main": `"a.py"`, "main": `"a.py"`,
@@ -62,11 +62,11 @@ func TestPythonBinaryHostSimple(t *testing.T) {
} }
func TestPythonBinaryHostPy2(t *testing.T) { func TestPythonBinaryHostPy2(t *testing.T) {
runBp2BuildTestCaseSimple(t, bp2buildTestCase{ runBp2BuildTestCaseSimple(t, Bp2buildTestCase{
description: "py2 python_binary_host", Description: "py2 python_binary_host",
moduleTypeUnderTest: "python_binary_host", ModuleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory, ModuleTypeUnderTestFactory: python.PythonBinaryHostFactory,
blueprint: `python_binary_host { Blueprint: `python_binary_host {
name: "foo", name: "foo",
srcs: ["a.py"], srcs: ["a.py"],
version: { version: {
@@ -81,8 +81,8 @@ func TestPythonBinaryHostPy2(t *testing.T) {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("py_binary", "foo", attrNameToString{ makeBazelTarget("py_binary", "foo", AttrNameToString{
"python_version": `"PY2"`, "python_version": `"PY2"`,
"imports": `["."]`, "imports": `["."]`,
"srcs": `["a.py"]`, "srcs": `["a.py"]`,
@@ -96,11 +96,11 @@ func TestPythonBinaryHostPy2(t *testing.T) {
} }
func TestPythonBinaryHostPy3(t *testing.T) { func TestPythonBinaryHostPy3(t *testing.T) {
runBp2BuildTestCaseSimple(t, bp2buildTestCase{ runBp2BuildTestCaseSimple(t, Bp2buildTestCase{
description: "py3 python_binary_host", Description: "py3 python_binary_host",
moduleTypeUnderTest: "python_binary_host", ModuleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory, ModuleTypeUnderTestFactory: python.PythonBinaryHostFactory,
blueprint: `python_binary_host { Blueprint: `python_binary_host {
name: "foo", name: "foo",
srcs: ["a.py"], srcs: ["a.py"],
version: { version: {
@@ -115,9 +115,9 @@ func TestPythonBinaryHostPy3(t *testing.T) {
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
} }
`, `,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
// python_version is PY3 by default. // python_version is PY3 by default.
makeBazelTarget("py_binary", "foo", attrNameToString{ makeBazelTarget("py_binary", "foo", AttrNameToString{
"imports": `["."]`, "imports": `["."]`,
"srcs": `["a.py"]`, "srcs": `["a.py"]`,
"target_compatible_with": `select({ "target_compatible_with": `select({
@@ -130,15 +130,15 @@ func TestPythonBinaryHostPy3(t *testing.T) {
} }
func TestPythonBinaryHostArchVariance(t *testing.T) { func TestPythonBinaryHostArchVariance(t *testing.T) {
runBp2BuildTestCaseSimple(t, bp2buildTestCase{ runBp2BuildTestCaseSimple(t, Bp2buildTestCase{
description: "test arch variants", Description: "test arch variants",
moduleTypeUnderTest: "python_binary_host", ModuleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory, ModuleTypeUnderTestFactory: python.PythonBinaryHostFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"dir/arm.py": "", "dir/arm.py": "",
"dir/x86.py": "", "dir/x86.py": "",
}, },
blueprint: `python_binary_host { Blueprint: `python_binary_host {
name: "foo-arm", name: "foo-arm",
arch: { arch: {
arm: { arm: {
@@ -149,8 +149,8 @@ func TestPythonBinaryHostArchVariance(t *testing.T) {
}, },
}, },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("py_binary", "foo-arm", attrNameToString{ makeBazelTarget("py_binary", "foo-arm", AttrNameToString{
"imports": `["."]`, "imports": `["."]`,
"srcs": `select({ "srcs": `select({
"//build/bazel/platforms/arch:arm": ["arm.py"], "//build/bazel/platforms/arch:arm": ["arm.py"],

View File

@@ -21,7 +21,7 @@ type pythonLibBp2BuildTestCase struct {
expectedError error expectedError error
} }
func convertPythonLibTestCaseToBp2build_Host(tc pythonLibBp2BuildTestCase) bp2buildTestCase { func convertPythonLibTestCaseToBp2build_Host(tc pythonLibBp2BuildTestCase) Bp2buildTestCase {
for i := range tc.expectedBazelTargets { for i := range tc.expectedBazelTargets {
tc.expectedBazelTargets[i].attrs["target_compatible_with"] = `select({ tc.expectedBazelTargets[i].attrs["target_compatible_with"] = `select({
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
@@ -32,7 +32,7 @@ func convertPythonLibTestCaseToBp2build_Host(tc pythonLibBp2BuildTestCase) bp2bu
return convertPythonLibTestCaseToBp2build(tc) return convertPythonLibTestCaseToBp2build(tc)
} }
func convertPythonLibTestCaseToBp2build(tc pythonLibBp2BuildTestCase) bp2buildTestCase { func convertPythonLibTestCaseToBp2build(tc pythonLibBp2BuildTestCase) Bp2buildTestCase {
var bp2BuildTargets []string var bp2BuildTargets []string
for _, t := range tc.expectedBazelTargets { for _, t := range tc.expectedBazelTargets {
bp2BuildTargets = append(bp2BuildTargets, makeBazelTarget(t.typ, t.name, t.attrs)) bp2BuildTargets = append(bp2BuildTargets, makeBazelTarget(t.typ, t.name, t.attrs))
@@ -43,28 +43,28 @@ func convertPythonLibTestCaseToBp2build(tc pythonLibBp2BuildTestCase) bp2buildTe
for k, v := range tc.filesystem { for k, v := range tc.filesystem {
filesystemCopy[k] = v filesystemCopy[k] = v
} }
return bp2buildTestCase{ return Bp2buildTestCase{
description: tc.description, Description: tc.description,
filesystem: filesystemCopy, Filesystem: filesystemCopy,
blueprint: tc.blueprint, Blueprint: tc.blueprint,
expectedBazelTargets: bp2BuildTargets, ExpectedBazelTargets: bp2BuildTargets,
dir: tc.dir, Dir: tc.dir,
expectedErr: tc.expectedError, ExpectedErr: tc.expectedError,
} }
} }
func runPythonLibraryTestCase(t *testing.T, tc pythonLibBp2BuildTestCase) { func runPythonLibraryTestCase(t *testing.T, tc pythonLibBp2BuildTestCase) {
t.Helper() t.Helper()
testCase := convertPythonLibTestCaseToBp2build(tc) testCase := convertPythonLibTestCaseToBp2build(tc)
testCase.description = fmt.Sprintf(testCase.description, "python_library") testCase.Description = fmt.Sprintf(testCase.Description, "python_library")
testCase.blueprint = fmt.Sprintf(testCase.blueprint, "python_library") testCase.Blueprint = fmt.Sprintf(testCase.Blueprint, "python_library")
for name, contents := range testCase.filesystem { for name, contents := range testCase.Filesystem {
if strings.HasSuffix(name, "Android.bp") { 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.ModuleTypeUnderTest = "python_library"
testCase.moduleTypeUnderTestFactory = python.PythonLibraryFactory testCase.ModuleTypeUnderTestFactory = python.PythonLibraryFactory
runBp2BuildTestCaseSimple(t, testCase) runBp2BuildTestCaseSimple(t, testCase)
} }
@@ -72,16 +72,16 @@ func runPythonLibraryTestCase(t *testing.T, tc pythonLibBp2BuildTestCase) {
func runPythonLibraryHostTestCase(t *testing.T, tc pythonLibBp2BuildTestCase) { func runPythonLibraryHostTestCase(t *testing.T, tc pythonLibBp2BuildTestCase) {
t.Helper() t.Helper()
testCase := convertPythonLibTestCaseToBp2build_Host(tc) testCase := convertPythonLibTestCaseToBp2build_Host(tc)
testCase.description = fmt.Sprintf(testCase.description, "python_library_host") testCase.Description = fmt.Sprintf(testCase.Description, "python_library_host")
testCase.blueprint = fmt.Sprintf(testCase.blueprint, "python_library_host") testCase.Blueprint = fmt.Sprintf(testCase.Blueprint, "python_library_host")
for name, contents := range testCase.filesystem { for name, contents := range testCase.Filesystem {
if strings.HasSuffix(name, "Android.bp") { 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.ModuleTypeUnderTest = "python_library_host"
testCase.moduleTypeUnderTestFactory = python.PythonLibraryHostFactory testCase.ModuleTypeUnderTestFactory = python.PythonLibraryHostFactory
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) { RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("python_library", python.PythonLibraryFactory) ctx.RegisterModuleType("python_library", python.PythonLibraryFactory)
}, },
testCase) testCase)
@@ -121,7 +121,7 @@ func TestSimplePythonLib(t *testing.T) {
{ {
typ: "py_library", typ: "py_library",
name: "foo", name: "foo",
attrs: attrNameToString{ attrs: AttrNameToString{
"data": `["files/data.txt"]`, "data": `["files/data.txt"]`,
"deps": `[":bar"]`, "deps": `[":bar"]`,
"srcs": `[ "srcs": `[
@@ -155,7 +155,7 @@ func TestSimplePythonLib(t *testing.T) {
{ {
typ: "py_library", typ: "py_library",
name: "foo", name: "foo",
attrs: attrNameToString{ attrs: AttrNameToString{
"srcs": `["a.py"]`, "srcs": `["a.py"]`,
"srcs_version": `"PY2"`, "srcs_version": `"PY2"`,
"imports": `["."]`, "imports": `["."]`,
@@ -183,7 +183,7 @@ func TestSimplePythonLib(t *testing.T) {
{ {
typ: "py_library", typ: "py_library",
name: "foo", name: "foo",
attrs: attrNameToString{ attrs: AttrNameToString{
"srcs": `["a.py"]`, "srcs": `["a.py"]`,
"srcs_version": `"PY3"`, "srcs_version": `"PY3"`,
"imports": `["."]`, "imports": `["."]`,
@@ -212,7 +212,7 @@ func TestSimplePythonLib(t *testing.T) {
// srcs_version is PY2ANDPY3 by default. // srcs_version is PY2ANDPY3 by default.
typ: "py_library", typ: "py_library",
name: "foo", name: "foo",
attrs: attrNameToString{ attrs: AttrNameToString{
"srcs": `["a.py"]`, "srcs": `["a.py"]`,
"imports": `["."]`, "imports": `["."]`,
}, },
@@ -238,7 +238,7 @@ func TestSimplePythonLib(t *testing.T) {
// srcs_version is PY2ANDPY3 by default. // srcs_version is PY2ANDPY3 by default.
typ: "py_library", typ: "py_library",
name: "foo", name: "foo",
attrs: attrNameToString{ attrs: AttrNameToString{
"srcs": `["a.py"]`, "srcs": `["a.py"]`,
"imports": `["../.."]`, "imports": `["../.."]`,
"srcs_version": `"PY3"`, "srcs_version": `"PY3"`,
@@ -292,7 +292,7 @@ func TestPythonArchVariance(t *testing.T) {
{ {
typ: "py_library", typ: "py_library",
name: "foo", name: "foo",
attrs: attrNameToString{ attrs: AttrNameToString{
"srcs": `select({ "srcs": `select({
"//build/bazel/platforms/arch:arm": ["arm.py"], "//build/bazel/platforms/arch:arm": ["arm.py"],
"//build/bazel/platforms/arch:x86": ["x86.py"], "//build/bazel/platforms/arch:x86": ["x86.py"],
@@ -324,21 +324,21 @@ func TestPythonLibraryWithProtobufs(t *testing.T) {
{ {
typ: "proto_library", typ: "proto_library",
name: "foo_proto", name: "foo_proto",
attrs: attrNameToString{ attrs: AttrNameToString{
"srcs": `["dir/myproto.proto"]`, "srcs": `["dir/myproto.proto"]`,
}, },
}, },
{ {
typ: "py_proto_library", typ: "py_proto_library",
name: "foo_py_proto", name: "foo_py_proto",
attrs: attrNameToString{ attrs: AttrNameToString{
"deps": `[":foo_proto"]`, "deps": `[":foo_proto"]`,
}, },
}, },
{ {
typ: "py_library", typ: "py_library",
name: "foo", name: "foo",
attrs: attrNameToString{ attrs: AttrNameToString{
"srcs": `["dir/mylib.py"]`, "srcs": `["dir/mylib.py"]`,
"srcs_version": `"PY3"`, "srcs_version": `"PY3"`,
"imports": `["."]`, "imports": `["."]`,

View File

@@ -48,25 +48,25 @@ func TestShBinaryLoadStatement(t *testing.T) {
} }
} }
func runShBinaryTestCase(t *testing.T, tc bp2buildTestCase) { func runShBinaryTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc) RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
} }
func TestShBinarySimple(t *testing.T) { func TestShBinarySimple(t *testing.T) {
runShBinaryTestCase(t, bp2buildTestCase{ runShBinaryTestCase(t, Bp2buildTestCase{
description: "sh_binary test", Description: "sh_binary test",
moduleTypeUnderTest: "sh_binary", ModuleTypeUnderTest: "sh_binary",
moduleTypeUnderTestFactory: sh.ShBinaryFactory, ModuleTypeUnderTestFactory: sh.ShBinaryFactory,
blueprint: `sh_binary { Blueprint: `sh_binary {
name: "foo", name: "foo",
src: "foo.sh", src: "foo.sh",
filename: "foo.exe", filename: "foo.exe",
sub_dir: "sub", sub_dir: "sub",
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("sh_binary", "foo", attrNameToString{ makeBazelTarget("sh_binary", "foo", AttrNameToString{
"srcs": `["foo.sh"]`, "srcs": `["foo.sh"]`,
"filename": `"foo.exe"`, "filename": `"foo.exe"`,
"sub_dir": `"sub"`, "sub_dir": `"sub"`,
@@ -75,17 +75,17 @@ func TestShBinarySimple(t *testing.T) {
} }
func TestShBinaryDefaults(t *testing.T) { func TestShBinaryDefaults(t *testing.T) {
runShBinaryTestCase(t, bp2buildTestCase{ runShBinaryTestCase(t, Bp2buildTestCase{
description: "sh_binary test", Description: "sh_binary test",
moduleTypeUnderTest: "sh_binary", ModuleTypeUnderTest: "sh_binary",
moduleTypeUnderTestFactory: sh.ShBinaryFactory, ModuleTypeUnderTestFactory: sh.ShBinaryFactory,
blueprint: `sh_binary { Blueprint: `sh_binary {
name: "foo", name: "foo",
src: "foo.sh", src: "foo.sh",
bazel_module: { bp2build_available: true }, bazel_module: { bp2build_available: true },
}`, }`,
expectedBazelTargets: []string{ ExpectedBazelTargets: []string{
makeBazelTarget("sh_binary", "foo", attrNameToString{ makeBazelTarget("sh_binary", "foo", AttrNameToString{
"srcs": `["foo.sh"]`, "srcs": `["foo.sh"]`,
})}, })},
}) })

View File

@@ -20,9 +20,9 @@ import (
"testing" "testing"
) )
func runSoongConfigModuleTypeTest(t *testing.T, tc bp2buildTestCase) { func runSoongConfigModuleTypeTest(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, registerSoongConfigModuleTypes, tc) RunBp2BuildTestCase(t, registerSoongConfigModuleTypes, tc)
} }
func registerSoongConfigModuleTypes(ctx android.RegistrationContext) { func registerSoongConfigModuleTypes(ctx android.RegistrationContext) {
@@ -61,12 +61,12 @@ custom_cc_library_static {
} }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - soong_config_module_type is supported in bp2build", Description: "soong config variables - soong_config_module_type is supported in bp2build",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp, Blueprint: bp,
expectedBazelTargets: []string{`cc_library_static( ExpectedBazelTargets: []string{`cc_library_static(
name = "foo", name = "foo",
copts = select({ copts = select({
"//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"], "//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"],
@@ -107,15 +107,15 @@ custom_cc_library_static {
} }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - soong_config_module_type_import is supported in bp2build", Description: "soong config variables - soong_config_module_type_import is supported in bp2build",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
filesystem: map[string]string{ Filesystem: map[string]string{
"foo/bar/SoongConfig.bp": configBp, "foo/bar/SoongConfig.bp": configBp,
}, },
blueprint: bp, Blueprint: bp,
expectedBazelTargets: []string{`cc_library_static( ExpectedBazelTargets: []string{`cc_library_static(
name = "foo", name = "foo",
copts = select({ copts = select({
"//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"], "//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"],
@@ -161,12 +161,12 @@ custom_cc_library_static {
} }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for string vars", Description: "soong config variables - generates selects for string vars",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp, Blueprint: bp,
expectedBazelTargets: []string{`cc_library_static( ExpectedBazelTargets: []string{`cc_library_static(
name = "foo", name = "foo",
copts = select({ copts = select({
"//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"], "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
@@ -232,12 +232,12 @@ custom_cc_library_static {
}, },
}` }`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for multiple variable types", Description: "soong config variables - generates selects for multiple variable types",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp, Blueprint: bp,
expectedBazelTargets: []string{`cc_library_static( ExpectedBazelTargets: []string{`cc_library_static(
name = "foo", name = "foo",
copts = select({ copts = select({
"//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"], "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
@@ -298,15 +298,15 @@ cc_library_static { name: "soc_b_dep", bazel_module: { bp2build_available: false
cc_library_static { name: "soc_default_static_dep", bazel_module: { bp2build_available: false } } cc_library_static { name: "soc_default_static_dep", bazel_module: { bp2build_available: false } }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for label list attributes", Description: "soong config variables - generates selects for label list attributes",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp, Blueprint: bp,
filesystem: map[string]string{ Filesystem: map[string]string{
"foo/bar/Android.bp": otherDeps, "foo/bar/Android.bp": otherDeps,
}, },
expectedBazelTargets: []string{`cc_library_static( ExpectedBazelTargets: []string{`cc_library_static(
name = "foo", name = "foo",
copts = select({ copts = select({
"//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"], "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
@@ -365,12 +365,12 @@ cc_library_static {
} }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - defaults with a single namespace", Description: "soong config variables - defaults with a single namespace",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp, Blueprint: bp,
expectedBazelTargets: []string{`cc_library_static( ExpectedBazelTargets: []string{`cc_library_static(
name = "lib", name = "lib",
copts = select({ copts = select({
"//build/bazel/product_variables:vendor_foo__feature": [ "//build/bazel/product_variables:vendor_foo__feature": [
@@ -446,12 +446,12 @@ cc_library_static {
} }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - multiple defaults with a single namespace", Description: "soong config variables - multiple defaults with a single namespace",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp, Blueprint: bp,
expectedBazelTargets: []string{`cc_library_static( ExpectedBazelTargets: []string{`cc_library_static(
name = "lib", name = "lib",
asflags = select({ asflags = select({
"//build/bazel/product_variables:acme__feature": ["-asflag_bar"], "//build/bazel/product_variables:acme__feature": ["-asflag_bar"],
@@ -562,12 +562,12 @@ cc_library_static {
} }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - defaults with multiple namespaces", Description: "soong config variables - defaults with multiple namespaces",
moduleTypeUnderTest: "cc_library_static", ModuleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory, ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp, Blueprint: bp,
expectedBazelTargets: []string{`cc_library_static( ExpectedBazelTargets: []string{`cc_library_static(
name = "lib", name = "lib",
copts = select({ copts = select({
"//build/bazel/product_variables:vendor_bar__feature": ["-DVENDOR_BAR_FEATURE"], "//build/bazel/product_variables:vendor_bar__feature": ["-DVENDOR_BAR_FEATURE"],
@@ -653,15 +653,15 @@ cc_library { name: "lib_b", bazel_module: { bp2build_available: false } }
cc_library { name: "lib_default", bazel_module: { bp2build_available: false } } cc_library { name: "lib_default", bazel_module: { bp2build_available: false } }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy", Description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary", ModuleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory, ModuleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp, Blueprint: bp,
filesystem: map[string]string{ Filesystem: map[string]string{
"foo/bar/Android.bp": otherDeps, "foo/bar/Android.bp": otherDeps,
}, },
expectedBazelTargets: []string{`cc_binary( ExpectedBazelTargets: []string{`cc_binary(
name = "library_linking_strategy_sample_binary", name = "library_linking_strategy_sample_binary",
deps = select({ deps = select({
"//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [ "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [
@@ -734,15 +734,15 @@ cc_library { name: "lib_a", bazel_module: { bp2build_available: false } }
cc_library { name: "lib_b", bazel_module: { bp2build_available: false } } cc_library { name: "lib_b", bazel_module: { bp2build_available: false } }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy", Description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary", ModuleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory, ModuleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp, Blueprint: bp,
filesystem: map[string]string{ Filesystem: map[string]string{
"foo/bar/Android.bp": otherDeps, "foo/bar/Android.bp": otherDeps,
}, },
expectedBazelTargets: []string{`cc_binary( ExpectedBazelTargets: []string{`cc_binary(
name = "library_linking_strategy_sample_binary", name = "library_linking_strategy_sample_binary",
deps = select({ deps = select({
"//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [ "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [
@@ -822,15 +822,15 @@ cc_library { name: "lib_b", bazel_module: { bp2build_available: false } }
cc_library { name: "lib_default", bazel_module: { bp2build_available: false } } cc_library { name: "lib_default", bazel_module: { bp2build_available: false } }
` `
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy", Description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary", ModuleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory, ModuleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp, Blueprint: bp,
filesystem: map[string]string{ Filesystem: map[string]string{
"foo/bar/Android.bp": otherDeps, "foo/bar/Android.bp": otherDeps,
}, },
expectedBazelTargets: []string{`cc_binary( ExpectedBazelTargets: []string{`cc_binary(
name = "alphabet_binary", name = "alphabet_binary",
deps = select({ deps = select({
"//build/bazel/product_variables:android__alphabet__a": [], "//build/bazel/product_variables:android__alphabet__a": [],
@@ -888,13 +888,13 @@ cc_binary {
}, },
}` }`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy", Description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary", ModuleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory, ModuleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp, Blueprint: bp,
filesystem: map[string]string{}, Filesystem: map[string]string{},
expectedBazelTargets: []string{`cc_binary( ExpectedBazelTargets: []string{`cc_binary(
name = "alphabet_binary", name = "alphabet_binary",
local_includes = ["."], local_includes = ["."],
srcs = ["main.cc"], srcs = ["main.cc"],
@@ -941,13 +941,13 @@ cc_binary {
enabled: false, enabled: false,
}` }`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy", Description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary", ModuleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory, ModuleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp, Blueprint: bp,
filesystem: map[string]string{}, Filesystem: map[string]string{},
expectedBazelTargets: []string{`cc_binary( ExpectedBazelTargets: []string{`cc_binary(
name = "alphabet_binary", name = "alphabet_binary",
local_includes = ["."], local_includes = ["."],
srcs = ["main.cc"], srcs = ["main.cc"],
@@ -985,13 +985,13 @@ cc_binary {
defaults: ["alphabet_sample_cc_defaults"], defaults: ["alphabet_sample_cc_defaults"],
}` }`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{ runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy", Description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary", ModuleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory, ModuleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp, Blueprint: bp,
filesystem: map[string]string{}, Filesystem: map[string]string{},
expectedBazelTargets: []string{`cc_binary( ExpectedBazelTargets: []string{`cc_binary(
name = "alphabet_binary", name = "alphabet_binary",
local_includes = ["."], local_includes = ["."],
srcs = ["main.cc"], srcs = ["main.cc"],

View File

@@ -53,16 +53,16 @@ func checkError(t *testing.T, errs []error, expectedErr error) bool {
return false return false
} }
func errored(t *testing.T, tc bp2buildTestCase, errs []error) bool { func errored(t *testing.T, tc Bp2buildTestCase, errs []error) bool {
t.Helper() t.Helper()
if tc.expectedErr != nil { if tc.ExpectedErr != nil {
// Rely on checkErrors, as this test case is expected to have an error. // Rely on checkErrors, as this test case is expected to have an error.
return false return false
} }
if len(errs) > 0 { if len(errs) > 0 {
for _, err := range errs { for _, err := range errs {
t.Errorf("%s: %s", tc.description, err) t.Errorf("%s: %s", tc.Description, err)
} }
return true return true
} }
@@ -71,42 +71,42 @@ func errored(t *testing.T, tc bp2buildTestCase, errs []error) bool {
return false return false
} }
func runBp2BuildTestCaseSimple(t *testing.T, tc bp2buildTestCase) { func runBp2BuildTestCaseSimple(t *testing.T, tc Bp2buildTestCase) {
t.Helper() t.Helper()
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc) RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
} }
type bp2buildTestCase struct { type Bp2buildTestCase struct {
description string Description string
moduleTypeUnderTest string ModuleTypeUnderTest string
moduleTypeUnderTestFactory android.ModuleFactory ModuleTypeUnderTestFactory android.ModuleFactory
blueprint string Blueprint string
expectedBazelTargets []string ExpectedBazelTargets []string
filesystem map[string]string Filesystem map[string]string
dir string Dir string
// An error with a string contained within the string of the expected error // An error with a string contained within the string of the expected error
expectedErr error ExpectedErr error
unconvertedDepsMode unconvertedDepsMode 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() t.Helper()
dir := "." dir := "."
filesystem := make(map[string][]byte) filesystem := make(map[string][]byte)
toParse := []string{ toParse := []string{
"Android.bp", "Android.bp",
} }
for f, content := range tc.filesystem { for f, content := range tc.Filesystem {
if strings.HasSuffix(f, "Android.bp") { if strings.HasSuffix(f, "Android.bp") {
toParse = append(toParse, f) toParse = append(toParse, f)
} }
filesystem[f] = []byte(content) filesystem[f] = []byte(content)
} }
config := android.TestConfig(buildDir, nil, tc.blueprint, filesystem) config := android.TestConfig(buildDir, nil, tc.Blueprint, filesystem)
ctx := android.NewTestContext(config) ctx := android.NewTestContext(config)
registerModuleTypes(ctx) registerModuleTypes(ctx)
ctx.RegisterModuleType(tc.moduleTypeUnderTest, tc.moduleTypeUnderTestFactory) ctx.RegisterModuleType(tc.ModuleTypeUnderTest, tc.ModuleTypeUnderTestFactory)
ctx.RegisterBp2BuildConfig(bp2buildConfig) ctx.RegisterBp2BuildConfig(bp2buildConfig)
ctx.RegisterForBazelConversion() ctx.RegisterForBazelConversion()
@@ -120,35 +120,35 @@ func runBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.Regi
} }
parseAndResolveErrs := append(parseErrs, resolveDepsErrs...) parseAndResolveErrs := append(parseErrs, resolveDepsErrs...)
if tc.expectedErr != nil && checkError(t, parseAndResolveErrs, tc.expectedErr) { if tc.ExpectedErr != nil && checkError(t, parseAndResolveErrs, tc.ExpectedErr) {
return return
} }
checkDir := dir checkDir := dir
if tc.dir != "" { if tc.Dir != "" {
checkDir = tc.dir checkDir = tc.Dir
} }
codegenCtx := NewCodegenContext(config, *ctx.Context, Bp2Build) codegenCtx := NewCodegenContext(config, *ctx.Context, Bp2Build)
codegenCtx.unconvertedDepMode = tc.unconvertedDepsMode codegenCtx.unconvertedDepMode = tc.UnconvertedDepsMode
bazelTargets, errs := generateBazelTargetsForDir(codegenCtx, checkDir) bazelTargets, errs := generateBazelTargetsForDir(codegenCtx, checkDir)
if tc.expectedErr != nil { if tc.ExpectedErr != nil {
if checkError(t, errs, tc.expectedErr) { if checkError(t, errs, tc.ExpectedErr) {
return return
} else { } 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 { } else {
android.FailIfErrored(t, errs) 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)", 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 { } else {
for i, target := range bazelTargets { 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( t.Errorf(
"%s: Expected generated Bazel target to be `%s`, got `%s`", "%s: Expected generated Bazel target to be `%s`, got `%s`",
tc.description, w, g) tc.Description, w, g)
} }
} }
} }
@@ -391,10 +391,10 @@ func simpleModuleDoNotConvertBp2build(typ, name string) string {
}`, typ, name) }`, typ, name)
} }
type attrNameToString map[string]string type AttrNameToString map[string]string
func (a attrNameToString) clone() attrNameToString { func (a AttrNameToString) clone() AttrNameToString {
newAttrs := make(attrNameToString, len(a)) newAttrs := make(AttrNameToString, len(a))
for k, v := range a { for k, v := range a {
newAttrs[k] = v newAttrs[k] = v
} }
@@ -403,7 +403,7 @@ func (a attrNameToString) clone() attrNameToString {
// makeBazelTargetNoRestrictions returns bazel target build file definition that can be host or // makeBazelTargetNoRestrictions returns bazel target build file definition that can be host or
// device specific, or independent of host/device. // 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 { if _, ok := attrs["target_compatible_with"]; !ok {
switch hod { switch hod {
case android.HostSupported: case android.HostSupported:
@@ -426,15 +426,15 @@ func makeBazelTargetHostOrDevice(typ, name string, attrs attrNameToString, hod a
)`, typ, strings.Join(attrStrings, "\n")) )`, 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 // target_compatible_with. This is useful for module types like filegroup and genrule that arch not
// arch variant // 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) return makeBazelTargetHostOrDevice(typ, name, attrs, android.HostAndDeviceDefault)
} }
// makeBazelTargetNoRestrictions returns bazel target build file definition that is device specific // makeBazelTargetNoRestrictions returns bazel target build file definition that is device specific
// as this is the most common default in Soong. // 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) return makeBazelTargetHostOrDevice(typ, name, attrs, android.DeviceSupported)
} }