blob: 3ac228d3544f55021bf3f888aa6eefabf82aace0 [file] [log] [blame]
Sam Delmerico82602492022-06-10 17:05:42 +00001// Copyright 2022 Google Inc. All rights reserved.
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 java
16
17import (
Sam Delmerico82602492022-06-10 17:05:42 +000018 "testing"
Yu Liu315a53c2024-04-24 16:41:57 +000019
20 "android/soong/android"
Sam Delmerico82602492022-06-10 17:05:42 +000021)
22
23func TestAarImportProducesJniPackages(t *testing.T) {
Colin Cross844cb6a2025-01-29 15:53:21 -080024 t.Parallel()
Sam Delmerico82602492022-06-10 17:05:42 +000025 ctx := android.GroupFixturePreparers(
26 PrepareForTestWithJavaDefaultModules,
27 ).RunTestWithBp(t, `
28 android_library_import {
29 name: "aar-no-jni",
30 aars: ["aary.aar"],
31 }
32 android_library_import {
33 name: "aar-jni",
34 aars: ["aary.aar"],
35 extract_jni: true,
36 }`)
37
38 testCases := []struct {
39 name string
40 hasPackage bool
41 }{
42 {
43 name: "aar-no-jni",
44 hasPackage: false,
45 },
46 {
47 name: "aar-jni",
48 hasPackage: true,
49 },
50 }
51
52 for _, tc := range testCases {
53 t.Run(tc.name, func(t *testing.T) {
Colin Cross844cb6a2025-01-29 15:53:21 -080054 t.Parallel()
Sam Delmerico82602492022-06-10 17:05:42 +000055 appMod := ctx.Module(tc.name, "android_common")
56 appTestMod := ctx.ModuleForTests(tc.name, "android_common")
57
Yu Liu663e4502024-08-12 18:23:59 +000058 info, ok := android.OtherModuleProvider(ctx, appMod, JniPackageProvider)
Sam Delmerico82602492022-06-10 17:05:42 +000059 if !ok {
60 t.Errorf("expected android_library_import to have JniPackageProvider")
61 }
62
63 if !tc.hasPackage {
64 if len(info.JniPackages) != 0 {
65 t.Errorf("expected JniPackages to be empty, but got %v", info.JniPackages)
66 }
67 outputFile := "arm64-v8a_jni.zip"
68 jniOutputLibZip := appTestMod.MaybeOutput(outputFile)
69 if jniOutputLibZip.Rule != nil {
70 t.Errorf("did not expect an output file, but found %v", outputFile)
71 }
72 return
73 }
74
75 if len(info.JniPackages) != 1 {
76 t.Errorf("expected a single JniPackage, but got %v", info.JniPackages)
77 }
78
79 outputFile := info.JniPackages[0].String()
80 jniOutputLibZip := appTestMod.Output(outputFile)
81 if jniOutputLibZip.Rule == nil {
82 t.Errorf("did not find output file %v", outputFile)
83 }
84 })
85 }
86}
Jihoon Kang9049c272024-03-19 21:57:36 +000087
88func TestLibraryFlagsPackages(t *testing.T) {
Colin Cross844cb6a2025-01-29 15:53:21 -080089 t.Parallel()
Jihoon Kang9049c272024-03-19 21:57:36 +000090 result := android.GroupFixturePreparers(
91 prepareForJavaTest,
92 ).RunTestWithBp(t, `
93 android_library {
94 name: "foo",
95 srcs: ["a.java"],
96 sdk_version: "current",
97 flags_packages: [
98 "bar",
99 "baz",
100 ],
101 }
102 aconfig_declarations {
103 name: "bar",
104 package: "com.example.package.bar",
Yu Liu315a53c2024-04-24 16:41:57 +0000105 container: "com.android.foo",
Jihoon Kang9049c272024-03-19 21:57:36 +0000106 srcs: [
107 "bar.aconfig",
108 ],
109 }
110 aconfig_declarations {
111 name: "baz",
112 package: "com.example.package.baz",
Yu Liu315a53c2024-04-24 16:41:57 +0000113 container: "com.android.foo",
Jihoon Kang9049c272024-03-19 21:57:36 +0000114 srcs: [
115 "baz.aconfig",
116 ],
117 }
118 `)
119
120 foo := result.ModuleForTests("foo", "android_common")
121
122 // android_library module depends on aconfig_declarations listed in flags_packages
123 android.AssertBoolEquals(t, "foo expected to depend on bar", true,
124 CheckModuleHasDependency(t, result.TestContext, "foo", "android_common", "bar"))
125
126 android.AssertBoolEquals(t, "foo expected to depend on baz", true,
127 CheckModuleHasDependency(t, result.TestContext, "foo", "android_common", "baz"))
128
129 aapt2LinkRule := foo.Rule("android/soong/java.aapt2Link")
130 linkInFlags := aapt2LinkRule.Args["inFlags"]
131 android.AssertStringDoesContain(t,
132 "aapt2 link command expected to pass feature flags arguments",
133 linkInFlags,
134 "--feature-flags @out/soong/.intermediates/bar/intermediate.txt --feature-flags @out/soong/.intermediates/baz/intermediate.txt",
135 )
136}
Colin Cross28ac2ff2024-04-02 12:21:34 -0700137
138func TestAndroidLibraryOutputFilesRel(t *testing.T) {
Colin Cross844cb6a2025-01-29 15:53:21 -0800139 t.Parallel()
Colin Cross28ac2ff2024-04-02 12:21:34 -0700140 result := android.GroupFixturePreparers(
141 PrepareForTestWithJavaDefaultModules,
142 ).RunTestWithBp(t, `
143 android_library {
144 name: "foo",
145 srcs: ["a.java"],
Colin Cross607bbd62024-04-12 13:44:45 -0700146 java_resources: ["foo.txt"],
Colin Cross28ac2ff2024-04-02 12:21:34 -0700147 }
148
149 android_library_import {
150 name: "bar",
Colin Cross607bbd62024-04-12 13:44:45 -0700151 aars: ["bar_prebuilt.aar"],
Colin Cross28ac2ff2024-04-02 12:21:34 -0700152
153 }
154
155 android_library_import {
156 name: "baz",
Colin Cross607bbd62024-04-12 13:44:45 -0700157 aars: ["baz_prebuilt.aar"],
158 static_libs: ["foo", "bar"],
Colin Cross28ac2ff2024-04-02 12:21:34 -0700159 }
160 `)
161
162 foo := result.ModuleForTests("foo", "android_common")
163 bar := result.ModuleForTests("bar", "android_common")
164 baz := result.ModuleForTests("baz", "android_common")
165
Yu Liu51c22312024-08-20 23:56:15 +0000166 fooOutputPaths := foo.OutputFiles(result.TestContext, t, "")
167 barOutputPaths := bar.OutputFiles(result.TestContext, t, "")
168 bazOutputPaths := baz.OutputFiles(result.TestContext, t, "")
Colin Cross28ac2ff2024-04-02 12:21:34 -0700169
mrziwang9f7b9f42024-07-10 12:18:06 -0700170 android.AssertPathsRelativeToTopEquals(t, "foo output path",
171 []string{"out/soong/.intermediates/foo/android_common/withres/foo.jar"}, fooOutputPaths)
mrziwang68786d82024-07-09 10:41:55 -0700172 android.AssertPathsRelativeToTopEquals(t, "bar output path",
173 []string{"out/soong/.intermediates/bar/android_common/aar/bar.jar"}, barOutputPaths)
174 android.AssertPathsRelativeToTopEquals(t, "baz output path",
175 []string{"out/soong/.intermediates/baz/android_common/withres/baz.jar"}, bazOutputPaths)
Colin Cross28ac2ff2024-04-02 12:21:34 -0700176
177 android.AssertStringEquals(t, "foo relative output path",
mrziwang9f7b9f42024-07-10 12:18:06 -0700178 "foo.jar", fooOutputPaths[0].Rel())
Colin Cross28ac2ff2024-04-02 12:21:34 -0700179 android.AssertStringEquals(t, "bar relative output path",
mrziwang68786d82024-07-09 10:41:55 -0700180 "bar.jar", barOutputPaths[0].Rel())
Colin Cross28ac2ff2024-04-02 12:21:34 -0700181 android.AssertStringEquals(t, "baz relative output path",
mrziwang68786d82024-07-09 10:41:55 -0700182 "baz.jar", bazOutputPaths[0].Rel())
Colin Cross28ac2ff2024-04-02 12:21:34 -0700183}