• 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, nil, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
37			},
38			wantMerged: []ApexInfo{
39				{"apex10000", FutureApiLevel, false, nil, []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, SdkRefs{{"baz", "1"}}, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
49				{"bar", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
50			},
51			wantMerged: []ApexInfo{
52				{"apex10000_baz_1", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, false}},
53			wantAliases: [][2]string{
54				{"bar", "apex10000_baz_1"},
55				{"foo", "apex10000_baz_1"},
56			},
57		},
58		{
59			name: "don't merge version",
60			in: []ApexInfo{
61				{"foo", FutureApiLevel, false, nil, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
62				{"bar", uncheckedFinalApiLevel(30), false, nil, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
63			},
64			wantMerged: []ApexInfo{
65				{"apex30", uncheckedFinalApiLevel(30), false, nil, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
66				{"apex10000", FutureApiLevel, false, nil, []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, nil, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
77				{"bar", FutureApiLevel, true, nil, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
78			},
79			wantMerged: []ApexInfo{
80				{"apex10000", FutureApiLevel, true, nil, []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 sdks",
89			in: []ApexInfo{
90				{"foo", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
91				{"bar", FutureApiLevel, false, SdkRefs{{"baz", "2"}}, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
92			},
93			wantMerged: []ApexInfo{
94				{"apex10000_baz_2", FutureApiLevel, false, SdkRefs{{"baz", "2"}}, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
95				{"apex10000_baz_1", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
96			},
97			wantAliases: [][2]string{
98				{"bar", "apex10000_baz_2"},
99				{"foo", "apex10000_baz_1"},
100			},
101		},
102		{
103			name: "don't merge when for prebuilt_apex",
104			in: []ApexInfo{
105				{"foo", FutureApiLevel, false, nil, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex},
106				{"bar", FutureApiLevel, true, nil, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex},
107				// This one should not be merged in with the others because it is for
108				// a prebuilt_apex.
109				{"baz", FutureApiLevel, true, nil, []string{"baz"}, []string{"baz"}, nil, ForPrebuiltApex},
110			},
111			wantMerged: []ApexInfo{
112				{"apex10000", FutureApiLevel, true, nil, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex},
113				{"baz", FutureApiLevel, true, nil, []string{"baz"}, []string{"baz"}, nil, ForPrebuiltApex},
114			},
115			wantAliases: [][2]string{
116				{"bar", "apex10000"},
117				{"foo", "apex10000"},
118			},
119		},
120	}
121
122	for _, tt := range tests {
123		t.Run(tt.name, func(t *testing.T) {
124			config := TestConfig(t.TempDir(), nil, "", nil)
125			ctx := &configErrorWrapper{config: config}
126			gotMerged, gotAliases := mergeApexVariations(ctx, tt.in)
127			if !reflect.DeepEqual(gotMerged, tt.wantMerged) {
128				t.Errorf("mergeApexVariations() gotMerged = %v, want %v", gotMerged, tt.wantMerged)
129			}
130			if !reflect.DeepEqual(gotAliases, tt.wantAliases) {
131				t.Errorf("mergeApexVariations() gotAliases = %v, want %v", gotAliases, tt.wantAliases)
132			}
133		})
134	}
135}
136