blob: ddc730d05aa7dd8c66ac571d5fa0a61f060d9972 [file] [log] [blame]
Colin Crossaede88c2020-08-11 12:17:01 -07001// 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) {
Paul Duffin064b70c2020-11-02 17:32:38 +000023 const (
24 ForPrebuiltApex = true
25 NotForPrebuiltApex = false
26 )
Colin Crossaede88c2020-08-11 12:17:01 -070027 tests := []struct {
28 name string
29 in []ApexInfo
30 wantMerged []ApexInfo
31 wantAliases [][2]string
32 }{
33 {
34 name: "single",
35 in: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000036 {"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
Colin Crossaede88c2020-08-11 12:17:01 -070037 },
38 wantMerged: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000039 {"apex10000", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
Colin Crossaede88c2020-08-11 12:17:01 -070040 },
41 wantAliases: [][2]string{
42 {"foo", "apex10000"},
43 },
44 },
45 {
46 name: "merge",
47 in: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000048 {"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
49 {"bar", FutureApiLevel, false, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex, nil},
Colin Crossaede88c2020-08-11 12:17:01 -070050 },
51 wantMerged: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000052 {"apex10000", FutureApiLevel, false, false, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, false, nil}},
Colin Crossaede88c2020-08-11 12:17:01 -070053 wantAliases: [][2]string{
Liz Kammer7eed5382022-04-21 11:13:45 -040054 {"bar", "apex10000"},
55 {"foo", "apex10000"},
Colin Crossaede88c2020-08-11 12:17:01 -070056 },
57 },
58 {
59 name: "don't merge version",
60 in: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000061 {"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
62 {"bar", uncheckedFinalApiLevel(30), false, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex, nil},
Colin Crossaede88c2020-08-11 12:17:01 -070063 },
64 wantMerged: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000065 {"apex30", uncheckedFinalApiLevel(30), false, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex, nil},
66 {"apex10000", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
Colin Crossaede88c2020-08-11 12:17:01 -070067 },
68 wantAliases: [][2]string{
69 {"bar", "apex30"},
70 {"foo", "apex10000"},
71 },
72 },
73 {
74 name: "merge updatable",
75 in: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000076 {"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
77 {"bar", FutureApiLevel, true, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex, nil},
Colin Crossaede88c2020-08-11 12:17:01 -070078 },
79 wantMerged: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000080 {"apex10000", FutureApiLevel, true, false, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex, nil},
Colin Crossaede88c2020-08-11 12:17:01 -070081 },
82 wantAliases: [][2]string{
83 {"bar", "apex10000"},
84 {"foo", "apex10000"},
85 },
86 },
87 {
Paul Duffin064b70c2020-11-02 17:32:38 +000088 name: "don't merge when for prebuilt_apex",
89 in: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000090 {"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
91 {"bar", FutureApiLevel, true, false, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex, nil},
Paul Duffin064b70c2020-11-02 17:32:38 +000092 // This one should not be merged in with the others because it is for
93 // a prebuilt_apex.
Spandan Dase8173a82023-04-12 17:14:11 +000094 {"baz", FutureApiLevel, true, false, []string{"baz"}, []string{"baz"}, nil, ForPrebuiltApex, nil},
Paul Duffin064b70c2020-11-02 17:32:38 +000095 },
96 wantMerged: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +000097 {"apex10000", FutureApiLevel, true, false, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex, nil},
98 {"baz", FutureApiLevel, true, false, []string{"baz"}, []string{"baz"}, nil, ForPrebuiltApex, nil},
Paul Duffin064b70c2020-11-02 17:32:38 +000099 },
100 wantAliases: [][2]string{
101 {"bar", "apex10000"},
102 {"foo", "apex10000"},
103 },
104 },
Jiyong Park9477c262021-06-22 20:23:05 +0900105 {
Jiyong Parkd4a00632022-04-12 12:23:20 +0900106 name: "merge different UsePlatformApis but don't allow using platform api",
Jiyong Park9477c262021-06-22 20:23:05 +0900107 in: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +0000108 {"foo", FutureApiLevel, false, false, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
109 {"bar", FutureApiLevel, false, true, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex, nil},
Jiyong Park9477c262021-06-22 20:23:05 +0900110 },
111 wantMerged: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +0000112 {"apex10000", FutureApiLevel, false, false, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex, nil},
Jiyong Park9477c262021-06-22 20:23:05 +0900113 },
114 wantAliases: [][2]string{
Jiyong Parkd4a00632022-04-12 12:23:20 +0900115 {"bar", "apex10000"},
116 {"foo", "apex10000"},
117 },
118 },
119 {
120 name: "merge same UsePlatformApis and allow using platform api",
121 in: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +0000122 {"foo", FutureApiLevel, false, true, []string{"foo"}, []string{"foo"}, nil, NotForPrebuiltApex, nil},
123 {"bar", FutureApiLevel, false, true, []string{"bar"}, []string{"bar"}, nil, NotForPrebuiltApex, nil},
Jiyong Parkd4a00632022-04-12 12:23:20 +0900124 },
125 wantMerged: []ApexInfo{
Spandan Dase8173a82023-04-12 17:14:11 +0000126 {"apex10000", FutureApiLevel, false, true, []string{"bar", "foo"}, []string{"bar", "foo"}, nil, NotForPrebuiltApex, nil},
Jiyong Parkd4a00632022-04-12 12:23:20 +0900127 },
128 wantAliases: [][2]string{
129 {"bar", "apex10000"},
Jiyong Park9477c262021-06-22 20:23:05 +0900130 {"foo", "apex10000"},
131 },
132 },
Colin Crossaede88c2020-08-11 12:17:01 -0700133 }
Paul Duffin064b70c2020-11-02 17:32:38 +0000134
Colin Crossaede88c2020-08-11 12:17:01 -0700135 for _, tt := range tests {
136 t.Run(tt.name, func(t *testing.T) {
Paul Duffind210afa2021-03-16 17:31:20 +0000137 config := TestConfig(t.TempDir(), nil, "", nil)
Colin Cross9f720ce2020-10-02 10:26:04 -0700138 ctx := &configErrorWrapper{config: config}
139 gotMerged, gotAliases := mergeApexVariations(ctx, tt.in)
Colin Crossaede88c2020-08-11 12:17:01 -0700140 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}