1*9e94795aSAndroid Build Coastguard Worker// Copyright 2021 Google LLC 2*9e94795aSAndroid Build Coastguard Worker// 3*9e94795aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*9e94795aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*9e94795aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*9e94795aSAndroid Build Coastguard Worker// 7*9e94795aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*9e94795aSAndroid Build Coastguard Worker// 9*9e94795aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*9e94795aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*9e94795aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9e94795aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*9e94795aSAndroid Build Coastguard Worker// limitations under the License. 14*9e94795aSAndroid Build Coastguard Worker 15*9e94795aSAndroid Build Coastguard Workerpackage compliance 16*9e94795aSAndroid Build Coastguard Worker 17*9e94795aSAndroid Build Coastguard Workerimport ( 18*9e94795aSAndroid Build Coastguard Worker "strings" 19*9e94795aSAndroid Build Coastguard Worker "testing" 20*9e94795aSAndroid Build Coastguard Worker) 21*9e94795aSAndroid Build Coastguard Worker 22*9e94795aSAndroid Build Coastguard Workerfunc TestConditionSet(t *testing.T) { 23*9e94795aSAndroid Build Coastguard Worker tests := []struct { 24*9e94795aSAndroid Build Coastguard Worker name string 25*9e94795aSAndroid Build Coastguard Worker conditions []string 26*9e94795aSAndroid Build Coastguard Worker plus *[]string 27*9e94795aSAndroid Build Coastguard Worker minus *[]string 28*9e94795aSAndroid Build Coastguard Worker matchingAny map[string][]string 29*9e94795aSAndroid Build Coastguard Worker expected []string 30*9e94795aSAndroid Build Coastguard Worker }{ 31*9e94795aSAndroid Build Coastguard Worker { 32*9e94795aSAndroid Build Coastguard Worker name: "empty", 33*9e94795aSAndroid Build Coastguard Worker conditions: []string{}, 34*9e94795aSAndroid Build Coastguard Worker plus: &[]string{}, 35*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 36*9e94795aSAndroid Build Coastguard Worker "notice": []string{}, 37*9e94795aSAndroid Build Coastguard Worker "restricted": []string{}, 38*9e94795aSAndroid Build Coastguard Worker "restricted|reciprocal": []string{}, 39*9e94795aSAndroid Build Coastguard Worker }, 40*9e94795aSAndroid Build Coastguard Worker expected: []string{}, 41*9e94795aSAndroid Build Coastguard Worker }, 42*9e94795aSAndroid Build Coastguard Worker { 43*9e94795aSAndroid Build Coastguard Worker name: "emptyminusnothing", 44*9e94795aSAndroid Build Coastguard Worker conditions: []string{}, 45*9e94795aSAndroid Build Coastguard Worker minus: &[]string{}, 46*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 47*9e94795aSAndroid Build Coastguard Worker "notice": []string{}, 48*9e94795aSAndroid Build Coastguard Worker "restricted": []string{}, 49*9e94795aSAndroid Build Coastguard Worker "restricted|reciprocal": []string{}, 50*9e94795aSAndroid Build Coastguard Worker }, 51*9e94795aSAndroid Build Coastguard Worker expected: []string{}, 52*9e94795aSAndroid Build Coastguard Worker }, 53*9e94795aSAndroid Build Coastguard Worker { 54*9e94795aSAndroid Build Coastguard Worker name: "emptyminusnotice", 55*9e94795aSAndroid Build Coastguard Worker conditions: []string{}, 56*9e94795aSAndroid Build Coastguard Worker minus: &[]string{"notice"}, 57*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 58*9e94795aSAndroid Build Coastguard Worker "notice": []string{}, 59*9e94795aSAndroid Build Coastguard Worker "restricted": []string{}, 60*9e94795aSAndroid Build Coastguard Worker "restricted|reciprocal": []string{}, 61*9e94795aSAndroid Build Coastguard Worker }, 62*9e94795aSAndroid Build Coastguard Worker expected: []string{}, 63*9e94795aSAndroid Build Coastguard Worker }, 64*9e94795aSAndroid Build Coastguard Worker { 65*9e94795aSAndroid Build Coastguard Worker name: "noticeonly", 66*9e94795aSAndroid Build Coastguard Worker conditions: []string{"notice"}, 67*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 68*9e94795aSAndroid Build Coastguard Worker "notice": []string{"notice"}, 69*9e94795aSAndroid Build Coastguard Worker "notice|proprietary": []string{"notice"}, 70*9e94795aSAndroid Build Coastguard Worker "restricted": []string{}, 71*9e94795aSAndroid Build Coastguard Worker }, 72*9e94795aSAndroid Build Coastguard Worker expected: []string{"notice"}, 73*9e94795aSAndroid Build Coastguard Worker }, 74*9e94795aSAndroid Build Coastguard Worker { 75*9e94795aSAndroid Build Coastguard Worker name: "allnoticeonly", 76*9e94795aSAndroid Build Coastguard Worker conditions: []string{"notice"}, 77*9e94795aSAndroid Build Coastguard Worker plus: &[]string{"notice"}, 78*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 79*9e94795aSAndroid Build Coastguard Worker "notice": []string{"notice"}, 80*9e94795aSAndroid Build Coastguard Worker "notice|proprietary": []string{"notice"}, 81*9e94795aSAndroid Build Coastguard Worker "restricted": []string{}, 82*9e94795aSAndroid Build Coastguard Worker }, 83*9e94795aSAndroid Build Coastguard Worker expected: []string{"notice"}, 84*9e94795aSAndroid Build Coastguard Worker }, 85*9e94795aSAndroid Build Coastguard Worker { 86*9e94795aSAndroid Build Coastguard Worker name: "emptyplusnotice", 87*9e94795aSAndroid Build Coastguard Worker conditions: []string{}, 88*9e94795aSAndroid Build Coastguard Worker plus: &[]string{"notice"}, 89*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 90*9e94795aSAndroid Build Coastguard Worker "notice": []string{"notice"}, 91*9e94795aSAndroid Build Coastguard Worker "notice|proprietary": []string{"notice"}, 92*9e94795aSAndroid Build Coastguard Worker "restricted": []string{}, 93*9e94795aSAndroid Build Coastguard Worker }, 94*9e94795aSAndroid Build Coastguard Worker expected: []string{"notice"}, 95*9e94795aSAndroid Build Coastguard Worker }, 96*9e94795aSAndroid Build Coastguard Worker { 97*9e94795aSAndroid Build Coastguard Worker name: "everything", 98*9e94795aSAndroid Build Coastguard Worker conditions: []string{"unencumbered", "permissive", "notice", "reciprocal", "restricted", "proprietary"}, 99*9e94795aSAndroid Build Coastguard Worker plus: &[]string{"restricted_if_statically_linked", "by_exception_only", "not_allowed"}, 100*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 101*9e94795aSAndroid Build Coastguard Worker "unencumbered": []string{"unencumbered"}, 102*9e94795aSAndroid Build Coastguard Worker "permissive": []string{"permissive"}, 103*9e94795aSAndroid Build Coastguard Worker "notice": []string{"notice"}, 104*9e94795aSAndroid Build Coastguard Worker "reciprocal": []string{"reciprocal"}, 105*9e94795aSAndroid Build Coastguard Worker "restricted": []string{"restricted"}, 106*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked": []string{"restricted_if_statically_linked"}, 107*9e94795aSAndroid Build Coastguard Worker "proprietary": []string{"proprietary"}, 108*9e94795aSAndroid Build Coastguard Worker "by_exception_only": []string{"by_exception_only"}, 109*9e94795aSAndroid Build Coastguard Worker "not_allowed": []string{"not_allowed"}, 110*9e94795aSAndroid Build Coastguard Worker "notice|proprietary": []string{"notice", "proprietary"}, 111*9e94795aSAndroid Build Coastguard Worker }, 112*9e94795aSAndroid Build Coastguard Worker expected: []string{ 113*9e94795aSAndroid Build Coastguard Worker "unencumbered", 114*9e94795aSAndroid Build Coastguard Worker "permissive", 115*9e94795aSAndroid Build Coastguard Worker "notice", 116*9e94795aSAndroid Build Coastguard Worker "reciprocal", 117*9e94795aSAndroid Build Coastguard Worker "restricted", 118*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked", 119*9e94795aSAndroid Build Coastguard Worker "proprietary", 120*9e94795aSAndroid Build Coastguard Worker "by_exception_only", 121*9e94795aSAndroid Build Coastguard Worker "not_allowed", 122*9e94795aSAndroid Build Coastguard Worker }, 123*9e94795aSAndroid Build Coastguard Worker }, 124*9e94795aSAndroid Build Coastguard Worker { 125*9e94795aSAndroid Build Coastguard Worker name: "everythingplusminusnothing", 126*9e94795aSAndroid Build Coastguard Worker conditions: []string{ 127*9e94795aSAndroid Build Coastguard Worker "unencumbered", 128*9e94795aSAndroid Build Coastguard Worker "permissive", 129*9e94795aSAndroid Build Coastguard Worker "notice", 130*9e94795aSAndroid Build Coastguard Worker "reciprocal", 131*9e94795aSAndroid Build Coastguard Worker "restricted", 132*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked", 133*9e94795aSAndroid Build Coastguard Worker "proprietary", 134*9e94795aSAndroid Build Coastguard Worker "by_exception_only", 135*9e94795aSAndroid Build Coastguard Worker "not_allowed", 136*9e94795aSAndroid Build Coastguard Worker }, 137*9e94795aSAndroid Build Coastguard Worker plus: &[]string{}, 138*9e94795aSAndroid Build Coastguard Worker minus: &[]string{}, 139*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 140*9e94795aSAndroid Build Coastguard Worker "unencumbered|permissive|notice": []string{"unencumbered", "permissive", "notice"}, 141*9e94795aSAndroid Build Coastguard Worker "restricted|reciprocal": []string{"reciprocal", "restricted"}, 142*9e94795aSAndroid Build Coastguard Worker "proprietary|by_exception_only": []string{"proprietary", "by_exception_only"}, 143*9e94795aSAndroid Build Coastguard Worker "not_allowed": []string{"not_allowed"}, 144*9e94795aSAndroid Build Coastguard Worker }, 145*9e94795aSAndroid Build Coastguard Worker expected: []string{ 146*9e94795aSAndroid Build Coastguard Worker "unencumbered", 147*9e94795aSAndroid Build Coastguard Worker "permissive", 148*9e94795aSAndroid Build Coastguard Worker "notice", 149*9e94795aSAndroid Build Coastguard Worker "reciprocal", 150*9e94795aSAndroid Build Coastguard Worker "restricted", 151*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked", 152*9e94795aSAndroid Build Coastguard Worker "proprietary", 153*9e94795aSAndroid Build Coastguard Worker "by_exception_only", 154*9e94795aSAndroid Build Coastguard Worker "not_allowed", 155*9e94795aSAndroid Build Coastguard Worker }, 156*9e94795aSAndroid Build Coastguard Worker }, 157*9e94795aSAndroid Build Coastguard Worker { 158*9e94795aSAndroid Build Coastguard Worker name: "allbutone", 159*9e94795aSAndroid Build Coastguard Worker conditions: []string{"unencumbered", "permissive", "notice", "reciprocal", "restricted", "proprietary"}, 160*9e94795aSAndroid Build Coastguard Worker plus: &[]string{"restricted_if_statically_linked", "by_exception_only", "not_allowed"}, 161*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 162*9e94795aSAndroid Build Coastguard Worker "unencumbered": []string{"unencumbered"}, 163*9e94795aSAndroid Build Coastguard Worker "permissive": []string{"permissive"}, 164*9e94795aSAndroid Build Coastguard Worker "notice": []string{"notice"}, 165*9e94795aSAndroid Build Coastguard Worker "reciprocal": []string{"reciprocal"}, 166*9e94795aSAndroid Build Coastguard Worker "restricted": []string{"restricted"}, 167*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked": []string{"restricted_if_statically_linked"}, 168*9e94795aSAndroid Build Coastguard Worker "proprietary": []string{"proprietary"}, 169*9e94795aSAndroid Build Coastguard Worker "by_exception_only": []string{"by_exception_only"}, 170*9e94795aSAndroid Build Coastguard Worker "not_allowed": []string{"not_allowed"}, 171*9e94795aSAndroid Build Coastguard Worker "notice|proprietary": []string{"notice", "proprietary"}, 172*9e94795aSAndroid Build Coastguard Worker }, 173*9e94795aSAndroid Build Coastguard Worker expected: []string{ 174*9e94795aSAndroid Build Coastguard Worker "unencumbered", 175*9e94795aSAndroid Build Coastguard Worker "permissive", 176*9e94795aSAndroid Build Coastguard Worker "notice", 177*9e94795aSAndroid Build Coastguard Worker "reciprocal", 178*9e94795aSAndroid Build Coastguard Worker "restricted", 179*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked", 180*9e94795aSAndroid Build Coastguard Worker "proprietary", 181*9e94795aSAndroid Build Coastguard Worker "by_exception_only", 182*9e94795aSAndroid Build Coastguard Worker "not_allowed", 183*9e94795aSAndroid Build Coastguard Worker }, 184*9e94795aSAndroid Build Coastguard Worker }, 185*9e94795aSAndroid Build Coastguard Worker { 186*9e94795aSAndroid Build Coastguard Worker name: "everythingminusone", 187*9e94795aSAndroid Build Coastguard Worker conditions: []string{ 188*9e94795aSAndroid Build Coastguard Worker "unencumbered", 189*9e94795aSAndroid Build Coastguard Worker "permissive", 190*9e94795aSAndroid Build Coastguard Worker "notice", 191*9e94795aSAndroid Build Coastguard Worker "reciprocal", 192*9e94795aSAndroid Build Coastguard Worker "restricted", 193*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked", 194*9e94795aSAndroid Build Coastguard Worker "proprietary", 195*9e94795aSAndroid Build Coastguard Worker "by_exception_only", 196*9e94795aSAndroid Build Coastguard Worker "not_allowed", 197*9e94795aSAndroid Build Coastguard Worker }, 198*9e94795aSAndroid Build Coastguard Worker minus: &[]string{"restricted_if_statically_linked"}, 199*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 200*9e94795aSAndroid Build Coastguard Worker "unencumbered": []string{"unencumbered"}, 201*9e94795aSAndroid Build Coastguard Worker "permissive": []string{"permissive"}, 202*9e94795aSAndroid Build Coastguard Worker "notice": []string{"notice"}, 203*9e94795aSAndroid Build Coastguard Worker "reciprocal": []string{"reciprocal"}, 204*9e94795aSAndroid Build Coastguard Worker "restricted": []string{"restricted"}, 205*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked": []string{}, 206*9e94795aSAndroid Build Coastguard Worker "proprietary": []string{"proprietary"}, 207*9e94795aSAndroid Build Coastguard Worker "by_exception_only": []string{"by_exception_only"}, 208*9e94795aSAndroid Build Coastguard Worker "not_allowed": []string{"not_allowed"}, 209*9e94795aSAndroid Build Coastguard Worker "restricted|proprietary": []string{"restricted", "proprietary"}, 210*9e94795aSAndroid Build Coastguard Worker }, 211*9e94795aSAndroid Build Coastguard Worker expected: []string{ 212*9e94795aSAndroid Build Coastguard Worker "unencumbered", 213*9e94795aSAndroid Build Coastguard Worker "permissive", 214*9e94795aSAndroid Build Coastguard Worker "notice", 215*9e94795aSAndroid Build Coastguard Worker "reciprocal", 216*9e94795aSAndroid Build Coastguard Worker "restricted", 217*9e94795aSAndroid Build Coastguard Worker "proprietary", 218*9e94795aSAndroid Build Coastguard Worker "by_exception_only", 219*9e94795aSAndroid Build Coastguard Worker "not_allowed", 220*9e94795aSAndroid Build Coastguard Worker }, 221*9e94795aSAndroid Build Coastguard Worker }, 222*9e94795aSAndroid Build Coastguard Worker { 223*9e94795aSAndroid Build Coastguard Worker name: "everythingminuseverything", 224*9e94795aSAndroid Build Coastguard Worker conditions: []string{ 225*9e94795aSAndroid Build Coastguard Worker "unencumbered", 226*9e94795aSAndroid Build Coastguard Worker "permissive", 227*9e94795aSAndroid Build Coastguard Worker "notice", 228*9e94795aSAndroid Build Coastguard Worker "reciprocal", 229*9e94795aSAndroid Build Coastguard Worker "restricted", 230*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked", 231*9e94795aSAndroid Build Coastguard Worker "proprietary", 232*9e94795aSAndroid Build Coastguard Worker "by_exception_only", 233*9e94795aSAndroid Build Coastguard Worker "not_allowed", 234*9e94795aSAndroid Build Coastguard Worker }, 235*9e94795aSAndroid Build Coastguard Worker minus: &[]string{ 236*9e94795aSAndroid Build Coastguard Worker "unencumbered", 237*9e94795aSAndroid Build Coastguard Worker "permissive", 238*9e94795aSAndroid Build Coastguard Worker "notice", 239*9e94795aSAndroid Build Coastguard Worker "reciprocal", 240*9e94795aSAndroid Build Coastguard Worker "restricted", 241*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked", 242*9e94795aSAndroid Build Coastguard Worker "proprietary", 243*9e94795aSAndroid Build Coastguard Worker "by_exception_only", 244*9e94795aSAndroid Build Coastguard Worker "not_allowed", 245*9e94795aSAndroid Build Coastguard Worker }, 246*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 247*9e94795aSAndroid Build Coastguard Worker "unencumbered": []string{}, 248*9e94795aSAndroid Build Coastguard Worker "permissive": []string{}, 249*9e94795aSAndroid Build Coastguard Worker "notice": []string{}, 250*9e94795aSAndroid Build Coastguard Worker "reciprocal": []string{}, 251*9e94795aSAndroid Build Coastguard Worker "restricted": []string{}, 252*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked": []string{}, 253*9e94795aSAndroid Build Coastguard Worker "proprietary": []string{}, 254*9e94795aSAndroid Build Coastguard Worker "by_exception_only": []string{}, 255*9e94795aSAndroid Build Coastguard Worker "not_allowed": []string{}, 256*9e94795aSAndroid Build Coastguard Worker "restricted|proprietary": []string{}, 257*9e94795aSAndroid Build Coastguard Worker }, 258*9e94795aSAndroid Build Coastguard Worker expected: []string{}, 259*9e94795aSAndroid Build Coastguard Worker }, 260*9e94795aSAndroid Build Coastguard Worker { 261*9e94795aSAndroid Build Coastguard Worker name: "restrictedplus", 262*9e94795aSAndroid Build Coastguard Worker conditions: []string{"restricted", "restricted_if_statically_linked"}, 263*9e94795aSAndroid Build Coastguard Worker plus: &[]string{"permissive", "notice", "restricted", "proprietary"}, 264*9e94795aSAndroid Build Coastguard Worker matchingAny: map[string][]string{ 265*9e94795aSAndroid Build Coastguard Worker "unencumbered": []string{}, 266*9e94795aSAndroid Build Coastguard Worker "permissive": []string{"permissive"}, 267*9e94795aSAndroid Build Coastguard Worker "notice": []string{"notice"}, 268*9e94795aSAndroid Build Coastguard Worker "restricted": []string{"restricted"}, 269*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked": []string{"restricted_if_statically_linked"}, 270*9e94795aSAndroid Build Coastguard Worker "proprietary": []string{"proprietary"}, 271*9e94795aSAndroid Build Coastguard Worker "restricted|proprietary": []string{"restricted", "proprietary"}, 272*9e94795aSAndroid Build Coastguard Worker "by_exception_only": []string{}, 273*9e94795aSAndroid Build Coastguard Worker "proprietary|by_exception_only": []string{"proprietary"}, 274*9e94795aSAndroid Build Coastguard Worker }, 275*9e94795aSAndroid Build Coastguard Worker expected: []string{"permissive", "notice", "restricted", "restricted_if_statically_linked", "proprietary"}, 276*9e94795aSAndroid Build Coastguard Worker }, 277*9e94795aSAndroid Build Coastguard Worker } 278*9e94795aSAndroid Build Coastguard Worker for _, tt := range tests { 279*9e94795aSAndroid Build Coastguard Worker toConditions := func(names []string) []LicenseCondition { 280*9e94795aSAndroid Build Coastguard Worker result := make([]LicenseCondition, 0, len(names)) 281*9e94795aSAndroid Build Coastguard Worker for _, name := range names { 282*9e94795aSAndroid Build Coastguard Worker result = append(result, RecognizedConditionNames[name]) 283*9e94795aSAndroid Build Coastguard Worker } 284*9e94795aSAndroid Build Coastguard Worker return result 285*9e94795aSAndroid Build Coastguard Worker } 286*9e94795aSAndroid Build Coastguard Worker populate := func() LicenseConditionSet { 287*9e94795aSAndroid Build Coastguard Worker testSet := NewLicenseConditionSet(toConditions(tt.conditions)...) 288*9e94795aSAndroid Build Coastguard Worker if tt.plus != nil { 289*9e94795aSAndroid Build Coastguard Worker testSet = testSet.Plus(toConditions(*tt.plus)...) 290*9e94795aSAndroid Build Coastguard Worker } 291*9e94795aSAndroid Build Coastguard Worker if tt.minus != nil { 292*9e94795aSAndroid Build Coastguard Worker testSet = testSet.Minus(toConditions(*tt.minus)...) 293*9e94795aSAndroid Build Coastguard Worker } 294*9e94795aSAndroid Build Coastguard Worker return testSet 295*9e94795aSAndroid Build Coastguard Worker } 296*9e94795aSAndroid Build Coastguard Worker populateSet := func() LicenseConditionSet { 297*9e94795aSAndroid Build Coastguard Worker testSet := NewLicenseConditionSet(toConditions(tt.conditions)...) 298*9e94795aSAndroid Build Coastguard Worker if tt.plus != nil { 299*9e94795aSAndroid Build Coastguard Worker testSet = testSet.Union(NewLicenseConditionSet(toConditions(*tt.plus)...)) 300*9e94795aSAndroid Build Coastguard Worker } 301*9e94795aSAndroid Build Coastguard Worker if tt.minus != nil { 302*9e94795aSAndroid Build Coastguard Worker testSet = testSet.Difference(NewLicenseConditionSet(toConditions(*tt.minus)...)) 303*9e94795aSAndroid Build Coastguard Worker } 304*9e94795aSAndroid Build Coastguard Worker return testSet 305*9e94795aSAndroid Build Coastguard Worker } 306*9e94795aSAndroid Build Coastguard Worker populatePlusSet := func() LicenseConditionSet { 307*9e94795aSAndroid Build Coastguard Worker testSet := NewLicenseConditionSet(toConditions(tt.conditions)...) 308*9e94795aSAndroid Build Coastguard Worker if tt.plus != nil { 309*9e94795aSAndroid Build Coastguard Worker testSet = testSet.Union(NewLicenseConditionSet(toConditions(*tt.plus)...)) 310*9e94795aSAndroid Build Coastguard Worker } 311*9e94795aSAndroid Build Coastguard Worker if tt.minus != nil { 312*9e94795aSAndroid Build Coastguard Worker testSet = testSet.Minus(toConditions(*tt.minus)...) 313*9e94795aSAndroid Build Coastguard Worker } 314*9e94795aSAndroid Build Coastguard Worker return testSet 315*9e94795aSAndroid Build Coastguard Worker } 316*9e94795aSAndroid Build Coastguard Worker populateMinusSet := func() LicenseConditionSet { 317*9e94795aSAndroid Build Coastguard Worker testSet := NewLicenseConditionSet(toConditions(tt.conditions)...) 318*9e94795aSAndroid Build Coastguard Worker if tt.plus != nil { 319*9e94795aSAndroid Build Coastguard Worker testSet = testSet.Plus(toConditions(*tt.plus)...) 320*9e94795aSAndroid Build Coastguard Worker } 321*9e94795aSAndroid Build Coastguard Worker if tt.minus != nil { 322*9e94795aSAndroid Build Coastguard Worker testSet = testSet.Difference(NewLicenseConditionSet(toConditions(*tt.minus)...)) 323*9e94795aSAndroid Build Coastguard Worker } 324*9e94795aSAndroid Build Coastguard Worker return testSet 325*9e94795aSAndroid Build Coastguard Worker } 326*9e94795aSAndroid Build Coastguard Worker checkMatching := func(cs LicenseConditionSet, t *testing.T) { 327*9e94795aSAndroid Build Coastguard Worker for data, expectedNames := range tt.matchingAny { 328*9e94795aSAndroid Build Coastguard Worker expectedConditions := toConditions(expectedNames) 329*9e94795aSAndroid Build Coastguard Worker expected := NewLicenseConditionSet(expectedConditions...) 330*9e94795aSAndroid Build Coastguard Worker actual := cs.MatchingAny(toConditions(strings.Split(data, "|"))...) 331*9e94795aSAndroid Build Coastguard Worker actualNames := actual.Names() 332*9e94795aSAndroid Build Coastguard Worker 333*9e94795aSAndroid Build Coastguard Worker t.Logf("MatchingAny(%s): actual set %#v %s", data, actual, actual.String()) 334*9e94795aSAndroid Build Coastguard Worker t.Logf("MatchingAny(%s): expected set %#v %s", data, expected, expected.String()) 335*9e94795aSAndroid Build Coastguard Worker 336*9e94795aSAndroid Build Coastguard Worker if actual != expected { 337*9e94795aSAndroid Build Coastguard Worker t.Errorf("MatchingAny(%s): got %#v, want %#v", data, actual, expected) 338*9e94795aSAndroid Build Coastguard Worker continue 339*9e94795aSAndroid Build Coastguard Worker } 340*9e94795aSAndroid Build Coastguard Worker if len(actualNames) != len(expectedNames) { 341*9e94795aSAndroid Build Coastguard Worker t.Errorf("len(MatchinAny(%s).Names()): got %d, want %d", 342*9e94795aSAndroid Build Coastguard Worker data, len(actualNames), len(expectedNames)) 343*9e94795aSAndroid Build Coastguard Worker } else { 344*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actualNames); i++ { 345*9e94795aSAndroid Build Coastguard Worker if actualNames[i] != expectedNames[i] { 346*9e94795aSAndroid Build Coastguard Worker t.Errorf("MatchingAny(%s).Names()[%d]: got %s, want %s", 347*9e94795aSAndroid Build Coastguard Worker data, i, actualNames[i], expectedNames[i]) 348*9e94795aSAndroid Build Coastguard Worker break 349*9e94795aSAndroid Build Coastguard Worker } 350*9e94795aSAndroid Build Coastguard Worker } 351*9e94795aSAndroid Build Coastguard Worker } 352*9e94795aSAndroid Build Coastguard Worker actualConditions := actual.AsList() 353*9e94795aSAndroid Build Coastguard Worker if len(actualConditions) != len(expectedConditions) { 354*9e94795aSAndroid Build Coastguard Worker t.Errorf("len(MatchingAny(%s).AsList()): got %d, want %d", 355*9e94795aSAndroid Build Coastguard Worker data, len(actualNames), len(expectedNames)) 356*9e94795aSAndroid Build Coastguard Worker } else { 357*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actualNames); i++ { 358*9e94795aSAndroid Build Coastguard Worker if actualNames[i] != expectedNames[i] { 359*9e94795aSAndroid Build Coastguard Worker t.Errorf("MatchingAny(%s).AsList()[%d]: got %s, want %s", 360*9e94795aSAndroid Build Coastguard Worker data, i, actualNames[i], expectedNames[i]) 361*9e94795aSAndroid Build Coastguard Worker break 362*9e94795aSAndroid Build Coastguard Worker } 363*9e94795aSAndroid Build Coastguard Worker } 364*9e94795aSAndroid Build Coastguard Worker } 365*9e94795aSAndroid Build Coastguard Worker } 366*9e94795aSAndroid Build Coastguard Worker } 367*9e94795aSAndroid Build Coastguard Worker checkMatchingSet := func(cs LicenseConditionSet, t *testing.T) { 368*9e94795aSAndroid Build Coastguard Worker for data, expectedNames := range tt.matchingAny { 369*9e94795aSAndroid Build Coastguard Worker expected := NewLicenseConditionSet(toConditions(expectedNames)...) 370*9e94795aSAndroid Build Coastguard Worker actual := cs.MatchingAnySet(NewLicenseConditionSet(toConditions(strings.Split(data, "|"))...)) 371*9e94795aSAndroid Build Coastguard Worker actualNames := actual.Names() 372*9e94795aSAndroid Build Coastguard Worker 373*9e94795aSAndroid Build Coastguard Worker t.Logf("MatchingAnySet(%s): actual set %#v %s", data, actual, actual.String()) 374*9e94795aSAndroid Build Coastguard Worker t.Logf("MatchingAnySet(%s): expected set %#v %s", data, expected, expected.String()) 375*9e94795aSAndroid Build Coastguard Worker 376*9e94795aSAndroid Build Coastguard Worker if actual != expected { 377*9e94795aSAndroid Build Coastguard Worker t.Errorf("MatchingAnySet(%s): got %#v, want %#v", data, actual, expected) 378*9e94795aSAndroid Build Coastguard Worker continue 379*9e94795aSAndroid Build Coastguard Worker } 380*9e94795aSAndroid Build Coastguard Worker if len(actualNames) != len(expectedNames) { 381*9e94795aSAndroid Build Coastguard Worker t.Errorf("len(MatchingAnySet(%s).Names()): got %d, want %d", 382*9e94795aSAndroid Build Coastguard Worker data, len(actualNames), len(expectedNames)) 383*9e94795aSAndroid Build Coastguard Worker } else { 384*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actualNames); i++ { 385*9e94795aSAndroid Build Coastguard Worker if actualNames[i] != expectedNames[i] { 386*9e94795aSAndroid Build Coastguard Worker t.Errorf("MatchingAnySet(%s).Names()[%d]: got %s, want %s", 387*9e94795aSAndroid Build Coastguard Worker data, i, actualNames[i], expectedNames[i]) 388*9e94795aSAndroid Build Coastguard Worker break 389*9e94795aSAndroid Build Coastguard Worker } 390*9e94795aSAndroid Build Coastguard Worker } 391*9e94795aSAndroid Build Coastguard Worker } 392*9e94795aSAndroid Build Coastguard Worker expectedConditions := toConditions(expectedNames) 393*9e94795aSAndroid Build Coastguard Worker actualConditions := actual.AsList() 394*9e94795aSAndroid Build Coastguard Worker if len(actualConditions) != len(expectedConditions) { 395*9e94795aSAndroid Build Coastguard Worker t.Errorf("len(MatchingAnySet(%s).AsList()): got %d, want %d", 396*9e94795aSAndroid Build Coastguard Worker data, len(actualNames), len(expectedNames)) 397*9e94795aSAndroid Build Coastguard Worker } else { 398*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actualNames); i++ { 399*9e94795aSAndroid Build Coastguard Worker if actualNames[i] != expectedNames[i] { 400*9e94795aSAndroid Build Coastguard Worker t.Errorf("MatchingAnySet(%s).AsList()[%d]: got %s, want %s", 401*9e94795aSAndroid Build Coastguard Worker data, i, actualNames[i], expectedNames[i]) 402*9e94795aSAndroid Build Coastguard Worker break 403*9e94795aSAndroid Build Coastguard Worker } 404*9e94795aSAndroid Build Coastguard Worker } 405*9e94795aSAndroid Build Coastguard Worker } 406*9e94795aSAndroid Build Coastguard Worker } 407*9e94795aSAndroid Build Coastguard Worker } 408*9e94795aSAndroid Build Coastguard Worker 409*9e94795aSAndroid Build Coastguard Worker checkExpected := func(actual LicenseConditionSet, t *testing.T) bool { 410*9e94795aSAndroid Build Coastguard Worker t.Logf("checkExpected{%s}", strings.Join(tt.expected, ", ")) 411*9e94795aSAndroid Build Coastguard Worker 412*9e94795aSAndroid Build Coastguard Worker expectedConditions := toConditions(tt.expected) 413*9e94795aSAndroid Build Coastguard Worker expected := NewLicenseConditionSet(expectedConditions...) 414*9e94795aSAndroid Build Coastguard Worker 415*9e94795aSAndroid Build Coastguard Worker actualNames := actual.Names() 416*9e94795aSAndroid Build Coastguard Worker 417*9e94795aSAndroid Build Coastguard Worker t.Logf("actual license condition set: %#v %s", actual, actual.String()) 418*9e94795aSAndroid Build Coastguard Worker t.Logf("expected license condition set: %#v %s", expected, expected.String()) 419*9e94795aSAndroid Build Coastguard Worker 420*9e94795aSAndroid Build Coastguard Worker if actual != expected { 421*9e94795aSAndroid Build Coastguard Worker t.Errorf("checkExpected: got %#v, want %#v", actual, expected) 422*9e94795aSAndroid Build Coastguard Worker return false 423*9e94795aSAndroid Build Coastguard Worker } 424*9e94795aSAndroid Build Coastguard Worker 425*9e94795aSAndroid Build Coastguard Worker if len(actualNames) != len(tt.expected) { 426*9e94795aSAndroid Build Coastguard Worker t.Errorf("len(actual.Names()): got %d, want %d", len(actualNames), len(tt.expected)) 427*9e94795aSAndroid Build Coastguard Worker } else { 428*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actualNames); i++ { 429*9e94795aSAndroid Build Coastguard Worker if actualNames[i] != tt.expected[i] { 430*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.Names()[%d]: got %s, want %s", i, actualNames[i], tt.expected[i]) 431*9e94795aSAndroid Build Coastguard Worker break 432*9e94795aSAndroid Build Coastguard Worker } 433*9e94795aSAndroid Build Coastguard Worker } 434*9e94795aSAndroid Build Coastguard Worker } 435*9e94795aSAndroid Build Coastguard Worker 436*9e94795aSAndroid Build Coastguard Worker actualConditions := actual.AsList() 437*9e94795aSAndroid Build Coastguard Worker if len(actualConditions) != len(expectedConditions) { 438*9e94795aSAndroid Build Coastguard Worker t.Errorf("len(actual.AsList()): got %d, want %d", len(actualConditions), len(expectedConditions)) 439*9e94795aSAndroid Build Coastguard Worker } else { 440*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actualConditions); i++ { 441*9e94795aSAndroid Build Coastguard Worker if actualConditions[i] != expectedConditions[i] { 442*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.AsList()[%d]: got %s, want %s", 443*9e94795aSAndroid Build Coastguard Worker i, actualConditions[i].Name(), expectedConditions[i].Name()) 444*9e94795aSAndroid Build Coastguard Worker break 445*9e94795aSAndroid Build Coastguard Worker } 446*9e94795aSAndroid Build Coastguard Worker } 447*9e94795aSAndroid Build Coastguard Worker } 448*9e94795aSAndroid Build Coastguard Worker 449*9e94795aSAndroid Build Coastguard Worker if len(tt.expected) == 0 { 450*9e94795aSAndroid Build Coastguard Worker if !actual.IsEmpty() { 451*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.IsEmpty(): got false, want true") 452*9e94795aSAndroid Build Coastguard Worker } 453*9e94795aSAndroid Build Coastguard Worker if actual.HasAny(expectedConditions...) { 454*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAny(): got true, want false") 455*9e94795aSAndroid Build Coastguard Worker } 456*9e94795aSAndroid Build Coastguard Worker } else { 457*9e94795aSAndroid Build Coastguard Worker if actual.IsEmpty() { 458*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.IsEmpty(): got true, want false") 459*9e94795aSAndroid Build Coastguard Worker } 460*9e94795aSAndroid Build Coastguard Worker if !actual.HasAny(expectedConditions...) { 461*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAny(all expected): got false, want true") 462*9e94795aSAndroid Build Coastguard Worker } 463*9e94795aSAndroid Build Coastguard Worker } 464*9e94795aSAndroid Build Coastguard Worker if !actual.HasAll(expectedConditions...) { 465*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.Hasll(all expected): want true, got false") 466*9e94795aSAndroid Build Coastguard Worker } 467*9e94795aSAndroid Build Coastguard Worker for _, expectedCondition := range expectedConditions { 468*9e94795aSAndroid Build Coastguard Worker if !actual.HasAny(expectedCondition) { 469*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAny(%q): got false, want true", expectedCondition.Name()) 470*9e94795aSAndroid Build Coastguard Worker } 471*9e94795aSAndroid Build Coastguard Worker if !actual.HasAll(expectedCondition) { 472*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAll(%q): got false, want true", expectedCondition.Name()) 473*9e94795aSAndroid Build Coastguard Worker } 474*9e94795aSAndroid Build Coastguard Worker } 475*9e94795aSAndroid Build Coastguard Worker 476*9e94795aSAndroid Build Coastguard Worker notExpected := (AllLicenseConditions &^ expected) 477*9e94795aSAndroid Build Coastguard Worker notExpectedList := notExpected.AsList() 478*9e94795aSAndroid Build Coastguard Worker t.Logf("not expected license condition set: %#v %s", notExpected, notExpected.String()) 479*9e94795aSAndroid Build Coastguard Worker 480*9e94795aSAndroid Build Coastguard Worker if len(tt.expected) == 0 { 481*9e94795aSAndroid Build Coastguard Worker if actual.HasAny(append(expectedConditions, notExpectedList...)...) { 482*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAny(all conditions): want false, got true") 483*9e94795aSAndroid Build Coastguard Worker } 484*9e94795aSAndroid Build Coastguard Worker } else { 485*9e94795aSAndroid Build Coastguard Worker if !actual.HasAny(append(expectedConditions, notExpectedList...)...) { 486*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAny(all conditions): want true, got false") 487*9e94795aSAndroid Build Coastguard Worker } 488*9e94795aSAndroid Build Coastguard Worker } 489*9e94795aSAndroid Build Coastguard Worker if len(notExpectedList) == 0 { 490*9e94795aSAndroid Build Coastguard Worker if !actual.HasAll(append(expectedConditions, notExpectedList...)...) { 491*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAll(all conditions): want true, got false") 492*9e94795aSAndroid Build Coastguard Worker } 493*9e94795aSAndroid Build Coastguard Worker } else { 494*9e94795aSAndroid Build Coastguard Worker if actual.HasAll(append(expectedConditions, notExpectedList...)...) { 495*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAll(all conditions): want false, got true") 496*9e94795aSAndroid Build Coastguard Worker } 497*9e94795aSAndroid Build Coastguard Worker } 498*9e94795aSAndroid Build Coastguard Worker for _, unexpectedCondition := range notExpectedList { 499*9e94795aSAndroid Build Coastguard Worker if actual.HasAny(unexpectedCondition) { 500*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAny(%q): got true, want false", unexpectedCondition.Name()) 501*9e94795aSAndroid Build Coastguard Worker } 502*9e94795aSAndroid Build Coastguard Worker if actual.HasAll(unexpectedCondition) { 503*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.HasAll(%q): got true, want false", unexpectedCondition.Name()) 504*9e94795aSAndroid Build Coastguard Worker } 505*9e94795aSAndroid Build Coastguard Worker } 506*9e94795aSAndroid Build Coastguard Worker return true 507*9e94795aSAndroid Build Coastguard Worker } 508*9e94795aSAndroid Build Coastguard Worker 509*9e94795aSAndroid Build Coastguard Worker checkExpectedSet := func(actual LicenseConditionSet, t *testing.T) bool { 510*9e94795aSAndroid Build Coastguard Worker t.Logf("checkExpectedSet{%s}", strings.Join(tt.expected, ", ")) 511*9e94795aSAndroid Build Coastguard Worker 512*9e94795aSAndroid Build Coastguard Worker expectedConditions := toConditions(tt.expected) 513*9e94795aSAndroid Build Coastguard Worker expected := NewLicenseConditionSet(expectedConditions...) 514*9e94795aSAndroid Build Coastguard Worker 515*9e94795aSAndroid Build Coastguard Worker actualNames := actual.Names() 516*9e94795aSAndroid Build Coastguard Worker 517*9e94795aSAndroid Build Coastguard Worker t.Logf("actual license condition set: %#v %s", actual, actual.String()) 518*9e94795aSAndroid Build Coastguard Worker t.Logf("expected license condition set: %#v %s", expected, expected.String()) 519*9e94795aSAndroid Build Coastguard Worker 520*9e94795aSAndroid Build Coastguard Worker if actual != expected { 521*9e94795aSAndroid Build Coastguard Worker t.Errorf("checkExpectedSet: got %#v, want %#v", actual, expected) 522*9e94795aSAndroid Build Coastguard Worker return false 523*9e94795aSAndroid Build Coastguard Worker } 524*9e94795aSAndroid Build Coastguard Worker 525*9e94795aSAndroid Build Coastguard Worker if len(actualNames) != len(tt.expected) { 526*9e94795aSAndroid Build Coastguard Worker t.Errorf("len(actual.Names()): got %d, want %d", len(actualNames), len(tt.expected)) 527*9e94795aSAndroid Build Coastguard Worker } else { 528*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actualNames); i++ { 529*9e94795aSAndroid Build Coastguard Worker if actualNames[i] != tt.expected[i] { 530*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.Names()[%d]: got %s, want %s", i, actualNames[i], tt.expected[i]) 531*9e94795aSAndroid Build Coastguard Worker break 532*9e94795aSAndroid Build Coastguard Worker } 533*9e94795aSAndroid Build Coastguard Worker } 534*9e94795aSAndroid Build Coastguard Worker } 535*9e94795aSAndroid Build Coastguard Worker 536*9e94795aSAndroid Build Coastguard Worker actualConditions := actual.AsList() 537*9e94795aSAndroid Build Coastguard Worker if len(actualConditions) != len(expectedConditions) { 538*9e94795aSAndroid Build Coastguard Worker t.Errorf("len(actual.AsList()): got %d, want %d", len(actualConditions), len(expectedConditions)) 539*9e94795aSAndroid Build Coastguard Worker } else { 540*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actualConditions); i++ { 541*9e94795aSAndroid Build Coastguard Worker if actualConditions[i] != expectedConditions[i] { 542*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.AsList()[%d}: got %s, want %s", 543*9e94795aSAndroid Build Coastguard Worker i, actualConditions[i].Name(), expectedConditions[i].Name()) 544*9e94795aSAndroid Build Coastguard Worker break 545*9e94795aSAndroid Build Coastguard Worker } 546*9e94795aSAndroid Build Coastguard Worker } 547*9e94795aSAndroid Build Coastguard Worker } 548*9e94795aSAndroid Build Coastguard Worker 549*9e94795aSAndroid Build Coastguard Worker if len(tt.expected) == 0 { 550*9e94795aSAndroid Build Coastguard Worker if !actual.IsEmpty() { 551*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.IsEmpty(): got false, want true") 552*9e94795aSAndroid Build Coastguard Worker } 553*9e94795aSAndroid Build Coastguard Worker if actual.MatchesAnySet(expected) { 554*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.MatchesAnySet({}): got true, want false") 555*9e94795aSAndroid Build Coastguard Worker } 556*9e94795aSAndroid Build Coastguard Worker if actual.MatchesEverySet(expected, expected) { 557*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.MatchesEverySet({}, {}): want false, got true") 558*9e94795aSAndroid Build Coastguard Worker } 559*9e94795aSAndroid Build Coastguard Worker } else { 560*9e94795aSAndroid Build Coastguard Worker if actual.IsEmpty() { 561*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.IsEmpty(): got true, want false") 562*9e94795aSAndroid Build Coastguard Worker } 563*9e94795aSAndroid Build Coastguard Worker if !actual.MatchesAnySet(expected) { 564*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.MatchesAnySet({all expected}): want true, got false") 565*9e94795aSAndroid Build Coastguard Worker } 566*9e94795aSAndroid Build Coastguard Worker if !actual.MatchesEverySet(expected, expected) { 567*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.MatchesEverySet({all expected}, {all expected}): want true, got false") 568*9e94795aSAndroid Build Coastguard Worker } 569*9e94795aSAndroid Build Coastguard Worker } 570*9e94795aSAndroid Build Coastguard Worker 571*9e94795aSAndroid Build Coastguard Worker notExpected := (AllLicenseConditions &^ expected) 572*9e94795aSAndroid Build Coastguard Worker t.Logf("not expected license condition set: %#v %s", notExpected, notExpected.String()) 573*9e94795aSAndroid Build Coastguard Worker 574*9e94795aSAndroid Build Coastguard Worker if len(tt.expected) == 0 { 575*9e94795aSAndroid Build Coastguard Worker if actual.MatchesAnySet(expected, notExpected) { 576*9e94795aSAndroid Build Coastguard Worker t.Errorf("empty actual.MatchesAnySet({expected}, {not expected}): want false, got true") 577*9e94795aSAndroid Build Coastguard Worker } 578*9e94795aSAndroid Build Coastguard Worker } else { 579*9e94795aSAndroid Build Coastguard Worker if !actual.MatchesAnySet(expected, notExpected) { 580*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.MatchesAnySet({expected}, {not expected}): want true, got false") 581*9e94795aSAndroid Build Coastguard Worker } 582*9e94795aSAndroid Build Coastguard Worker } 583*9e94795aSAndroid Build Coastguard Worker if actual.MatchesAnySet(notExpected) { 584*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.MatchesAnySet({not expected}): want false, got true") 585*9e94795aSAndroid Build Coastguard Worker } 586*9e94795aSAndroid Build Coastguard Worker if actual.MatchesEverySet(notExpected) { 587*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.MatchesEverySet({not expected}): want false, got true") 588*9e94795aSAndroid Build Coastguard Worker } 589*9e94795aSAndroid Build Coastguard Worker if actual.MatchesEverySet(expected, notExpected) { 590*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.MatchesEverySet({expected}, {not expected}): want false, got true") 591*9e94795aSAndroid Build Coastguard Worker } 592*9e94795aSAndroid Build Coastguard Worker 593*9e94795aSAndroid Build Coastguard Worker if !actual.Difference(expected).IsEmpty() { 594*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual.Difference({expected}).IsEmpty(): want true, got false") 595*9e94795aSAndroid Build Coastguard Worker } 596*9e94795aSAndroid Build Coastguard Worker if expected != actual.Intersection(expected) { 597*9e94795aSAndroid Build Coastguard Worker t.Errorf("expected == actual.Intersection({expected}): want true, got false (%#v != %#v)", expected, actual.Intersection(expected)) 598*9e94795aSAndroid Build Coastguard Worker } 599*9e94795aSAndroid Build Coastguard Worker if actual != actual.Intersection(expected) { 600*9e94795aSAndroid Build Coastguard Worker t.Errorf("actual == actual.Intersection({expected}): want true, got false (%#v != %#v)", actual, actual.Intersection(expected)) 601*9e94795aSAndroid Build Coastguard Worker } 602*9e94795aSAndroid Build Coastguard Worker return true 603*9e94795aSAndroid Build Coastguard Worker } 604*9e94795aSAndroid Build Coastguard Worker 605*9e94795aSAndroid Build Coastguard Worker t.Run(tt.name, func(t *testing.T) { 606*9e94795aSAndroid Build Coastguard Worker cs := populate() 607*9e94795aSAndroid Build Coastguard Worker if checkExpected(cs, t) { 608*9e94795aSAndroid Build Coastguard Worker checkMatching(cs, t) 609*9e94795aSAndroid Build Coastguard Worker } 610*9e94795aSAndroid Build Coastguard Worker if checkExpectedSet(cs, t) { 611*9e94795aSAndroid Build Coastguard Worker checkMatchingSet(cs, t) 612*9e94795aSAndroid Build Coastguard Worker } 613*9e94795aSAndroid Build Coastguard Worker }) 614*9e94795aSAndroid Build Coastguard Worker 615*9e94795aSAndroid Build Coastguard Worker t.Run(tt.name+"_sets", func(t *testing.T) { 616*9e94795aSAndroid Build Coastguard Worker cs := populateSet() 617*9e94795aSAndroid Build Coastguard Worker if checkExpected(cs, t) { 618*9e94795aSAndroid Build Coastguard Worker checkMatching(cs, t) 619*9e94795aSAndroid Build Coastguard Worker } 620*9e94795aSAndroid Build Coastguard Worker if checkExpectedSet(cs, t) { 621*9e94795aSAndroid Build Coastguard Worker checkMatchingSet(cs, t) 622*9e94795aSAndroid Build Coastguard Worker } 623*9e94795aSAndroid Build Coastguard Worker }) 624*9e94795aSAndroid Build Coastguard Worker 625*9e94795aSAndroid Build Coastguard Worker t.Run(tt.name+"_plusset", func(t *testing.T) { 626*9e94795aSAndroid Build Coastguard Worker cs := populatePlusSet() 627*9e94795aSAndroid Build Coastguard Worker if checkExpected(cs, t) { 628*9e94795aSAndroid Build Coastguard Worker checkMatching(cs, t) 629*9e94795aSAndroid Build Coastguard Worker } 630*9e94795aSAndroid Build Coastguard Worker if checkExpectedSet(cs, t) { 631*9e94795aSAndroid Build Coastguard Worker checkMatchingSet(cs, t) 632*9e94795aSAndroid Build Coastguard Worker } 633*9e94795aSAndroid Build Coastguard Worker }) 634*9e94795aSAndroid Build Coastguard Worker 635*9e94795aSAndroid Build Coastguard Worker t.Run(tt.name+"_minusset", func(t *testing.T) { 636*9e94795aSAndroid Build Coastguard Worker cs := populateMinusSet() 637*9e94795aSAndroid Build Coastguard Worker if checkExpected(cs, t) { 638*9e94795aSAndroid Build Coastguard Worker checkMatching(cs, t) 639*9e94795aSAndroid Build Coastguard Worker } 640*9e94795aSAndroid Build Coastguard Worker if checkExpectedSet(cs, t) { 641*9e94795aSAndroid Build Coastguard Worker checkMatchingSet(cs, t) 642*9e94795aSAndroid Build Coastguard Worker } 643*9e94795aSAndroid Build Coastguard Worker }) 644*9e94795aSAndroid Build Coastguard Worker } 645*9e94795aSAndroid Build Coastguard Worker} 646