// Copyright 2022 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 ( "android/soong/android" "android/soong/java" "testing" ) func runJavaImportTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) { t.Helper() (&tc).ModuleTypeUnderTest = "java_import" (&tc).ModuleTypeUnderTestFactory = java.ImportFactory RunBp2BuildTestCase(t, registrationCtxFunc, tc) } func runJavaImportTestCase(t *testing.T, tc Bp2buildTestCase) { t.Helper() RunBp2BuildTestCase(t, registerJavaImportModuleTypes, tc) } func registerJavaImportModuleTypes(ctx android.RegistrationContext) { } func TestJavaImportMinimal(t *testing.T) { runJavaImportTestCase(t, Bp2buildTestCase{ Description: "Java import - simple example", ModuleTypeUnderTest: "java_import", ModuleTypeUnderTestFactory: java.ImportFactory, Filesystem: map[string]string{ "import.jar": "", }, Blueprint: ` java_import { name: "example_import", jars: ["import.jar"], bazel_module: { bp2build_available: true }, } `, ExpectedBazelTargets: []string{ MakeBazelTarget("java_import", "example_import", AttrNameToString{ "jars": `["import.jar"]`, }), MakeBazelTarget("java_library", "example_import-neverlink", AttrNameToString{ "exports": `[":example_import"]`, "neverlink": `True`, "sdk_version": `"none"`, }), }}) } func TestJavaImportArchVariant(t *testing.T) { runJavaImportTestCase(t, Bp2buildTestCase{ Description: "Java import - simple example", ModuleTypeUnderTest: "java_import", ModuleTypeUnderTestFactory: java.ImportFactory, Filesystem: map[string]string{ "import.jar": "", }, Blueprint: ` java_import { name: "example_import", target: { android: { jars: ["android.jar"], }, linux_glibc: { jars: ["linux.jar"], }, }, bazel_module: { bp2build_available: true }, } `, ExpectedBazelTargets: []string{ MakeBazelTarget("java_import", "example_import", AttrNameToString{ "jars": `select({ "//build/bazel/platforms/os:android": ["android.jar"], "//build/bazel/platforms/os:linux_glibc": ["linux.jar"], "//conditions:default": [], })`, }), MakeBazelTarget("java_library", "example_import-neverlink", AttrNameToString{ "exports": `[":example_import"]`, "neverlink": `True`, "sdk_version": `"none"`, }), }}) } func TestJavaImportHost(t *testing.T) { runJavaImportTestCase(t, Bp2buildTestCase{ Description: "Java import host- simple example", ModuleTypeUnderTest: "java_import_host", ModuleTypeUnderTestFactory: java.ImportFactory, Filesystem: map[string]string{ "import.jar": "", }, Blueprint: ` java_import_host { name: "example_import", jars: ["import.jar"], bazel_module: { bp2build_available: true }, } `, ExpectedBazelTargets: []string{ MakeBazelTarget("java_import", "example_import", AttrNameToString{ "jars": `["import.jar"]`, }), MakeBazelTarget("java_library", "example_import-neverlink", AttrNameToString{ "exports": `[":example_import"]`, "neverlink": `True`, "sdk_version": `"none"`, }), }}) } func TestJavaImportSameNameAsJavaLibrary(t *testing.T) { runJavaImportTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{ Description: "java_import has the same name as other package java_library's", Filesystem: map[string]string{ "foo/bar/Android.bp": simpleModule("java_library", "test_lib"), "test.jar": "", }, Blueprint: `java_import { name: "test_lib", jars: ["test.jar"], bazel_module: { bp2build_available: true }, } `, ExpectedBazelTargets: []string{ MakeBazelTarget("java_import", "test_lib", AttrNameToString{ "jars": `["test.jar"]`, }), MakeBazelTarget("java_library", "test_lib-neverlink", AttrNameToString{ "exports": `[":test_lib"]`, "neverlink": `True`, "sdk_version": `"none"`, }), }, }, func(ctx android.RegistrationContext) { ctx.RegisterModuleType("java_library", java.LibraryFactory) }) }