blob: a0d05016a67f683388dbf6c6f822d071e2699c4c [file] [log] [blame]
Paul Duffinbb7f1ac2021-03-29 22:18:45 +01001// Copyright (C) 2021 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 java
16
17import (
18 "testing"
19
20 "android/soong/android"
21 "android/soong/dexpreopt"
22)
23
24// Contains some simple tests for platform_bootclasspath.
25
26var prepareForTestWithPlatformBootclasspath = android.GroupFixturePreparers(
27 PrepareForTestWithJavaDefaultModules,
28 dexpreopt.PrepareForTestByEnablingDexpreopt,
29)
30
31func TestPlatformBootclasspath(t *testing.T) {
Paul Duffinb432df92021-03-22 22:09:42 +000032 preparer := android.GroupFixturePreparers(
33 prepareForTestWithPlatformBootclasspath,
34 dexpreopt.FixtureSetBootJars("platform:foo", "platform:bar"),
35 android.FixtureWithRootAndroidBp(`
Paul Duffinbb7f1ac2021-03-29 22:18:45 +010036 platform_bootclasspath {
37 name: "platform-bootclasspath",
38 }
Paul Duffinb432df92021-03-22 22:09:42 +000039
40 java_library {
41 name: "bar",
42 srcs: ["a.java"],
43 system_modules: "none",
44 sdk_version: "none",
45 compile_dex: true,
46 }
47 `),
48 )
49
50 var addSourceBootclassPathModule = android.FixtureAddTextFile("source/Android.bp", `
51 java_library {
52 name: "foo",
53 srcs: ["a.java"],
54 system_modules: "none",
55 sdk_version: "none",
56 compile_dex: true,
57 }
58 `)
59
60 var addPrebuiltBootclassPathModule = android.FixtureAddTextFile("prebuilt/Android.bp", `
61 java_import {
62 name: "foo",
63 jars: ["a.jar"],
64 compile_dex: true,
65 prefer: false,
66 }
67 `)
68
69 var addPrebuiltPreferredBootclassPathModule = android.FixtureAddTextFile("prebuilt/Android.bp", `
70 java_import {
71 name: "foo",
72 jars: ["a.jar"],
73 compile_dex: true,
74 prefer: true,
75 }
76 `)
77
78 t.Run("missing", func(t *testing.T) {
79 preparer.
80 ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`"platform-bootclasspath" depends on undefined module "foo"`)).
81 RunTest(t)
82 })
83
84 t.Run("source", func(t *testing.T) {
85 result := android.GroupFixturePreparers(
86 preparer,
87 addSourceBootclassPathModule,
88 ).RunTest(t)
89
90 CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{
91 "platform:foo",
92 "platform:bar",
93 })
94 })
95
96 t.Run("prebuilt", func(t *testing.T) {
97 result := android.GroupFixturePreparers(
98 preparer,
99 addPrebuiltBootclassPathModule,
100 ).RunTest(t)
101
102 CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{
103 "platform:prebuilt_foo",
104 "platform:bar",
105 })
106 })
107
108 t.Run("source+prebuilt - source preferred", func(t *testing.T) {
109 result := android.GroupFixturePreparers(
110 preparer,
111 addSourceBootclassPathModule,
112 addPrebuiltBootclassPathModule,
113 ).RunTest(t)
114
115 CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{
116 "platform:foo",
117 "platform:bar",
118 })
119 })
120
121 t.Run("source+prebuilt - prebuilt preferred", func(t *testing.T) {
122 result := android.GroupFixturePreparers(
123 preparer,
124 addSourceBootclassPathModule,
125 addPrebuiltPreferredBootclassPathModule,
126 ).RunTest(t)
127
128 CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{
129 "platform:prebuilt_foo",
130 "platform:bar",
131 })
132 })
Paul Duffinbb7f1ac2021-03-29 22:18:45 +0100133}
Paul Duffin6a766452021-04-12 14:15:22 +0100134
135func TestPlatformBootclasspath_Dist(t *testing.T) {
136 result := android.GroupFixturePreparers(
137 prepareForTestWithPlatformBootclasspath,
138 dexpreopt.FixtureSetBootJars("platform:foo", "platform:bar"),
139 android.PrepareForTestWithAndroidMk,
140 android.FixtureWithRootAndroidBp(`
141 platform_bootclasspath {
142 name: "platform-bootclasspath",
143 dists: [
144 {
145 targets: ["droidcore"],
146 tag: "hiddenapi-flags.csv",
147 },
148 ],
149 }
150
151 java_library {
152 name: "bar",
153 srcs: ["a.java"],
154 system_modules: "none",
155 sdk_version: "none",
156 compile_dex: true,
157 }
158
159 java_library {
160 name: "foo",
161 srcs: ["a.java"],
162 system_modules: "none",
163 sdk_version: "none",
164 compile_dex: true,
165 }
166 `),
167 ).RunTest(t)
168
169 platformBootclasspath := result.Module("platform-bootclasspath", "android_common").(*platformBootclasspathModule)
170 entries := android.AndroidMkEntriesForTest(t, result.TestContext, platformBootclasspath)
171 goals := entries[0].GetDistForGoals(platformBootclasspath)
172 android.AssertStringEquals(t, "platform dist goals phony", ".PHONY: droidcore\n", goals[0])
173 android.AssertStringEquals(t, "platform dist goals call", "$(call dist-for-goals,droidcore,out/soong/hiddenapi/hiddenapi-flags.csv:hiddenapi-flags.csv)\n", android.StringRelativeToTop(result.Config, goals[1]))
174}