// Copyright 2024 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 java import ( "android/soong/android" "fmt" "testing" ) var checkContainerMatch = func(t *testing.T, name string, container string, expected bool, actual bool) { errorMessage := fmt.Sprintf("module %s container %s value differ", name, container) android.AssertBoolEquals(t, errorMessage, expected, actual) } func TestJavaContainersModuleProperties(t *testing.T) { result := android.GroupFixturePreparers( prepareForJavaTest, ).RunTestWithBp(t, ` java_library { name: "foo", srcs: ["A.java"], } java_library { name: "foo_vendor", srcs: ["A.java"], vendor: true, sdk_version: "current", } java_library { name: "foo_soc_specific", srcs: ["A.java"], soc_specific: true, sdk_version: "current", } java_library { name: "foo_product_specific", srcs: ["A.java"], product_specific: true, sdk_version: "current", } java_test { name: "foo_cts_test", srcs: ["A.java"], test_suites: [ "cts", ], } java_test { name: "foo_non_cts_test", srcs: ["A.java"], test_suites: [ "general-tests", ], } java_library { name: "bar", static_libs: [ "framework-minus-apex", ], } java_library { name: "baz", static_libs: [ "bar", ], } `) testcases := []struct { moduleName string isSystemContainer bool isVendorContainer bool isProductContainer bool isCts bool isUnstable bool }{ { moduleName: "foo", isSystemContainer: true, isVendorContainer: false, isProductContainer: false, isCts: false, isUnstable: false, }, { moduleName: "foo_vendor", isSystemContainer: false, isVendorContainer: true, isProductContainer: false, isCts: false, isUnstable: false, }, { moduleName: "foo_soc_specific", isSystemContainer: false, isVendorContainer: true, isProductContainer: false, isCts: false, isUnstable: false, }, { moduleName: "foo_product_specific", isSystemContainer: false, isVendorContainer: false, isProductContainer: true, isCts: false, isUnstable: false, }, { moduleName: "foo_cts_test", isSystemContainer: false, isVendorContainer: false, isProductContainer: false, isCts: true, isUnstable: false, }, { moduleName: "foo_non_cts_test", isSystemContainer: false, isVendorContainer: false, isProductContainer: false, isCts: false, isUnstable: false, }, { moduleName: "bar", isSystemContainer: true, isVendorContainer: false, isProductContainer: false, isCts: false, isUnstable: true, }, { moduleName: "baz", isSystemContainer: true, isVendorContainer: false, isProductContainer: false, isCts: false, isUnstable: true, }, } for _, c := range testcases { m := result.ModuleForTests(c.moduleName, "android_common") containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider) belongingContainers := containers.BelongingContainers() checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers)) checkContainerMatch(t, c.moduleName, "vendor", c.isVendorContainer, android.InList(android.VendorContainer, belongingContainers)) checkContainerMatch(t, c.moduleName, "product", c.isProductContainer, android.InList(android.ProductContainer, belongingContainers)) checkContainerMatch(t, c.moduleName, "cts", c.isCts, android.InList(android.CtsContainer, belongingContainers)) checkContainerMatch(t, c.moduleName, "unstable", c.isUnstable, android.InList(android.UnstableContainer, belongingContainers)) } }