| // 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)) |
| } |
| } |