blob: dfbbe7dd9ee47782380799a2b1a3e1fe761ff36b [file] [log] [blame]
Inseob Kimc0907f12019-02-08 21:00:45 +09001// Copyright (C) 2019 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package sysprop
16
17import (
Paul Duffin9cbbbb82021-03-18 00:21:03 +000018 "os"
19 "strings"
20 "testing"
Paul Duffin7b3de8f2020-03-30 18:00:25 +010021
Inseob Kimc0907f12019-02-08 21:00:45 +090022 "android/soong/android"
23 "android/soong/cc"
24 "android/soong/java"
Andrew Walbrana5deb732024-02-15 13:39:46 +000025 "android/soong/rust"
Inseob Kimc0907f12019-02-08 21:00:45 +090026
Inseob Kimc0907f12019-02-08 21:00:45 +090027 "github.com/google/blueprint/proptools"
28)
29
Inseob Kimc0907f12019-02-08 21:00:45 +090030func TestMain(m *testing.M) {
Paul Duffin9cbbbb82021-03-18 00:21:03 +000031 os.Exit(m.Run())
Inseob Kimc0907f12019-02-08 21:00:45 +090032}
33
Paul Duffin9cbbbb82021-03-18 00:21:03 +000034func test(t *testing.T, bp string) *android.TestResult {
Colin Cross98be1bb2019-12-13 20:41:13 -080035 t.Helper()
Colin Cross98be1bb2019-12-13 20:41:13 -080036
Jiyong Park5e914b22021-03-08 10:09:52 +090037 bp += `
38 cc_library {
39 name: "libbase",
40 host_supported: true,
41 }
42
43 cc_library_headers {
44 name: "libbase_headers",
45 vendor_available: true,
Justin Yunaf1fde42023-09-27 16:22:10 +090046 product_available: true,
Jiyong Park5e914b22021-03-08 10:09:52 +090047 recovery_available: true,
48 }
49
Jiyong Park5e914b22021-03-08 10:09:52 +090050 java_library {
51 name: "sysprop-library-stub-platform",
52 sdk_version: "core_current",
53 }
54
55 java_library {
56 name: "sysprop-library-stub-vendor",
57 soc_specific: true,
58 sdk_version: "core_current",
59 }
60
61 java_library {
62 name: "sysprop-library-stub-product",
63 product_specific: true,
64 sdk_version: "core_current",
65 }
Andrew Walbrana5deb732024-02-15 13:39:46 +000066
67 rust_library {
68 name: "librustutils",
69 crate_name: "rustutils",
70 srcs: ["librustutils/lib.rs"],
71 product_available: true,
72 vendor_available: true,
73 min_sdk_version: "29",
74 }
Andrew Walbranacd75d22024-03-12 17:27:29 +000075
76 rust_library {
77 name: "liblog_rust",
78 crate_name: "log",
79 srcs: ["log/src/lib.rs"],
80 product_available: true,
81 vendor_available: true,
82 min_sdk_version: "29",
83 }
Jiyong Park5e914b22021-03-08 10:09:52 +090084 `
85
Paul Duffin9cbbbb82021-03-18 00:21:03 +000086 mockFS := android.MockFS{
Inseob Kim42882742019-07-30 17:55:33 +090087 "a.java": nil,
88 "b.java": nil,
89 "c.java": nil,
90 "d.cpp": nil,
91 "api/sysprop-platform-current.txt": nil,
92 "api/sysprop-platform-latest.txt": nil,
93 "api/sysprop-platform-on-product-current.txt": nil,
94 "api/sysprop-platform-on-product-latest.txt": nil,
95 "api/sysprop-vendor-current.txt": nil,
96 "api/sysprop-vendor-latest.txt": nil,
Inseob Kimfe612182020-10-20 16:29:55 +090097 "api/sysprop-vendor-on-product-current.txt": nil,
98 "api/sysprop-vendor-on-product-latest.txt": nil,
Inseob Kim42882742019-07-30 17:55:33 +090099 "api/sysprop-odm-current.txt": nil,
100 "api/sysprop-odm-latest.txt": nil,
101 "framework/aidl/a.aidl": nil,
Inseob Kimc0907f12019-02-08 21:00:45 +0900102
103 // For framework-res, which is an implicit dependency for framework
Dan Willemsen412160e2019-04-09 21:36:26 -0700104 "AndroidManifest.xml": nil,
105 "build/make/target/product/security/testkey": nil,
Inseob Kimc0907f12019-02-08 21:00:45 +0900106
107 "build/soong/scripts/jar-wrapper.sh": nil,
108
Inseob Kimc0907f12019-02-08 21:00:45 +0900109 "jdk8/jre/lib/jce.jar": nil,
110 "jdk8/jre/lib/rt.jar": nil,
111 "jdk8/lib/tools.jar": nil,
112
113 "bar-doc/a.java": nil,
114 "bar-doc/b.java": nil,
115 "bar-doc/IFoo.aidl": nil,
116 "bar-doc/known_oj_tags.txt": nil,
117 "external/doclava/templates-sdk": nil,
118
119 "cert/new_cert.x509.pem": nil,
120 "cert/new_cert.pk8": nil,
121
122 "android/sysprop/PlatformProperties.sysprop": nil,
123 "com/android/VendorProperties.sysprop": nil,
Inseob Kim42882742019-07-30 17:55:33 +0900124 "com/android2/OdmProperties.sysprop": nil,
Andrew Walbrana5deb732024-02-15 13:39:46 +0000125
126 "librustutils/lib.rs": nil,
Andrew Walbranacd75d22024-03-12 17:27:29 +0000127 "log/src/lib.rs": nil,
Inseob Kimc0907f12019-02-08 21:00:45 +0900128 }
129
Paul Duffin89648f92021-03-20 00:36:55 +0000130 result := android.GroupFixturePreparers(
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000131 cc.PrepareForTestWithCcDefaultModules,
132 java.PrepareForTestWithJavaDefaultModules,
Andrew Walbrana5deb732024-02-15 13:39:46 +0000133 rust.PrepareForTestWithRustDefaultModules,
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000134 PrepareForTestWithSyspropBuildComponents,
135 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
136 variables.DeviceSystemSdkVersions = []string{"28"}
137 variables.DeviceVndkVersion = proptools.StringPtr("current")
Jiyong Parkf58c46e2021-04-01 21:35:20 +0900138 variables.Platform_vndk_version = proptools.StringPtr("29")
Jiyong Park7416d672024-01-04 23:20:42 +0000139 variables.DeviceCurrentApiLevelForVendorModules = proptools.StringPtr("28")
140 }),
141 java.FixtureWithPrebuiltApis(map[string][]string{
142 "28": {},
143 "29": {},
144 "30": {},
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000145 }),
146 mockFS.AddToFixture(),
147 android.FixtureWithRootAndroidBp(bp),
Paul Duffin89648f92021-03-20 00:36:55 +0000148 ).RunTest(t)
Inseob Kimc0907f12019-02-08 21:00:45 +0900149
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000150 return result
Inseob Kimc0907f12019-02-08 21:00:45 +0900151}
152
153func TestSyspropLibrary(t *testing.T) {
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000154 result := test(t, `
Inseob Kimc0907f12019-02-08 21:00:45 +0900155 sysprop_library {
156 name: "sysprop-platform",
Paul Duffin7b3de8f2020-03-30 18:00:25 +0100157 apex_available: ["//apex_available:platform"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900158 srcs: ["android/sysprop/PlatformProperties.sysprop"],
159 api_packages: ["android.sysprop"],
160 property_owner: "Platform",
161 vendor_available: true,
Inseob Kim89db15d2020-02-03 18:06:46 +0900162 host_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900163 }
164
165 sysprop_library {
166 name: "sysprop-platform-on-product",
167 srcs: ["android/sysprop/PlatformProperties.sysprop"],
168 api_packages: ["android.sysprop"],
169 property_owner: "Platform",
170 product_specific: true,
171 }
172
173 sysprop_library {
174 name: "sysprop-vendor",
175 srcs: ["com/android/VendorProperties.sysprop"],
176 api_packages: ["com.android"],
177 property_owner: "Vendor",
Inseob Kimfe612182020-10-20 16:29:55 +0900178 vendor: true,
179 }
180
181 sysprop_library {
182 name: "sysprop-vendor-on-product",
183 srcs: ["com/android/VendorProperties.sysprop"],
184 api_packages: ["com.android"],
185 property_owner: "Vendor",
Inseob Kimc0907f12019-02-08 21:00:45 +0900186 product_specific: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900187 }
188
Inseob Kim42882742019-07-30 17:55:33 +0900189 sysprop_library {
190 name: "sysprop-odm",
191 srcs: ["com/android2/OdmProperties.sysprop"],
192 api_packages: ["com.android2"],
193 property_owner: "Odm",
194 device_specific: true,
195 }
196
Inseob Kimc0907f12019-02-08 21:00:45 +0900197 java_library {
198 name: "java-platform",
199 srcs: ["c.java"],
200 sdk_version: "system_current",
201 libs: ["sysprop-platform"],
202 }
203
204 java_library {
Inseob Kimac1e9862019-12-09 18:15:47 +0900205 name: "java-platform-private",
206 srcs: ["c.java"],
207 platform_apis: true,
208 libs: ["sysprop-platform"],
209 }
210
211 java_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900212 name: "java-product",
213 srcs: ["c.java"],
214 sdk_version: "system_current",
215 product_specific: true,
Inseob Kimfe612182020-10-20 16:29:55 +0900216 libs: ["sysprop-platform", "sysprop-vendor-on-product"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900217 }
218
219 java_library {
220 name: "java-vendor",
221 srcs: ["c.java"],
222 sdk_version: "system_current",
223 soc_specific: true,
224 libs: ["sysprop-platform", "sysprop-vendor"],
225 }
226
227 cc_library {
228 name: "cc-client-platform",
229 srcs: ["d.cpp"],
Trevor Radcliffed82e8f62022-06-08 16:16:31 +0000230 static_libs: ["libsysprop-platform"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900231 }
232
Jiyong Park5d1598f2019-02-25 22:14:17 +0900233 cc_library_static {
234 name: "cc-client-platform-static",
235 srcs: ["d.cpp"],
Trevor Radcliffed82e8f62022-06-08 16:16:31 +0000236 whole_static_libs: ["libsysprop-platform"],
Jiyong Park5d1598f2019-02-25 22:14:17 +0900237 }
238
Inseob Kimc0907f12019-02-08 21:00:45 +0900239 cc_library {
240 name: "cc-client-product",
241 srcs: ["d.cpp"],
242 product_specific: true,
Trevor Radcliffed82e8f62022-06-08 16:16:31 +0000243 static_libs: ["libsysprop-platform-on-product", "libsysprop-vendor-on-product"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900244 }
245
246 cc_library {
247 name: "cc-client-vendor",
248 srcs: ["d.cpp"],
249 soc_specific: true,
Trevor Radcliffed82e8f62022-06-08 16:16:31 +0000250 static_libs: ["libsysprop-platform", "libsysprop-vendor"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900251 }
Inseob Kim1f959762019-03-27 17:20:37 +0900252
Inseob Kim89db15d2020-02-03 18:06:46 +0900253 cc_binary_host {
254 name: "hostbin",
Trevor Radcliffed82e8f62022-06-08 16:16:31 +0000255 static_libs: ["libsysprop-platform"],
Inseob Kim1f959762019-03-27 17:20:37 +0900256 }
Jiyong Park5e914b22021-03-08 10:09:52 +0900257 `)
Inseob Kimc0907f12019-02-08 21:00:45 +0900258
Inseob Kim42882742019-07-30 17:55:33 +0900259 // Check for generated cc_library
260 for _, variant := range []string{
Jiyong Parkf58c46e2021-04-01 21:35:20 +0900261 "android_vendor.29_arm_armv7-a-neon_shared",
262 "android_vendor.29_arm_armv7-a-neon_static",
263 "android_vendor.29_arm64_armv8-a_shared",
264 "android_vendor.29_arm64_armv8-a_static",
Inseob Kim42882742019-07-30 17:55:33 +0900265 } {
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000266 result.ModuleForTests("libsysprop-platform", variant)
267 result.ModuleForTests("libsysprop-vendor", variant)
268 result.ModuleForTests("libsysprop-odm", variant)
Inseob Kim42882742019-07-30 17:55:33 +0900269 }
270
Justin Yunaf1fde42023-09-27 16:22:10 +0900271 // product variant of vendor-owned sysprop_library
272 for _, variant := range []string{
273 "android_product.29_arm_armv7-a-neon_shared",
274 "android_product.29_arm_armv7-a-neon_static",
275 "android_product.29_arm64_armv8-a_shared",
276 "android_product.29_arm64_armv8-a_static",
277 } {
278 result.ModuleForTests("libsysprop-vendor-on-product", variant)
279 }
280
Inseob Kimc0907f12019-02-08 21:00:45 +0900281 for _, variant := range []string{
Colin Cross7113d202019-11-20 16:39:12 -0800282 "android_arm_armv7-a-neon_shared",
283 "android_arm_armv7-a-neon_static",
284 "android_arm64_armv8-a_shared",
285 "android_arm64_armv8-a_static",
Inseob Kimc0907f12019-02-08 21:00:45 +0900286 } {
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000287 library := result.ModuleForTests("libsysprop-platform", variant).Module().(*cc.Module)
Paul Duffin7b3de8f2020-03-30 18:00:25 +0100288 expectedApexAvailableOnLibrary := []string{"//apex_available:platform"}
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000289 android.AssertDeepEquals(t, "apex available property on libsysprop-platform", expectedApexAvailableOnLibrary, library.ApexProperties.Apex_available)
Inseob Kimc0907f12019-02-08 21:00:45 +0900290 }
291
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000292 result.ModuleForTests("sysprop-platform", "android_common")
293 result.ModuleForTests("sysprop-platform_public", "android_common")
294 result.ModuleForTests("sysprop-vendor", "android_common")
295 result.ModuleForTests("sysprop-vendor-on-product", "android_common")
Inseob Kimc0907f12019-02-08 21:00:45 +0900296
297 // Check for exported includes
Colin Cross7113d202019-11-20 16:39:12 -0800298 coreVariant := "android_arm64_armv8-a_static"
Jiyong Parkf58c46e2021-04-01 21:35:20 +0900299 vendorVariant := "android_vendor.29_arm64_armv8-a_static"
Justin Yunaf1fde42023-09-27 16:22:10 +0900300 productVariant := "android_product.29_arm64_armv8-a_static"
Inseob Kimc0907f12019-02-08 21:00:45 +0900301
Colin Cross7113d202019-11-20 16:39:12 -0800302 platformInternalPath := "libsysprop-platform/android_arm64_armv8-a_static/gen/sysprop/include"
Jiyong Parkf58c46e2021-04-01 21:35:20 +0900303 platformPublicVendorPath := "libsysprop-platform/android_vendor.29_arm64_armv8-a_static/gen/sysprop/public/include"
Inseob Kimc0907f12019-02-08 21:00:45 +0900304
Justin Yunaf1fde42023-09-27 16:22:10 +0900305 platformOnProductPath := "libsysprop-platform-on-product/android_product.29_arm64_armv8-a_static/gen/sysprop/public/include"
Inseob Kimc0907f12019-02-08 21:00:45 +0900306
Jiyong Parkf58c46e2021-04-01 21:35:20 +0900307 vendorInternalPath := "libsysprop-vendor/android_vendor.29_arm64_armv8-a_static/gen/sysprop/include"
Justin Yunaf1fde42023-09-27 16:22:10 +0900308 vendorOnProductPath := "libsysprop-vendor-on-product/android_product.29_arm64_armv8-a_static/gen/sysprop/public/include"
Inseob Kimc0907f12019-02-08 21:00:45 +0900309
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000310 platformClient := result.ModuleForTests("cc-client-platform", coreVariant)
Inseob Kimc0907f12019-02-08 21:00:45 +0900311 platformFlags := platformClient.Rule("cc").Args["cFlags"]
312
Jiyong Park5d1598f2019-02-25 22:14:17 +0900313 // platform should use platform's internal header
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000314 android.AssertStringDoesContain(t, "flags for platform", platformFlags, platformInternalPath)
Inseob Kimc0907f12019-02-08 21:00:45 +0900315
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000316 platformStaticClient := result.ModuleForTests("cc-client-platform-static", coreVariant)
Jiyong Park5d1598f2019-02-25 22:14:17 +0900317 platformStaticFlags := platformStaticClient.Rule("cc").Args["cFlags"]
318
319 // platform-static should use platform's internal header
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000320 android.AssertStringDoesContain(t, "flags for platform-static", platformStaticFlags, platformInternalPath)
Jiyong Park5d1598f2019-02-25 22:14:17 +0900321
Justin Yunaf1fde42023-09-27 16:22:10 +0900322 productClient := result.ModuleForTests("cc-client-product", productVariant)
Inseob Kimc0907f12019-02-08 21:00:45 +0900323 productFlags := productClient.Rule("cc").Args["cFlags"]
324
Inseob Kim5cefbd22019-06-08 20:36:59 +0900325 // Product should use platform's and vendor's public headers
Inseob Kimc0907f12019-02-08 21:00:45 +0900326 if !strings.Contains(productFlags, platformOnProductPath) ||
Justin Yunaf1fde42023-09-27 16:22:10 +0900327 !strings.Contains(productFlags, vendorOnProductPath) {
Inseob Kimc0907f12019-02-08 21:00:45 +0900328 t.Errorf("flags for product must contain %#v and %#v, but was %#v.",
Justin Yunaf1fde42023-09-27 16:22:10 +0900329 platformOnProductPath, vendorOnProductPath, productFlags)
Inseob Kimc0907f12019-02-08 21:00:45 +0900330 }
331
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000332 vendorClient := result.ModuleForTests("cc-client-vendor", vendorVariant)
Inseob Kimc0907f12019-02-08 21:00:45 +0900333 vendorFlags := vendorClient.Rule("cc").Args["cFlags"]
334
Inseob Kim5cefbd22019-06-08 20:36:59 +0900335 // Vendor should use platform's public header and vendor's internal header
336 if !strings.Contains(vendorFlags, platformPublicVendorPath) ||
Inseob Kimc0907f12019-02-08 21:00:45 +0900337 !strings.Contains(vendorFlags, vendorInternalPath) {
338 t.Errorf("flags for vendor must contain %#v and %#v, but was %#v.",
Inseob Kim5cefbd22019-06-08 20:36:59 +0900339 platformPublicVendorPath, vendorInternalPath, vendorFlags)
Inseob Kimc0907f12019-02-08 21:00:45 +0900340 }
Inseob Kimac1e9862019-12-09 18:15:47 +0900341
342 // Java modules linking against system API should use public stub
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000343 javaSystemApiClient := result.ModuleForTests("java-platform", "android_common").Rule("javac")
344 syspropPlatformPublic := result.ModuleForTests("sysprop-platform_public", "android_common").Description("for turbine")
Colin Cross75ce9ec2021-02-26 16:20:32 -0800345 if g, w := javaSystemApiClient.Implicits.Strings(), syspropPlatformPublic.Output.String(); !android.InList(w, g) {
346 t.Errorf("system api client should use public stub %q, got %q", w, g)
Inseob Kimac1e9862019-12-09 18:15:47 +0900347 }
Inseob Kimc0907f12019-02-08 21:00:45 +0900348}
Jiyong Park5e914b22021-03-08 10:09:52 +0900349
350func TestApexAvailabilityIsForwarded(t *testing.T) {
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000351 result := test(t, `
Jiyong Park5e914b22021-03-08 10:09:52 +0900352 sysprop_library {
353 name: "sysprop-platform",
354 apex_available: ["//apex_available:platform"],
355 srcs: ["android/sysprop/PlatformProperties.sysprop"],
356 api_packages: ["android.sysprop"],
357 property_owner: "Platform",
358 }
359 `)
360
361 expected := []string{"//apex_available:platform"}
362
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000363 ccModule := result.ModuleForTests("libsysprop-platform", "android_arm64_armv8-a_shared").Module().(*cc.Module)
Jiyong Park5e914b22021-03-08 10:09:52 +0900364 propFromCc := ccModule.ApexProperties.Apex_available
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000365 android.AssertDeepEquals(t, "apex_available forwarding to cc module", expected, propFromCc)
Jiyong Park5e914b22021-03-08 10:09:52 +0900366
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000367 javaModule := result.ModuleForTests("sysprop-platform", "android_common").Module().(*java.Library)
Jiyong Park5e914b22021-03-08 10:09:52 +0900368 propFromJava := javaModule.ApexProperties.Apex_available
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000369 android.AssertDeepEquals(t, "apex_available forwarding to java module", expected, propFromJava)
Andrew Walbrana5deb732024-02-15 13:39:46 +0000370
371 rustModule := result.ModuleForTests("libsysprop_platform_rust", "android_arm64_armv8-a_rlib_rlib-std").Module().(*rust.Module)
372 propFromRust := rustModule.ApexProperties.Apex_available
373 android.AssertDeepEquals(t, "apex_available forwarding to rust module", expected, propFromRust)
Jiyong Park5e914b22021-03-08 10:09:52 +0900374}
375
376func TestMinSdkVersionIsForwarded(t *testing.T) {
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000377 result := test(t, `
Jiyong Park5e914b22021-03-08 10:09:52 +0900378 sysprop_library {
379 name: "sysprop-platform",
380 srcs: ["android/sysprop/PlatformProperties.sysprop"],
381 api_packages: ["android.sysprop"],
382 property_owner: "Platform",
383 cpp: {
384 min_sdk_version: "29",
385 },
386 java: {
387 min_sdk_version: "30",
388 },
Andrew Walbrana5deb732024-02-15 13:39:46 +0000389 rust: {
390 min_sdk_version: "29",
391 }
Jiyong Park5e914b22021-03-08 10:09:52 +0900392 }
393 `)
394
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000395 ccModule := result.ModuleForTests("libsysprop-platform", "android_arm64_armv8-a_shared").Module().(*cc.Module)
Jiyong Park5e914b22021-03-08 10:09:52 +0900396 propFromCc := proptools.String(ccModule.Properties.Min_sdk_version)
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000397 android.AssertStringEquals(t, "min_sdk_version forwarding to cc module", "29", propFromCc)
Jiyong Park5e914b22021-03-08 10:09:52 +0900398
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000399 javaModule := result.ModuleForTests("sysprop-platform", "android_common").Module().(*java.Library)
Jiyong Parkf1691d22021-03-29 20:11:58 +0900400 propFromJava := javaModule.MinSdkVersionString()
Paul Duffin9cbbbb82021-03-18 00:21:03 +0000401 android.AssertStringEquals(t, "min_sdk_version forwarding to java module", "30", propFromJava)
Andrew Walbrana5deb732024-02-15 13:39:46 +0000402
403 rustModule := result.ModuleForTests("libsysprop_platform_rust", "android_arm64_armv8-a_rlib_rlib-std").Module().(*rust.Module)
404 propFromRust := proptools.String(rustModule.Properties.Min_sdk_version)
405 android.AssertStringEquals(t, "min_sdk_version forwarding to rust module", "29", propFromRust)
Jiyong Park5e914b22021-03-08 10:09:52 +0900406}