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