blob: 877e2c7d65c54a7ec7cac572b6672c839f96b608 [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) {
24 ctx := android.GroupFixturePreparers(
25 PrepareForTestWithJavaDefaultModules,
26 ).RunTestWithBp(t, `
27 android_library_import {
28 name: "aar-no-jni",
29 aars: ["aary.aar"],
30 }
31 android_library_import {
32 name: "aar-jni",
33 aars: ["aary.aar"],
34 extract_jni: true,
35 }`)
36
37 testCases := []struct {
38 name string
39 hasPackage bool
40 }{
41 {
42 name: "aar-no-jni",
43 hasPackage: false,
44 },
45 {
46 name: "aar-jni",
47 hasPackage: true,
48 },
49 }
50
51 for _, tc := range testCases {
52 t.Run(tc.name, func(t *testing.T) {
53 appMod := ctx.Module(tc.name, "android_common")
54 appTestMod := ctx.ModuleForTests(tc.name, "android_common")
55
Yu Liu663e4502024-08-12 18:23:59 +000056 info, ok := android.OtherModuleProvider(ctx, appMod, JniPackageProvider)
Sam Delmerico82602492022-06-10 17:05:42 +000057 if !ok {
58 t.Errorf("expected android_library_import to have JniPackageProvider")
59 }
60
61 if !tc.hasPackage {
62 if len(info.JniPackages) != 0 {
63 t.Errorf("expected JniPackages to be empty, but got %v", info.JniPackages)
64 }
65 outputFile := "arm64-v8a_jni.zip"
66 jniOutputLibZip := appTestMod.MaybeOutput(outputFile)
67 if jniOutputLibZip.Rule != nil {
68 t.Errorf("did not expect an output file, but found %v", outputFile)
69 }
70 return
71 }
72
73 if len(info.JniPackages) != 1 {
74 t.Errorf("expected a single JniPackage, but got %v", info.JniPackages)
75 }
76
77 outputFile := info.JniPackages[0].String()
78 jniOutputLibZip := appTestMod.Output(outputFile)
79 if jniOutputLibZip.Rule == nil {
80 t.Errorf("did not find output file %v", outputFile)
81 }
82 })
83 }
84}
Jihoon Kang9049c272024-03-19 21:57:36 +000085
86func TestLibraryFlagsPackages(t *testing.T) {
87 result := android.GroupFixturePreparers(
88 prepareForJavaTest,
89 ).RunTestWithBp(t, `
90 android_library {
91 name: "foo",
92 srcs: ["a.java"],
93 sdk_version: "current",
94 flags_packages: [
95 "bar",
96 "baz",
97 ],
98 }
99 aconfig_declarations {
100 name: "bar",
101 package: "com.example.package.bar",
Yu Liu315a53c2024-04-24 16:41:57 +0000102 container: "com.android.foo",
Jihoon Kang9049c272024-03-19 21:57:36 +0000103 srcs: [
104 "bar.aconfig",
105 ],
106 }
107 aconfig_declarations {
108 name: "baz",
109 package: "com.example.package.baz",
Yu Liu315a53c2024-04-24 16:41:57 +0000110 container: "com.android.foo",
Jihoon Kang9049c272024-03-19 21:57:36 +0000111 srcs: [
112 "baz.aconfig",
113 ],
114 }
115 `)
116
117 foo := result.ModuleForTests("foo", "android_common")
118
119 // android_library module depends on aconfig_declarations listed in flags_packages
120 android.AssertBoolEquals(t, "foo expected to depend on bar", true,
121 CheckModuleHasDependency(t, result.TestContext, "foo", "android_common", "bar"))
122
123 android.AssertBoolEquals(t, "foo expected to depend on baz", true,
124 CheckModuleHasDependency(t, result.TestContext, "foo", "android_common", "baz"))
125
126 aapt2LinkRule := foo.Rule("android/soong/java.aapt2Link")
127 linkInFlags := aapt2LinkRule.Args["inFlags"]
128 android.AssertStringDoesContain(t,
129 "aapt2 link command expected to pass feature flags arguments",
130 linkInFlags,
131 "--feature-flags @out/soong/.intermediates/bar/intermediate.txt --feature-flags @out/soong/.intermediates/baz/intermediate.txt",
132 )
133}
Colin Cross28ac2ff2024-04-02 12:21:34 -0700134
135func TestAndroidLibraryOutputFilesRel(t *testing.T) {
136 result := android.GroupFixturePreparers(
137 PrepareForTestWithJavaDefaultModules,
138 ).RunTestWithBp(t, `
139 android_library {
140 name: "foo",
141 srcs: ["a.java"],
Colin Cross607bbd62024-04-12 13:44:45 -0700142 java_resources: ["foo.txt"],
Colin Cross28ac2ff2024-04-02 12:21:34 -0700143 }
144
145 android_library_import {
146 name: "bar",
Colin Cross607bbd62024-04-12 13:44:45 -0700147 aars: ["bar_prebuilt.aar"],
Colin Cross28ac2ff2024-04-02 12:21:34 -0700148
149 }
150
151 android_library_import {
152 name: "baz",
Colin Cross607bbd62024-04-12 13:44:45 -0700153 aars: ["baz_prebuilt.aar"],
154 static_libs: ["foo", "bar"],
Colin Cross28ac2ff2024-04-02 12:21:34 -0700155 }
156 `)
157
158 foo := result.ModuleForTests("foo", "android_common")
159 bar := result.ModuleForTests("bar", "android_common")
160 baz := result.ModuleForTests("baz", "android_common")
161
mrziwang9f7b9f42024-07-10 12:18:06 -0700162 fooOutputPaths := foo.OutputFiles(t, "")
mrziwang68786d82024-07-09 10:41:55 -0700163 barOutputPaths := bar.OutputFiles(t, "")
164 bazOutputPaths := baz.OutputFiles(t, "")
Colin Cross28ac2ff2024-04-02 12:21:34 -0700165
mrziwang9f7b9f42024-07-10 12:18:06 -0700166 android.AssertPathsRelativeToTopEquals(t, "foo output path",
167 []string{"out/soong/.intermediates/foo/android_common/withres/foo.jar"}, fooOutputPaths)
mrziwang68786d82024-07-09 10:41:55 -0700168 android.AssertPathsRelativeToTopEquals(t, "bar output path",
169 []string{"out/soong/.intermediates/bar/android_common/aar/bar.jar"}, barOutputPaths)
170 android.AssertPathsRelativeToTopEquals(t, "baz output path",
171 []string{"out/soong/.intermediates/baz/android_common/withres/baz.jar"}, bazOutputPaths)
Colin Cross28ac2ff2024-04-02 12:21:34 -0700172
173 android.AssertStringEquals(t, "foo relative output path",
mrziwang9f7b9f42024-07-10 12:18:06 -0700174 "foo.jar", fooOutputPaths[0].Rel())
Colin Cross28ac2ff2024-04-02 12:21:34 -0700175 android.AssertStringEquals(t, "bar relative output path",
mrziwang68786d82024-07-09 10:41:55 -0700176 "bar.jar", barOutputPaths[0].Rel())
Colin Cross28ac2ff2024-04-02 12:21:34 -0700177 android.AssertStringEquals(t, "baz relative output path",
mrziwang68786d82024-07-09 10:41:55 -0700178 "baz.jar", bazOutputPaths[0].Rel())
Colin Cross28ac2ff2024-04-02 12:21:34 -0700179}