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