• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2020 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 android
16
17import (
18	"reflect"
19	"testing"
20)
21
22func Test_mergeApexVariations(t *testing.T) {
23	const (
24		ForPrebuiltApex    = true
25		NotForPrebuiltApex = false
26	)
27	tests := []struct {
28		name        string
29		in          []ApexInfo
30		wantMerged  []ApexInfo
31		wantAliases [][2]string
32	}{
33		{
34			name: "single",
35			in: []ApexInfo{
36				{"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
37			},
38			wantMerged: []ApexInfo{
39				{"apex10000", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
40			},
41			wantAliases: [][2]string{
42				{"foo", "apex10000"},
43			},
44		},
45		{
46			name: "merge",
47			in: []ApexInfo{
48				{"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
49				{"bar", FutureApiLevel, false, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
50			},
51			wantMerged: []ApexInfo{
52				{"apex10000", FutureApiLevel, false, false, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, false}},
53			wantAliases: [][2]string{
54				{"bar", "apex10000"},
55				{"foo", "apex10000"},
56			},
57		},
58		{
59			name: "don't merge version",
60			in: []ApexInfo{
61				{"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
62				{"bar", uncheckedFinalApiLevel(30), false, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
63			},
64			wantMerged: []ApexInfo{
65				{"apex30", uncheckedFinalApiLevel(30), false, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
66				{"apex10000", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
67			},
68			wantAliases: [][2]string{
69				{"bar", "apex30"},
70				{"foo", "apex10000"},
71			},
72		},
73		{
74			name: "merge updatable",
75			in: []ApexInfo{
76				{"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
77				{"bar", FutureApiLevel, true, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
78			},
79			wantMerged: []ApexInfo{
80				{"apex10000", FutureApiLevel, true, false, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex},
81			},
82			wantAliases: [][2]string{
83				{"bar", "apex10000"},
84				{"foo", "apex10000"},
85			},
86		},
87		{
88			name: "don't merge when for prebuilt_apex",
89			in: []ApexInfo{
90				{"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
91				{"bar", FutureApiLevel, true, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
92				// This one should not be merged in with the others because it is for
93				// a prebuilt_apex.
94				{"baz", FutureApiLevel, true, false, []string{"baz"}, []string{"baz"}, nil, ForPrebuiltApex},
95			},
96			wantMerged: []ApexInfo{
97				{"apex10000", FutureApiLevel, true, false, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex},
98				{"baz", FutureApiLevel, true, false, []string{"baz"}, []string{"baz"}, nil, ForPrebuiltApex},
99			},
100			wantAliases: [][2]string{
101				{"bar", "apex10000"},
102				{"foo", "apex10000"},
103			},
104		},
105		{
106			name: "merge different UsePlatformApis but don't allow using platform api",
107			in: []ApexInfo{
108				{"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
109				{"bar", FutureApiLevel, false, true, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
110			},
111			wantMerged: []ApexInfo{
112				{"apex10000", FutureApiLevel, false, false, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex},
113			},
114			wantAliases: [][2]string{
115				{"bar", "apex10000"},
116				{"foo", "apex10000"},
117			},
118		},
119		{
120			name: "merge same UsePlatformApis and allow using platform api",
121			in: []ApexInfo{
122				{"foo", FutureApiLevel, false, true, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
123				{"bar", FutureApiLevel, false, true, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
124			},
125			wantMerged: []ApexInfo{
126				{"apex10000", FutureApiLevel, false, true, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex},
127			},
128			wantAliases: [][2]string{
129				{"bar", "apex10000"},
130				{"foo", "apex10000"},
131			},
132		},
133	}
134
135	for _, tt := range tests {
136		t.Run(tt.name, func(t *testing.T) {
137			config := TestConfig(t.TempDir(), nil, "", nil)
138			ctx := &configErrorWrapper{config: config}
139			gotMerged, gotAliases := mergeApexVariations(ctx, tt.in)
140			if !reflect.DeepEqual(gotMerged, tt.wantMerged) {
141				t.Errorf("mergeApexVariations() gotMerged = %v, want %v", gotMerged, tt.wantMerged)
142			}
143			if !reflect.DeepEqual(gotAliases, tt.wantAliases) {
144				t.Errorf("mergeApexVariations() gotAliases = %v, want %v", gotAliases, tt.wantAliases)
145			}
146		})
147	}
148}
149