platform_build_soong/bp2build/java_library_conversion_test.go
Liz Kammer 02914408de Add do not convert for sdk_version unset
When sdk_version is unset, the build with fail with Bazel because
private APIs are do not build with Bazel at this time.

This instead prevents migrating the relevant target to Bazel in bp2build

Test: go tests
Change-Id: I31dabcf143de7933706d1b734ef21467a01b65e9
2023-08-29 20:06:48 -04:00

1048 lines
29 KiB
Go

// Copyright 2021 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package bp2build
import (
"fmt"
"testing"
"android/soong/android"
"android/soong/java"
)
func runJavaLibraryTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
t.Helper()
(&tc).ModuleTypeUnderTest = "java_library"
(&tc).ModuleTypeUnderTestFactory = java.LibraryFactory
RunBp2BuildTestCase(t, registrationCtxFunc, tc)
}
func runJavaLibraryTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper()
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
}
func TestJavaLibrary(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Description: "java_library with srcs, exclude_srcs and libs",
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java", "b.java"],
exclude_srcs: ["b.java"],
libs: ["java-lib-2"],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["b.java"],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`,
"deps": `[":java-lib-2-neverlink"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{
"srcs": `["b.java"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
},
})
}
func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
libs: ["java-lib-2"],
static_libs: ["java-lib-3"],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["b.java"],
sdk_version: "current",
bazel_module: { bp2build_available: false },
}
java_library {
name: "java-lib-3",
srcs: ["c.java"],
sdk_version: "current",
bazel_module: { bp2build_available: false },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`,
"deps": `[
":java-lib-2-neverlink",
":java-lib-3",
]`,
"exports": `[":java-lib-3"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Blueprint: `java_library {
name: "java-lib-1",
static_libs: ["java-lib-2"],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["a.java"],
bazel_module: { bp2build_available: false },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"exports": `[":java-lib-2"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryFailsToConvertNoSdkVersion(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Blueprint: `
java_library {
name: "lib",
bazel_module: { bp2build_available: true },
}
`,
ExpectedBazelTargets: []string{}, // no targets expected because sdk_version is not set
})
}
func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
Blueprint: `java_library {
name: "java-lib-1",
libs: ["java-lib-2"],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["a.java"],
sdk_version: "current",
bazel_module: { bp2build_available: false },
}`,
ExpectedBazelTargets: []string{},
})
}
func TestJavaLibraryPlugins(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Blueprint: `java_library {
name: "java-lib-1",
plugins: ["java-plugin-1"],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}
java_plugin {
name: "java-plugin-1",
srcs: ["a.java"],
bazel_module: { bp2build_available: false },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"plugins": `[":java-plugin-1"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
}, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("java_plugin", java.PluginFactory)
})
}
func TestJavaLibraryJavaVersion(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
java_version: "11",
sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`,
"java_version": `"11"`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTargetWithAttrs(
"java_library",
"java-lib-1",
AttrNameToString{
"java_version": `"11"`,
"sdk_version": `"current"`,
}),
},
})
}
func TestJavaLibraryErrorproneEnabledManually(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
javacflags: ["-Xsuper-fast"],
sdk_version: "current",
errorprone: {
enabled: true,
javacflags: ["-Xep:SpeedLimit:OFF"],
extra_check_modules: ["plugin2"],
},
}
java_plugin {
name: "plugin2",
srcs: ["a.java"],
bazel_module: { bp2build_available: false },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"javacopts": `[
"-Xsuper-fast",
"-Xep:SpeedLimit:OFF",
]`,
"plugins": `[":plugin2"]`,
"srcs": `["a.java"]`,
"errorprone_force_enable": `True`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
}, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("java_plugin", java.PluginFactory)
})
}
func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
sdk_version: "current",
javacflags: ["-Xsuper-fast"],
errorprone: {
javacflags: ["-Xep:SpeedLimit:OFF"],
},
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"javacopts": `["-Xsuper-fast"]`,
"srcs": `["a.java"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryErrorproneDisabledManually(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
javacflags: ["-Xsuper-fast"],
sdk_version: "current",
errorprone: {
enabled: false,
},
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"javacopts": `[
"-Xsuper-fast",
"-XepDisableAllChecks",
]`,
"srcs": `["a.java"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryLogTags(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Description: "Java library - logtags creates separate dependency",
ModuleTypeUnderTest: "java_library",
ModuleTypeUnderTestFactory: java.LibraryFactory,
Blueprint: `java_library {
name: "example_lib",
srcs: [
"a.java",
"b.java",
"a.logtag",
"b.logtag",
],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
"srcs": `[
"a.logtag",
"b.logtag",
]`,
}),
MakeBazelTarget("java_library", "example_lib", AttrNameToString{
"srcs": `[
"a.java",
"b.java",
":example_lib_logtags",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
}})
}
func TestJavaLibraryResources(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Dir: "adir",
Filesystem: map[string]string{
"adir/res/a.res": "",
"adir/res/b.res": "",
"adir/res/dir1/b.res": "",
"adir/Android.bp": `java_library {
name: "java-lib-1",
java_resources: ["res/a.res", "res/b.res"],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}`,
},
Blueprint: "",
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resources": `[
"res/a.res",
"res/b.res",
]`,
"resource_strip_prefix": `"adir"`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryResourceDirs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Filesystem: map[string]string{
"res/a.res": "",
"res/b.res": "",
"res/dir1/b.res": "",
},
Blueprint: `java_library {
name: "java-lib-1",
java_resource_dirs: ["res"],
sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resource_strip_prefix": `"res"`,
"resources": `[
"res/a.res",
"res/b.res",
"res/dir1/b.res",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryResourcesExcludeDir(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Filesystem: map[string]string{
"res/a.res": "",
"res/exclude/b.res": "",
},
Blueprint: `java_library {
name: "java-lib-1",
java_resource_dirs: ["res"],
sdk_version: "current",
exclude_java_resource_dirs: ["res/exclude"],
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resource_strip_prefix": `"res"`,
"resources": `["res/a.res"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryResourcesExcludeFile(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Filesystem: map[string]string{
"res/a.res": "",
"res/dir1/b.res": "",
"res/dir1/exclude.res": "",
},
Blueprint: `java_library {
name: "java-lib-1",
java_resource_dirs: ["res"],
sdk_version: "current",
exclude_java_resources: ["res/dir1/exclude.res"],
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resource_strip_prefix": `"res"`,
"resources": `[
"res/a.res",
"res/dir1/b.res",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Filesystem: map[string]string{
"res/a.res": "",
"res1/b.res": "",
},
Blueprint: `java_library {
name: "java-lib-1",
java_resource_dirs: ["res", "res1"],
sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
"resource_strip_prefix": `"res1"`,
"resources": `["res1/b.res"]`,
}),
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"additional_resources": `["java-lib-1_resource_dir_res1"]`,
"resources": `["res/a.res"]`,
"resource_strip_prefix": `"res"`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Filesystem: map[string]string{
"resdir/a.res": "",
},
Blueprint: `java_library {
name: "java-lib-1",
java_resources: ["res1", "res2"],
java_resource_dirs: ["resdir"],
sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
"resource_strip_prefix": `"resdir"`,
"resources": `["resdir/a.res"]`,
}),
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"additional_resources": `["java-lib-1_resource_dir_resdir"]`,
"resource_strip_prefix": `"."`,
"resources": `[
"res1",
"res2",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryAidl(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Description: "Java library - aidl creates separate dependency",
ModuleTypeUnderTest: "java_library",
ModuleTypeUnderTestFactory: java.LibraryFactory,
Blueprint: `java_library {
name: "example_lib",
srcs: [
"a.java",
"b.java",
"a.aidl",
"b.aidl",
],
bazel_module: { bp2build_available: true },
sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
"srcs": `[
"a.aidl",
"b.aidl",
]`,
}),
MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
"deps": `[":example_lib_aidl_library"]`,
}),
MakeBazelTarget("java_library", "example_lib", AttrNameToString{
"deps": `[":example_lib_java_aidl_library"]`,
"exports": `[":example_lib_java_aidl_library"]`,
"srcs": `[
"a.java",
"b.java",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
}})
}
func TestJavaLibraryAidlSrcsNoFileGroup(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Description: "Java library - aidl filegroup is parsed",
ModuleTypeUnderTest: "java_library",
ModuleTypeUnderTestFactory: java.LibraryFactory,
Blueprint: `
java_library {
name: "example_lib",
srcs: [
"a.java",
"b.aidl",
],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
"srcs": `["b.aidl"]`,
}),
MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
"deps": `[":example_lib_aidl_library"]`,
}),
MakeBazelTarget("java_library", "example_lib", AttrNameToString{
"deps": `[":example_lib_java_aidl_library"]`,
"exports": `[":example_lib_java_aidl_library"]`,
"srcs": `["a.java"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
},
}, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
})
}
func TestJavaLibraryAidlFilegroup(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Description: "Java library - aidl filegroup is parsed",
ModuleTypeUnderTest: "java_library",
ModuleTypeUnderTestFactory: java.LibraryFactory,
Blueprint: `
filegroup {
name: "random_other_files",
srcs: [
"a.java",
"b.java",
],
}
filegroup {
name: "aidl_files",
srcs: [
"a.aidl",
"b.aidl",
],
}
java_library {
name: "example_lib",
srcs: [
"a.java",
"b.java",
":aidl_files",
":random_other_files",
],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: []string{
MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
"srcs": `[
"a.aidl",
"b.aidl",
]`,
"tags": `["apex_available=//apex_available:anyapex"]`,
}),
MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{
"deps": `[":aidl_files"]`,
}),
MakeBazelTarget("java_library", "example_lib", AttrNameToString{
"deps": `[":example_lib_java_aidl_library"]`,
"exports": `[":example_lib_java_aidl_library"]`,
"srcs": `[
"a.java",
"b.java",
":random_other_files",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
"srcs": `[
"a.java",
"b.java",
]`,
}),
},
}, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
})
}
func TestJavaLibraryAidlNonAdjacentAidlFilegroup(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Description: "java_library with non adjacent aidl filegroup",
ModuleTypeUnderTest: "java_library",
ModuleTypeUnderTestFactory: java.LibraryFactory,
Filesystem: map[string]string{
"path/to/A/Android.bp": `
filegroup {
name: "A_aidl",
srcs: ["aidl/A.aidl"],
path: "aidl",
}`,
},
Blueprint: `
java_library {
name: "foo",
srcs: [
":A_aidl",
],
sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
"deps": `["//path/to/A:A_aidl"]`,
}),
MakeBazelTarget("java_library", "foo", AttrNameToString{
"exports": `[":foo_java_aidl_library"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "foo"),
},
}, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
})
}
func TestConvertArmNeonVariant(t *testing.T) {
t.Helper()
RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
Description: "Android Library - simple arch feature",
ModuleTypeUnderTest: "android_library",
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
name: "TestLib",
manifest: "manifest/AndroidManifest.xml",
srcs: ["lib.java"],
sdk_version: "current",
arch: {
arm: {
neon: {
srcs: ["arm_neon.java"],
},
},
},
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget(
"android_library",
"TestLib",
AttrNameToString{
"srcs": `["lib.java"] + select({
"//build/bazel/platforms/arch/variants:arm-neon": ["arm_neon.java"],
"//conditions:default": [],
})`,
"manifest": `"manifest/AndroidManifest.xml"`,
"resource_files": `[]`,
"sdk_version": `"current"`, // use as default
}),
MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
}
func TestConvertMultipleArchFeatures(t *testing.T) {
t.Helper()
RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
Description: "Android Library - multiple arch features",
ModuleTypeUnderTest: "android_library",
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
name: "TestLib",
manifest: "manifest/AndroidManifest.xml",
srcs: ["lib.java"],
sdk_version: "current",
arch: {
x86: {
ssse3: {
srcs: ["ssse3.java"],
},
sse4_1: {
srcs: ["sse4_1.java"],
},
},
},
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget(
"android_library",
"TestLib",
AttrNameToString{
"srcs": `["lib.java"] + select({
"//build/bazel/platforms/arch/variants:x86-sse4_1": ["sse4_1.java"],
"//build/bazel/platforms/arch/variants:x86-sse4_1-ssse3": [
"sse4_1.java",
"ssse3.java",
],
"//build/bazel/platforms/arch/variants:x86-ssse3": ["ssse3.java"],
"//conditions:default": [],
})`,
"manifest": `"manifest/AndroidManifest.xml"`,
"resource_files": `[]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
}
func TestConvertExcludeSrcsArchFeature(t *testing.T) {
t.Helper()
RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{
Description: "Android Library - exclude_srcs with arch feature",
ModuleTypeUnderTest: "android_library",
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
name: "TestLib",
manifest: "manifest/AndroidManifest.xml",
srcs: ["lib.java"],
arch: {
arm: {
srcs: ["arm_non_neon.java"],
neon: {
exclude_srcs: ["arm_non_neon.java"],
},
},
},
sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget(
"android_library",
"TestLib",
AttrNameToString{
"srcs": `["lib.java"] + select({
"//build/bazel/platforms/arch/variants:arm-neon": [],
"//build/bazel/platforms/arch:arm": ["arm_non_neon.java"],
"//conditions:default": [],
})`,
"manifest": `"manifest/AndroidManifest.xml"`,
"resource_files": `[]`,
"sdk_version": `"current"`, // use as default
}),
MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
}
func TestJavaLibraryKotlinSrcs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Description: "java_library with kotlin srcs",
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java", "b.java", "c.kt"],
bazel_module: { bp2build_available: true },
sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
"srcs": `[
"a.java",
"b.java",
"c.kt",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
},
})
}
func TestJavaLibraryKotlincflags(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Description: "java_library with kotlincfalgs",
Blueprint: `java_library {
name: "java-lib-1",
srcs: [ "a.kt"],
kotlincflags: ["-flag1", "-flag2"],
bazel_module: { bp2build_available: true },
sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
"srcs": `["a.kt"]`,
"kotlincflags": `[
"-flag1",
"-flag2",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
},
})
}
func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Description: "java_library with kotlin common_srcs",
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java", "b.java"],
common_srcs: ["c.kt"],
bazel_module: { bp2build_available: true },
sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
"srcs": `[
"a.java",
"b.java",
]`,
"common_srcs": `["c.kt"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
},
})
}
func TestJavaLibraryArchVariantDeps(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Description: "java_library with arch variant libs",
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
libs: ["java-lib-2"],
sdk_version: "current",
target: {
android: {
libs: ["java-lib-3"],
static_libs: ["java-lib-4"],
},
},
bazel_module: { bp2build_available: true },
}
java_library{
name: "java-lib-2",
bazel_module: { bp2build_available: false },
}
java_library{
name: "java-lib-3",
bazel_module: { bp2build_available: false },
}
java_library{
name: "java-lib-4",
bazel_module: { bp2build_available: false },
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`,
"exports": `select({
"//build/bazel/platforms/os:android": [":java-lib-4"],
"//conditions:default": [],
})`,
"deps": `[":java-lib-2-neverlink"] + select({
"//build/bazel/platforms/os:android": [
":java-lib-3-neverlink",
":java-lib-4",
],
"//conditions:default": [],
})`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryArchVariantSrcsWithExcludes(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Description: "java_library with arch variant libs",
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java", "b.java"],
sdk_version: "current",
target: {
android: {
exclude_srcs: ["a.java"],
},
},
bazel_module: { bp2build_available: true },
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["b.java"] + select({
"//build/bazel/platforms/os:android": [],
"//conditions:default": ["a.java"],
})`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
func TestJavaLibraryJavaResourcesSingleFilegroup(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Filesystem: map[string]string{
"res/a.res": "",
"res/b.res": "",
"res/dir1/b.res": "",
},
Description: "java_library",
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
sdk_version: "current",
java_resources: [":filegroup1"],
bazel_module: { bp2build_available: true },
}
filegroup {
name: "filegroup1",
path: "foo",
srcs: ["foo/a", "foo/b"],
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`,
"resources": `[":filegroup1"]`,
"resource_strip_prefix": `"foo"`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
"srcs": `[
"foo/a",
"foo/b",
]`}),
},
}, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
})
}
func TestJavaLibraryJavaResourcesMultipleFilegroup(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Filesystem: map[string]string{
"a.res": "",
},
Description: "with java_resources that has multiple filegroups",
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
java_resources: ["a.res", ":filegroup1", ":filegroup2"],
sdk_version: "current",
bazel_module: { bp2build_available: true },
}
filegroup {
name: "filegroup1",
path: "foo",
srcs: ["foo/a"],
}
filegroup {
name: "filegroup2",
path: "bar",
srcs: ["bar/a"],
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup1", AttrNameToString{
"resource_strip_prefix": `"foo"`,
"resources": `[":filegroup1"]`,
}),
MakeBazelTarget("java_resources", "java-lib-1_filegroup_resources_filegroup2", AttrNameToString{
"resource_strip_prefix": `"bar"`,
"resources": `[":filegroup2"]`,
}),
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`,
"resources": `["a.res"]`,
"resource_strip_prefix": `"."`,
"additional_resources": `[
"java-lib-1_filegroup_resources_filegroup1",
"java-lib-1_filegroup_resources_filegroup2",
]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
"srcs": `["foo/a"]`}),
MakeBazelTargetNoRestrictions("filegroup", "filegroup2", AttrNameToString{
"srcs": `["bar/a"]`}),
},
}, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
})
}