blob: 8dc7b798a16d4b516c783d4c3bab16d6e3c6d4ba [file] [log] [blame]
Colin Cross638149e2019-01-05 22:12:12 -08001// Copyright 2018 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 (
Martin Stjernholm0e4cceb2021-05-13 02:38:35 +010018 "fmt"
Colin Cross0c66bc62021-07-20 09:47:41 -070019 "runtime"
Colin Cross638149e2019-01-05 22:12:12 -080020 "testing"
Martin Stjernholm0e4cceb2021-05-13 02:38:35 +010021
22 "android/soong/android"
23 "android/soong/cc"
24 "android/soong/dexpreopt"
Colin Cross638149e2019-01-05 22:12:12 -080025)
26
27func TestDexpreoptEnabled(t *testing.T) {
28 tests := []struct {
Adrian Roos92346c42021-09-15 14:11:07 +000029 name string
30 bp string
31 enabled bool
Colin Cross638149e2019-01-05 22:12:12 -080032 }{
33 {
34 name: "app",
35 bp: `
36 android_app {
37 name: "foo",
38 srcs: ["a.java"],
Jeongik Cha538c0d02019-07-11 15:54:27 +090039 sdk_version: "current",
Colin Cross638149e2019-01-05 22:12:12 -080040 }`,
41 enabled: true,
42 },
43 {
44 name: "installable java library",
45 bp: `
46 java_library {
47 name: "foo",
48 installable: true,
49 srcs: ["a.java"],
50 }`,
51 enabled: true,
52 },
53 {
54 name: "java binary",
55 bp: `
56 java_binary {
57 name: "foo",
58 srcs: ["a.java"],
59 }`,
60 enabled: true,
61 },
Colin Cross638149e2019-01-05 22:12:12 -080062 {
63 name: "app without sources",
64 bp: `
65 android_app {
66 name: "foo",
Jeongik Cha538c0d02019-07-11 15:54:27 +090067 sdk_version: "current",
Colin Cross638149e2019-01-05 22:12:12 -080068 }`,
Jaewoong Junga24af3b2019-05-13 09:23:20 -070069 enabled: false,
70 },
71 {
72 name: "app with libraries",
73 bp: `
74 android_app {
75 name: "foo",
76 static_libs: ["lib"],
Jeongik Cha538c0d02019-07-11 15:54:27 +090077 sdk_version: "current",
Jaewoong Junga24af3b2019-05-13 09:23:20 -070078 }
79
80 java_library {
81 name: "lib",
82 srcs: ["a.java"],
Jeongik Cha538c0d02019-07-11 15:54:27 +090083 sdk_version: "current",
Jaewoong Junga24af3b2019-05-13 09:23:20 -070084 }`,
Colin Cross638149e2019-01-05 22:12:12 -080085 enabled: true,
86 },
87 {
88 name: "installable java library without sources",
89 bp: `
90 java_library {
91 name: "foo",
92 installable: true,
93 }`,
Jaewoong Junga24af3b2019-05-13 09:23:20 -070094 enabled: false,
Colin Cross638149e2019-01-05 22:12:12 -080095 },
Colin Cross638149e2019-01-05 22:12:12 -080096 {
97 name: "static java library",
98 bp: `
99 java_library {
100 name: "foo",
101 srcs: ["a.java"],
102 }`,
103 enabled: false,
104 },
105 {
Colin Crosse3026872019-01-05 22:30:13 -0800106 name: "java test",
107 bp: `
108 java_test {
109 name: "foo",
110 srcs: ["a.java"],
111 }`,
112 enabled: false,
113 },
114 {
Colin Cross638149e2019-01-05 22:12:12 -0800115 name: "android test",
116 bp: `
117 android_test {
118 name: "foo",
119 srcs: ["a.java"],
120 }`,
121 enabled: false,
122 },
123 {
124 name: "android test helper app",
125 bp: `
126 android_test_helper_app {
127 name: "foo",
128 srcs: ["a.java"],
129 }`,
130 enabled: false,
131 },
Colin Crossdc2da912019-01-05 22:13:05 -0800132 {
133 name: "compile_dex",
134 bp: `
135 java_library {
136 name: "foo",
137 srcs: ["a.java"],
138 compile_dex: true,
139 }`,
140 enabled: false,
141 },
Colin Cross42be7612019-02-21 18:12:14 -0800142 {
143 name: "dex_import",
144 bp: `
145 dex_import {
146 name: "foo",
147 jars: ["a.jar"],
148 }`,
149 enabled: true,
150 },
Colin Cross638149e2019-01-05 22:12:12 -0800151 }
152
153 for _, test := range tests {
154 t.Run(test.name, func(t *testing.T) {
Adrian Roos92346c42021-09-15 14:11:07 +0000155 ctx, _ := testJava(t, test.bp)
Colin Cross638149e2019-01-05 22:12:12 -0800156
Adrian Roos92346c42021-09-15 14:11:07 +0000157 dexpreopt := ctx.ModuleForTests("foo", "android_common").MaybeRule("dexpreopt")
Colin Cross638149e2019-01-05 22:12:12 -0800158 enabled := dexpreopt.Rule != nil
159
160 if enabled != test.enabled {
161 t.Fatalf("want dexpreopt %s, got %s", enabledString(test.enabled), enabledString(enabled))
162 }
163 })
164
165 }
166}
167
168func enabledString(enabled bool) string {
169 if enabled {
170 return "enabled"
171 } else {
172 return "disabled"
173 }
174}
Martin Stjernholm0e4cceb2021-05-13 02:38:35 +0100175
176func TestDex2oatToolDeps(t *testing.T) {
Colin Cross0c66bc62021-07-20 09:47:41 -0700177 if runtime.GOOS != "linux" {
Martin Stjernholm1b784a72021-05-20 15:24:34 +0100178 // The host binary paths checked below are build OS dependent.
Colin Cross0c66bc62021-07-20 09:47:41 -0700179 t.Skipf("Unsupported build OS %s", runtime.GOOS)
Martin Stjernholm1b784a72021-05-20 15:24:34 +0100180 }
181
Martin Stjernholm0e4cceb2021-05-13 02:38:35 +0100182 preparers := android.GroupFixturePreparers(
183 cc.PrepareForTestWithCcDefaultModules,
184 PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd,
185 dexpreopt.PrepareForTestByEnablingDexpreopt)
186
187 testDex2oatToolDep := func(sourceEnabled, prebuiltEnabled, prebuiltPreferred bool,
188 expectedDex2oatPath string) {
189 name := fmt.Sprintf("sourceEnabled:%t,prebuiltEnabled:%t,prebuiltPreferred:%t",
190 sourceEnabled, prebuiltEnabled, prebuiltPreferred)
191 t.Run(name, func(t *testing.T) {
192 result := preparers.RunTestWithBp(t, fmt.Sprintf(`
193 cc_binary {
194 name: "dex2oatd",
195 enabled: %t,
196 host_supported: true,
197 }
198 cc_prebuilt_binary {
199 name: "dex2oatd",
200 enabled: %t,
201 prefer: %t,
202 host_supported: true,
203 srcs: ["x86_64/bin/dex2oatd"],
204 }
205 java_library {
206 name: "myjavalib",
207 }
208 `, sourceEnabled, prebuiltEnabled, prebuiltPreferred))
209 pathContext := android.PathContextForTesting(result.Config)
210 dex2oatPath := dexpreopt.GetCachedGlobalSoongConfig(pathContext).Dex2oat
211 android.AssertStringEquals(t, "Testing "+name, expectedDex2oatPath, android.NormalizePathForTesting(dex2oatPath))
212 })
213 }
214
215 sourceDex2oatPath := "host/linux-x86/bin/dex2oatd"
216 prebuiltDex2oatPath := ".intermediates/prebuilt_dex2oatd/linux_glibc_x86_64/dex2oatd"
217
218 testDex2oatToolDep(true, false, false, sourceDex2oatPath)
219 testDex2oatToolDep(true, true, false, sourceDex2oatPath)
220 testDex2oatToolDep(true, true, true, prebuiltDex2oatPath)
221 testDex2oatToolDep(false, true, false, prebuiltDex2oatPath)
222}