02914408de
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
1048 lines
29 KiB
Go
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)
|
|
})
|
|
}
|