xref: /aosp_15_r20/build/soong/android/apex_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage android
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"reflect"
19*333d2b36SAndroid Build Coastguard Worker	"testing"
20*333d2b36SAndroid Build Coastguard Worker)
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Workerfunc Test_mergeApexVariations(t *testing.T) {
23*333d2b36SAndroid Build Coastguard Worker	const (
24*333d2b36SAndroid Build Coastguard Worker		ForPrebuiltApex    = true
25*333d2b36SAndroid Build Coastguard Worker		NotForPrebuiltApex = false
26*333d2b36SAndroid Build Coastguard Worker	)
27*333d2b36SAndroid Build Coastguard Worker	tests := []struct {
28*333d2b36SAndroid Build Coastguard Worker		name        string
29*333d2b36SAndroid Build Coastguard Worker		in          []ApexInfo
30*333d2b36SAndroid Build Coastguard Worker		wantMerged  []ApexInfo
31*333d2b36SAndroid Build Coastguard Worker		wantAliases [][2]string
32*333d2b36SAndroid Build Coastguard Worker	}{
33*333d2b36SAndroid Build Coastguard Worker		{
34*333d2b36SAndroid Build Coastguard Worker			name: "single",
35*333d2b36SAndroid Build Coastguard Worker			in: []ApexInfo{
36*333d2b36SAndroid Build Coastguard Worker				{
37*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "foo",
38*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
39*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
40*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
41*333d2b36SAndroid Build Coastguard Worker				},
42*333d2b36SAndroid Build Coastguard Worker			},
43*333d2b36SAndroid Build Coastguard Worker			wantMerged: []ApexInfo{
44*333d2b36SAndroid Build Coastguard Worker				{
45*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "apex10000",
46*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
47*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
48*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
49*333d2b36SAndroid Build Coastguard Worker				},
50*333d2b36SAndroid Build Coastguard Worker			},
51*333d2b36SAndroid Build Coastguard Worker			wantAliases: [][2]string{
52*333d2b36SAndroid Build Coastguard Worker				{"foo", "apex10000"},
53*333d2b36SAndroid Build Coastguard Worker			},
54*333d2b36SAndroid Build Coastguard Worker		},
55*333d2b36SAndroid Build Coastguard Worker		{
56*333d2b36SAndroid Build Coastguard Worker			name: "merge",
57*333d2b36SAndroid Build Coastguard Worker			in: []ApexInfo{
58*333d2b36SAndroid Build Coastguard Worker				{
59*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "foo",
60*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
61*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
62*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
63*333d2b36SAndroid Build Coastguard Worker				},
64*333d2b36SAndroid Build Coastguard Worker				{
65*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "bar",
66*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
67*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"bar"},
68*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
69*333d2b36SAndroid Build Coastguard Worker				},
70*333d2b36SAndroid Build Coastguard Worker			},
71*333d2b36SAndroid Build Coastguard Worker			wantMerged: []ApexInfo{
72*333d2b36SAndroid Build Coastguard Worker				{
73*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "apex10000",
74*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
75*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo", "bar"},
76*333d2b36SAndroid Build Coastguard Worker				}},
77*333d2b36SAndroid Build Coastguard Worker			wantAliases: [][2]string{
78*333d2b36SAndroid Build Coastguard Worker				{"foo", "apex10000"},
79*333d2b36SAndroid Build Coastguard Worker				{"bar", "apex10000"},
80*333d2b36SAndroid Build Coastguard Worker			},
81*333d2b36SAndroid Build Coastguard Worker		},
82*333d2b36SAndroid Build Coastguard Worker		{
83*333d2b36SAndroid Build Coastguard Worker			name: "don't merge version",
84*333d2b36SAndroid Build Coastguard Worker			in: []ApexInfo{
85*333d2b36SAndroid Build Coastguard Worker				{
86*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "foo",
87*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
88*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
89*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
90*333d2b36SAndroid Build Coastguard Worker				},
91*333d2b36SAndroid Build Coastguard Worker				{
92*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "bar",
93*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     uncheckedFinalApiLevel(30),
94*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"bar"},
95*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
96*333d2b36SAndroid Build Coastguard Worker				},
97*333d2b36SAndroid Build Coastguard Worker			},
98*333d2b36SAndroid Build Coastguard Worker			wantMerged: []ApexInfo{
99*333d2b36SAndroid Build Coastguard Worker				{
100*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "apex10000",
101*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
102*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
103*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
104*333d2b36SAndroid Build Coastguard Worker				},
105*333d2b36SAndroid Build Coastguard Worker				{
106*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "apex30",
107*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     uncheckedFinalApiLevel(30),
108*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"bar"},
109*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
110*333d2b36SAndroid Build Coastguard Worker				},
111*333d2b36SAndroid Build Coastguard Worker			},
112*333d2b36SAndroid Build Coastguard Worker			wantAliases: [][2]string{
113*333d2b36SAndroid Build Coastguard Worker				{"foo", "apex10000"},
114*333d2b36SAndroid Build Coastguard Worker				{"bar", "apex30"},
115*333d2b36SAndroid Build Coastguard Worker			},
116*333d2b36SAndroid Build Coastguard Worker		},
117*333d2b36SAndroid Build Coastguard Worker		{
118*333d2b36SAndroid Build Coastguard Worker			name: "merge updatable",
119*333d2b36SAndroid Build Coastguard Worker			in: []ApexInfo{
120*333d2b36SAndroid Build Coastguard Worker				{
121*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "foo",
122*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
123*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
124*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
125*333d2b36SAndroid Build Coastguard Worker				},
126*333d2b36SAndroid Build Coastguard Worker				{
127*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "bar",
128*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
129*333d2b36SAndroid Build Coastguard Worker					Updatable:         true,
130*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"bar"},
131*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
132*333d2b36SAndroid Build Coastguard Worker				},
133*333d2b36SAndroid Build Coastguard Worker			},
134*333d2b36SAndroid Build Coastguard Worker			wantMerged: []ApexInfo{
135*333d2b36SAndroid Build Coastguard Worker				{
136*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "apex10000",
137*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
138*333d2b36SAndroid Build Coastguard Worker					Updatable:         true,
139*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo", "bar"},
140*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
141*333d2b36SAndroid Build Coastguard Worker				},
142*333d2b36SAndroid Build Coastguard Worker			},
143*333d2b36SAndroid Build Coastguard Worker			wantAliases: [][2]string{
144*333d2b36SAndroid Build Coastguard Worker				{"foo", "apex10000"},
145*333d2b36SAndroid Build Coastguard Worker				{"bar", "apex10000"},
146*333d2b36SAndroid Build Coastguard Worker			},
147*333d2b36SAndroid Build Coastguard Worker		},
148*333d2b36SAndroid Build Coastguard Worker		{
149*333d2b36SAndroid Build Coastguard Worker			name: "don't merge when for prebuilt_apex",
150*333d2b36SAndroid Build Coastguard Worker			in: []ApexInfo{
151*333d2b36SAndroid Build Coastguard Worker				{
152*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "foo",
153*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
154*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
155*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
156*333d2b36SAndroid Build Coastguard Worker				},
157*333d2b36SAndroid Build Coastguard Worker				{
158*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "bar",
159*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
160*333d2b36SAndroid Build Coastguard Worker					Updatable:         true,
161*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"bar"},
162*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
163*333d2b36SAndroid Build Coastguard Worker				},
164*333d2b36SAndroid Build Coastguard Worker				// This one should not be merged in with the others because it is for
165*333d2b36SAndroid Build Coastguard Worker				// a prebuilt_apex.
166*333d2b36SAndroid Build Coastguard Worker				{
167*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "baz",
168*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
169*333d2b36SAndroid Build Coastguard Worker					Updatable:         true,
170*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"baz"},
171*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   ForPrebuiltApex,
172*333d2b36SAndroid Build Coastguard Worker				},
173*333d2b36SAndroid Build Coastguard Worker			},
174*333d2b36SAndroid Build Coastguard Worker			wantMerged: []ApexInfo{
175*333d2b36SAndroid Build Coastguard Worker				{
176*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "apex10000",
177*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
178*333d2b36SAndroid Build Coastguard Worker					Updatable:         true,
179*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo", "bar"},
180*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
181*333d2b36SAndroid Build Coastguard Worker				},
182*333d2b36SAndroid Build Coastguard Worker				{
183*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "baz",
184*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
185*333d2b36SAndroid Build Coastguard Worker					Updatable:         true,
186*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"baz"},
187*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   ForPrebuiltApex,
188*333d2b36SAndroid Build Coastguard Worker				},
189*333d2b36SAndroid Build Coastguard Worker			},
190*333d2b36SAndroid Build Coastguard Worker			wantAliases: [][2]string{
191*333d2b36SAndroid Build Coastguard Worker				{"foo", "apex10000"},
192*333d2b36SAndroid Build Coastguard Worker				{"bar", "apex10000"},
193*333d2b36SAndroid Build Coastguard Worker			},
194*333d2b36SAndroid Build Coastguard Worker		},
195*333d2b36SAndroid Build Coastguard Worker		{
196*333d2b36SAndroid Build Coastguard Worker			name: "merge different UsePlatformApis but don't allow using platform api",
197*333d2b36SAndroid Build Coastguard Worker			in: []ApexInfo{
198*333d2b36SAndroid Build Coastguard Worker				{
199*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "foo",
200*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
201*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
202*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
203*333d2b36SAndroid Build Coastguard Worker				},
204*333d2b36SAndroid Build Coastguard Worker				{
205*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "bar",
206*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
207*333d2b36SAndroid Build Coastguard Worker					UsePlatformApis:   true,
208*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"bar"},
209*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
210*333d2b36SAndroid Build Coastguard Worker				},
211*333d2b36SAndroid Build Coastguard Worker			},
212*333d2b36SAndroid Build Coastguard Worker			wantMerged: []ApexInfo{
213*333d2b36SAndroid Build Coastguard Worker				{
214*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "apex10000",
215*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
216*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo", "bar"},
217*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
218*333d2b36SAndroid Build Coastguard Worker				},
219*333d2b36SAndroid Build Coastguard Worker			},
220*333d2b36SAndroid Build Coastguard Worker			wantAliases: [][2]string{
221*333d2b36SAndroid Build Coastguard Worker				{"foo", "apex10000"},
222*333d2b36SAndroid Build Coastguard Worker				{"bar", "apex10000"},
223*333d2b36SAndroid Build Coastguard Worker			},
224*333d2b36SAndroid Build Coastguard Worker		},
225*333d2b36SAndroid Build Coastguard Worker		{
226*333d2b36SAndroid Build Coastguard Worker			name: "merge same UsePlatformApis and allow using platform api",
227*333d2b36SAndroid Build Coastguard Worker			in: []ApexInfo{
228*333d2b36SAndroid Build Coastguard Worker				{
229*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "foo",
230*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
231*333d2b36SAndroid Build Coastguard Worker					UsePlatformApis:   true,
232*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo"},
233*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
234*333d2b36SAndroid Build Coastguard Worker				},
235*333d2b36SAndroid Build Coastguard Worker				{
236*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "bar",
237*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
238*333d2b36SAndroid Build Coastguard Worker					UsePlatformApis:   true,
239*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"bar"},
240*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
241*333d2b36SAndroid Build Coastguard Worker				},
242*333d2b36SAndroid Build Coastguard Worker			},
243*333d2b36SAndroid Build Coastguard Worker			wantMerged: []ApexInfo{
244*333d2b36SAndroid Build Coastguard Worker				{
245*333d2b36SAndroid Build Coastguard Worker					ApexVariationName: "apex10000",
246*333d2b36SAndroid Build Coastguard Worker					MinSdkVersion:     FutureApiLevel,
247*333d2b36SAndroid Build Coastguard Worker					UsePlatformApis:   true,
248*333d2b36SAndroid Build Coastguard Worker					InApexVariants:    []string{"foo", "bar"},
249*333d2b36SAndroid Build Coastguard Worker					ForPrebuiltApex:   NotForPrebuiltApex,
250*333d2b36SAndroid Build Coastguard Worker				},
251*333d2b36SAndroid Build Coastguard Worker			},
252*333d2b36SAndroid Build Coastguard Worker			wantAliases: [][2]string{
253*333d2b36SAndroid Build Coastguard Worker				{"foo", "apex10000"},
254*333d2b36SAndroid Build Coastguard Worker				{"bar", "apex10000"},
255*333d2b36SAndroid Build Coastguard Worker			},
256*333d2b36SAndroid Build Coastguard Worker		},
257*333d2b36SAndroid Build Coastguard Worker	}
258*333d2b36SAndroid Build Coastguard Worker
259*333d2b36SAndroid Build Coastguard Worker	for _, tt := range tests {
260*333d2b36SAndroid Build Coastguard Worker		t.Run(tt.name, func(t *testing.T) {
261*333d2b36SAndroid Build Coastguard Worker			gotMerged, gotAliases := mergeApexVariations(tt.in)
262*333d2b36SAndroid Build Coastguard Worker			if !reflect.DeepEqual(gotMerged, tt.wantMerged) {
263*333d2b36SAndroid Build Coastguard Worker				t.Errorf("mergeApexVariations() gotMerged = %v, want %v", gotMerged, tt.wantMerged)
264*333d2b36SAndroid Build Coastguard Worker			}
265*333d2b36SAndroid Build Coastguard Worker			if !reflect.DeepEqual(gotAliases, tt.wantAliases) {
266*333d2b36SAndroid Build Coastguard Worker				t.Errorf("mergeApexVariations() gotAliases = %v, want %v", gotAliases, tt.wantAliases)
267*333d2b36SAndroid Build Coastguard Worker			}
268*333d2b36SAndroid Build Coastguard Worker		})
269*333d2b36SAndroid Build Coastguard Worker	}
270*333d2b36SAndroid Build Coastguard Worker}
271