1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage idsearcher 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "testing" 7*ba677afaSXin Li) 8*ba677afaSXin Li 9*ba677afaSXin Li// ===== 2.1 Searcher top-level function tests ===== 10*ba677afaSXin Lifunc Test2_1SearcherCanFillInIDs(t *testing.T) { 11*ba677afaSXin Li packageName := "project2" 12*ba677afaSXin Li dirRoot := "../testdata/project2/" 13*ba677afaSXin Li config := &Config2_1{ 14*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 15*ba677afaSXin Li } 16*ba677afaSXin Li 17*ba677afaSXin Li doc, err := BuildIDsDocument2_1(packageName, dirRoot, config) 18*ba677afaSXin Li if err != nil { 19*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 20*ba677afaSXin Li } 21*ba677afaSXin Li if doc == nil { 22*ba677afaSXin Li t.Fatalf("expected non-nil Document, got nil") 23*ba677afaSXin Li } 24*ba677afaSXin Li 25*ba677afaSXin Li // not checking all contents of doc, see builder tests for those 26*ba677afaSXin Li 27*ba677afaSXin Li // get the package and its files, checking size of each 28*ba677afaSXin Li if doc.Packages == nil { 29*ba677afaSXin Li t.Fatalf("expected non-nil Packages, got nil") 30*ba677afaSXin Li } 31*ba677afaSXin Li if len(doc.Packages) != 1 { 32*ba677afaSXin Li t.Fatalf("expected Packages len to be 1, got %d", len(doc.Packages)) 33*ba677afaSXin Li } 34*ba677afaSXin Li pkg := doc.Packages[0] 35*ba677afaSXin Li if pkg == nil { 36*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 37*ba677afaSXin Li } 38*ba677afaSXin Li 39*ba677afaSXin Li if pkg.Files == nil { 40*ba677afaSXin Li t.Fatalf("expected non-nil Files, got nil") 41*ba677afaSXin Li } 42*ba677afaSXin Li if len(pkg.Files) != 6 { 43*ba677afaSXin Li t.Fatalf("expected Files len to be 6, got %d", len(pkg.Files)) 44*ba677afaSXin Li } 45*ba677afaSXin Li 46*ba677afaSXin Li fileInFolder := pkg.Files[0] 47*ba677afaSXin Li if fileInFolder.LicenseInfoInFiles == nil { 48*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 49*ba677afaSXin Li } 50*ba677afaSXin Li if len(fileInFolder.LicenseInfoInFiles) != 1 { 51*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileInFolder.LicenseInfoInFiles)) 52*ba677afaSXin Li } 53*ba677afaSXin Li if fileInFolder.LicenseInfoInFiles[0] != "MIT" { 54*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseInfoInFiles[0]) 55*ba677afaSXin Li } 56*ba677afaSXin Li if fileInFolder.LicenseConcluded != "MIT" { 57*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseConcluded) 58*ba677afaSXin Li } 59*ba677afaSXin Li 60*ba677afaSXin Li fileTrailingComment := pkg.Files[1] 61*ba677afaSXin Li if fileTrailingComment.LicenseInfoInFiles == nil { 62*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 63*ba677afaSXin Li } 64*ba677afaSXin Li if len(fileTrailingComment.LicenseInfoInFiles) != 1 { 65*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileTrailingComment.LicenseInfoInFiles)) 66*ba677afaSXin Li } 67*ba677afaSXin Li if fileTrailingComment.LicenseInfoInFiles[0] != "GPL-2.0-or-later" { 68*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseInfoInFiles[0]) 69*ba677afaSXin Li } 70*ba677afaSXin Li if fileTrailingComment.LicenseConcluded != "GPL-2.0-or-later" { 71*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseConcluded) 72*ba677afaSXin Li } 73*ba677afaSXin Li 74*ba677afaSXin Li fileHasDuplicateID := pkg.Files[2] 75*ba677afaSXin Li if fileHasDuplicateID.LicenseInfoInFiles == nil { 76*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 77*ba677afaSXin Li } 78*ba677afaSXin Li if len(fileHasDuplicateID.LicenseInfoInFiles) != 1 { 79*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileHasDuplicateID.LicenseInfoInFiles)) 80*ba677afaSXin Li } 81*ba677afaSXin Li if fileHasDuplicateID.LicenseInfoInFiles[0] != "MIT" { 82*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseInfoInFiles[0]) 83*ba677afaSXin Li } 84*ba677afaSXin Li if fileHasDuplicateID.LicenseConcluded != "MIT" { 85*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseConcluded) 86*ba677afaSXin Li } 87*ba677afaSXin Li 88*ba677afaSXin Li fileHasID := pkg.Files[3] 89*ba677afaSXin Li if fileHasID.LicenseInfoInFiles == nil { 90*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 91*ba677afaSXin Li } 92*ba677afaSXin Li if len(fileHasID.LicenseInfoInFiles) != 2 { 93*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 2, got %d", len(fileHasID.LicenseInfoInFiles)) 94*ba677afaSXin Li } 95*ba677afaSXin Li if fileHasID.LicenseInfoInFiles[0] != "Apache-2.0" { 96*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0", fileHasID.LicenseInfoInFiles[0]) 97*ba677afaSXin Li } 98*ba677afaSXin Li if fileHasID.LicenseInfoInFiles[1] != "GPL-2.0-or-later" { 99*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileHasID.LicenseInfoInFiles[1]) 100*ba677afaSXin Li } 101*ba677afaSXin Li if fileHasID.LicenseConcluded != "Apache-2.0 OR GPL-2.0-or-later" { 102*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0 OR GPL-2.0-or-later", fileHasID.LicenseConcluded) 103*ba677afaSXin Li } 104*ba677afaSXin Li 105*ba677afaSXin Li fileMultipleIDs := pkg.Files[4] 106*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles == nil { 107*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 108*ba677afaSXin Li } 109*ba677afaSXin Li if len(fileMultipleIDs.LicenseInfoInFiles) != 5 { 110*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 5, got %d", len(fileMultipleIDs.LicenseInfoInFiles)) 111*ba677afaSXin Li } 112*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[0] != "BSD-2-Clause" { 113*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-2-Clause", fileMultipleIDs.LicenseInfoInFiles[0]) 114*ba677afaSXin Li } 115*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[1] != "BSD-3-Clause" { 116*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", fileMultipleIDs.LicenseInfoInFiles[1]) 117*ba677afaSXin Li } 118*ba677afaSXin Li // here, DO NOT keep the + 119*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[2] != "EPL-1.0" { 120*ba677afaSXin Li t.Errorf("expected %v, got %v", "EPL-1.0", fileMultipleIDs.LicenseInfoInFiles[2]) 121*ba677afaSXin Li } 122*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[3] != "ISC" { 123*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", fileMultipleIDs.LicenseInfoInFiles[3]) 124*ba677afaSXin Li } 125*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[4] != "MIT" { 126*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileMultipleIDs.LicenseInfoInFiles[4]) 127*ba677afaSXin Li } 128*ba677afaSXin Li if fileMultipleIDs.LicenseConcluded != "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+" { 129*ba677afaSXin Li t.Errorf("expected %v, got %v", "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+", fileMultipleIDs.LicenseConcluded) 130*ba677afaSXin Li } 131*ba677afaSXin Li 132*ba677afaSXin Li fileNoID := pkg.Files[5] 133*ba677afaSXin Li if fileNoID.LicenseInfoInFiles == nil { 134*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 135*ba677afaSXin Li } 136*ba677afaSXin Li if len(fileNoID.LicenseInfoInFiles) != 1 { 137*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileNoID.LicenseInfoInFiles)) 138*ba677afaSXin Li } 139*ba677afaSXin Li if fileNoID.LicenseInfoInFiles[0] != "NOASSERTION" { 140*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseInfoInFiles[0]) 141*ba677afaSXin Li } 142*ba677afaSXin Li if fileNoID.LicenseConcluded != "NOASSERTION" { 143*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseConcluded) 144*ba677afaSXin Li } 145*ba677afaSXin Li 146*ba677afaSXin Li // and finally, the package should have all of these licenses 147*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles == nil { 148*ba677afaSXin Li t.Fatalf("expected non-nil PackageLicenseInfoFromFiles, got nil") 149*ba677afaSXin Li } 150*ba677afaSXin Li if len(pkg.PackageLicenseInfoFromFiles) != 7 { 151*ba677afaSXin Li t.Fatalf("expected PackageLicenseInfoFromFiles len to be 7, got %d", len(pkg.PackageLicenseInfoFromFiles)) 152*ba677afaSXin Li } 153*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[0] != "Apache-2.0" { 154*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0", pkg.PackageLicenseInfoFromFiles[0]) 155*ba677afaSXin Li } 156*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[1] != "BSD-2-Clause" { 157*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-2-Clause", pkg.PackageLicenseInfoFromFiles[1]) 158*ba677afaSXin Li } 159*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[2] != "BSD-3-Clause" { 160*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", pkg.PackageLicenseInfoFromFiles[2]) 161*ba677afaSXin Li } 162*ba677afaSXin Li // here, DO NOT keep the + 163*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[3] != "EPL-1.0" { 164*ba677afaSXin Li t.Errorf("expected %v, got %v", "EPL-1.0", pkg.PackageLicenseInfoFromFiles[3]) 165*ba677afaSXin Li } 166*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[4] != "GPL-2.0-or-later" { 167*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", pkg.PackageLicenseInfoFromFiles[4]) 168*ba677afaSXin Li } 169*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[5] != "ISC" { 170*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", pkg.PackageLicenseInfoFromFiles[5]) 171*ba677afaSXin Li } 172*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[6] != "MIT" { 173*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", pkg.PackageLicenseInfoFromFiles[6]) 174*ba677afaSXin Li } 175*ba677afaSXin Li 176*ba677afaSXin Li} 177*ba677afaSXin Li 178*ba677afaSXin Lifunc Test2_1SearcherCanFillInIDsAndIgnorePaths(t *testing.T) { 179*ba677afaSXin Li packageName := "project3" 180*ba677afaSXin Li dirRoot := "../testdata/project3/" 181*ba677afaSXin Li config := &Config2_1{ 182*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 183*ba677afaSXin Li BuilderPathsIgnored: []string{ 184*ba677afaSXin Li "**/ignoredir/", 185*ba677afaSXin Li "/excludedir/", 186*ba677afaSXin Li "**/ignorefile.txt", 187*ba677afaSXin Li "/alsoEXCLUDEthis.txt", 188*ba677afaSXin Li }, 189*ba677afaSXin Li SearcherPathsIgnored: []string{ 190*ba677afaSXin Li "**/dontscan.txt", 191*ba677afaSXin Li }, 192*ba677afaSXin Li } 193*ba677afaSXin Li 194*ba677afaSXin Li doc, err := BuildIDsDocument2_1(packageName, dirRoot, config) 195*ba677afaSXin Li if err != nil { 196*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 197*ba677afaSXin Li } 198*ba677afaSXin Li if doc == nil { 199*ba677afaSXin Li t.Fatalf("expected non-nil Document, got nil") 200*ba677afaSXin Li } 201*ba677afaSXin Li 202*ba677afaSXin Li // not checking all contents of doc, see builder tests for those 203*ba677afaSXin Li 204*ba677afaSXin Li // get the package and its files, checking licenses for each, and 205*ba677afaSXin Li // confirming NOASSERTION for those that are skipped 206*ba677afaSXin Li pkg := doc.Packages[0] 207*ba677afaSXin Li if pkg == nil { 208*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 209*ba677afaSXin Li } 210*ba677afaSXin Li if len(pkg.Files) != 5 { 211*ba677afaSXin Li t.Fatalf("expected len %d, got %d", 5, len(pkg.Files)) 212*ba677afaSXin Li } 213*ba677afaSXin Li 214*ba677afaSXin Li f := pkg.Files[0] 215*ba677afaSXin Li if f.FileName != "./dontscan.txt" { 216*ba677afaSXin Li t.Errorf("expected %v, got %v", "./dontscan.txt", f.FileName) 217*ba677afaSXin Li } 218*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 219*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 220*ba677afaSXin Li } 221*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 222*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 223*ba677afaSXin Li } 224*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 225*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 226*ba677afaSXin Li } 227*ba677afaSXin Li 228*ba677afaSXin Li f = pkg.Files[1] 229*ba677afaSXin Li if f.FileName != "./keep/keep.txt" { 230*ba677afaSXin Li t.Errorf("expected %v, got %v", "./keep/keep.txt", f.FileName) 231*ba677afaSXin Li } 232*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 233*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 234*ba677afaSXin Li } 235*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "MIT" { 236*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) 237*ba677afaSXin Li } 238*ba677afaSXin Li if f.LicenseConcluded != "MIT" { 239*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) 240*ba677afaSXin Li } 241*ba677afaSXin Li 242*ba677afaSXin Li f = pkg.Files[2] 243*ba677afaSXin Li if f.FileName != "./keep.txt" { 244*ba677afaSXin Li t.Errorf("expected %v, got %v", "./keep.txt", f.FileName) 245*ba677afaSXin Li } 246*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 247*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 248*ba677afaSXin Li } 249*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 250*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 251*ba677afaSXin Li } 252*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 253*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 254*ba677afaSXin Li } 255*ba677afaSXin Li 256*ba677afaSXin Li f = pkg.Files[3] 257*ba677afaSXin Li if f.FileName != "./subdir/keep/dontscan.txt" { 258*ba677afaSXin Li t.Errorf("expected %v, got %v", "./subdir/keep/dontscan.txt", f.FileName) 259*ba677afaSXin Li } 260*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 261*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 262*ba677afaSXin Li } 263*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 264*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 265*ba677afaSXin Li } 266*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 267*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 268*ba677afaSXin Li } 269*ba677afaSXin Li 270*ba677afaSXin Li f = pkg.Files[4] 271*ba677afaSXin Li if f.FileName != "./subdir/keep/keep.txt" { 272*ba677afaSXin Li t.Errorf("expected %v, got %v", "./subdir/keep/keep.txt", f.FileName) 273*ba677afaSXin Li } 274*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 275*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 276*ba677afaSXin Li } 277*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "MIT" { 278*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) 279*ba677afaSXin Li } 280*ba677afaSXin Li if f.LicenseConcluded != "MIT" { 281*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) 282*ba677afaSXin Li } 283*ba677afaSXin Li} 284*ba677afaSXin Li 285*ba677afaSXin Lifunc Test2_1SearcherFailsWithInvalidPath(t *testing.T) { 286*ba677afaSXin Li packageName := "project2" 287*ba677afaSXin Li dirRoot := "./oops/invalid" 288*ba677afaSXin Li config := &Config2_1{ 289*ba677afaSXin Li NamespacePrefix: "whatever", 290*ba677afaSXin Li } 291*ba677afaSXin Li 292*ba677afaSXin Li _, err := BuildIDsDocument2_1(packageName, dirRoot, config) 293*ba677afaSXin Li if err == nil { 294*ba677afaSXin Li t.Fatalf("expected non-nil error, got nil") 295*ba677afaSXin Li } 296*ba677afaSXin Li} 297*ba677afaSXin Li 298*ba677afaSXin Li// ===== 2.2 Searcher top-level function tests ===== 299*ba677afaSXin Lifunc Test2_2SearcherCanFillInIDs(t *testing.T) { 300*ba677afaSXin Li packageName := "project2" 301*ba677afaSXin Li dirRoot := "../testdata/project2/" 302*ba677afaSXin Li config := &Config2_2{ 303*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 304*ba677afaSXin Li } 305*ba677afaSXin Li 306*ba677afaSXin Li doc, err := BuildIDsDocument2_2(packageName, dirRoot, config) 307*ba677afaSXin Li if err != nil { 308*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 309*ba677afaSXin Li } 310*ba677afaSXin Li if doc == nil { 311*ba677afaSXin Li t.Fatalf("expected non-nil Document, got nil") 312*ba677afaSXin Li } 313*ba677afaSXin Li 314*ba677afaSXin Li // not checking all contents of doc, see builder tests for those 315*ba677afaSXin Li 316*ba677afaSXin Li // get the package and its files, checking size of each 317*ba677afaSXin Li if doc.Packages == nil { 318*ba677afaSXin Li t.Fatalf("expected non-nil Packages, got nil") 319*ba677afaSXin Li } 320*ba677afaSXin Li if len(doc.Packages) != 1 { 321*ba677afaSXin Li t.Fatalf("expected Packages len to be 1, got %d", len(doc.Packages)) 322*ba677afaSXin Li } 323*ba677afaSXin Li pkg := doc.Packages[0] 324*ba677afaSXin Li if pkg == nil { 325*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 326*ba677afaSXin Li } 327*ba677afaSXin Li 328*ba677afaSXin Li if pkg.Files == nil { 329*ba677afaSXin Li t.Fatalf("expected non-nil Files, got nil") 330*ba677afaSXin Li } 331*ba677afaSXin Li if len(pkg.Files) != 6 { 332*ba677afaSXin Li t.Fatalf("expected Files len to be 6, got %d", len(pkg.Files)) 333*ba677afaSXin Li } 334*ba677afaSXin Li 335*ba677afaSXin Li fileInFolder := pkg.Files[0] 336*ba677afaSXin Li if fileInFolder.LicenseInfoInFiles == nil { 337*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 338*ba677afaSXin Li } 339*ba677afaSXin Li if len(fileInFolder.LicenseInfoInFiles) != 1 { 340*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileInFolder.LicenseInfoInFiles)) 341*ba677afaSXin Li } 342*ba677afaSXin Li if fileInFolder.LicenseInfoInFiles[0] != "MIT" { 343*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseInfoInFiles[0]) 344*ba677afaSXin Li } 345*ba677afaSXin Li if fileInFolder.LicenseConcluded != "MIT" { 346*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseConcluded) 347*ba677afaSXin Li } 348*ba677afaSXin Li 349*ba677afaSXin Li fileTrailingComment := pkg.Files[1] 350*ba677afaSXin Li if fileTrailingComment.LicenseInfoInFiles == nil { 351*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 352*ba677afaSXin Li } 353*ba677afaSXin Li if len(fileTrailingComment.LicenseInfoInFiles) != 1 { 354*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileTrailingComment.LicenseInfoInFiles)) 355*ba677afaSXin Li } 356*ba677afaSXin Li if fileTrailingComment.LicenseInfoInFiles[0] != "GPL-2.0-or-later" { 357*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseInfoInFiles[0]) 358*ba677afaSXin Li } 359*ba677afaSXin Li if fileTrailingComment.LicenseConcluded != "GPL-2.0-or-later" { 360*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseConcluded) 361*ba677afaSXin Li } 362*ba677afaSXin Li 363*ba677afaSXin Li fileHasDuplicateID := pkg.Files[2] 364*ba677afaSXin Li if fileHasDuplicateID.LicenseInfoInFiles == nil { 365*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 366*ba677afaSXin Li } 367*ba677afaSXin Li if len(fileHasDuplicateID.LicenseInfoInFiles) != 1 { 368*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileHasDuplicateID.LicenseInfoInFiles)) 369*ba677afaSXin Li } 370*ba677afaSXin Li if fileHasDuplicateID.LicenseInfoInFiles[0] != "MIT" { 371*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseInfoInFiles[0]) 372*ba677afaSXin Li } 373*ba677afaSXin Li if fileHasDuplicateID.LicenseConcluded != "MIT" { 374*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseConcluded) 375*ba677afaSXin Li } 376*ba677afaSXin Li 377*ba677afaSXin Li fileHasID := pkg.Files[3] 378*ba677afaSXin Li if fileHasID.LicenseInfoInFiles == nil { 379*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 380*ba677afaSXin Li } 381*ba677afaSXin Li if len(fileHasID.LicenseInfoInFiles) != 2 { 382*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 2, got %d", len(fileHasID.LicenseInfoInFiles)) 383*ba677afaSXin Li } 384*ba677afaSXin Li if fileHasID.LicenseInfoInFiles[0] != "Apache-2.0" { 385*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0", fileHasID.LicenseInfoInFiles[0]) 386*ba677afaSXin Li } 387*ba677afaSXin Li if fileHasID.LicenseInfoInFiles[1] != "GPL-2.0-or-later" { 388*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileHasID.LicenseInfoInFiles[1]) 389*ba677afaSXin Li } 390*ba677afaSXin Li if fileHasID.LicenseConcluded != "Apache-2.0 OR GPL-2.0-or-later" { 391*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0 OR GPL-2.0-or-later", fileHasID.LicenseConcluded) 392*ba677afaSXin Li } 393*ba677afaSXin Li 394*ba677afaSXin Li fileMultipleIDs := pkg.Files[4] 395*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles == nil { 396*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 397*ba677afaSXin Li } 398*ba677afaSXin Li if len(fileMultipleIDs.LicenseInfoInFiles) != 5 { 399*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 5, got %d", len(fileMultipleIDs.LicenseInfoInFiles)) 400*ba677afaSXin Li } 401*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[0] != "BSD-2-Clause" { 402*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-2-Clause", fileMultipleIDs.LicenseInfoInFiles[0]) 403*ba677afaSXin Li } 404*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[1] != "BSD-3-Clause" { 405*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", fileMultipleIDs.LicenseInfoInFiles[1]) 406*ba677afaSXin Li } 407*ba677afaSXin Li // here, DO NOT keep the + 408*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[2] != "EPL-1.0" { 409*ba677afaSXin Li t.Errorf("expected %v, got %v", "EPL-1.0", fileMultipleIDs.LicenseInfoInFiles[2]) 410*ba677afaSXin Li } 411*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[3] != "ISC" { 412*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", fileMultipleIDs.LicenseInfoInFiles[3]) 413*ba677afaSXin Li } 414*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[4] != "MIT" { 415*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileMultipleIDs.LicenseInfoInFiles[4]) 416*ba677afaSXin Li } 417*ba677afaSXin Li if fileMultipleIDs.LicenseConcluded != "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+" { 418*ba677afaSXin Li t.Errorf("expected %v, got %v", "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+", fileMultipleIDs.LicenseConcluded) 419*ba677afaSXin Li } 420*ba677afaSXin Li 421*ba677afaSXin Li fileNoID := pkg.Files[5] 422*ba677afaSXin Li if fileNoID.LicenseInfoInFiles == nil { 423*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 424*ba677afaSXin Li } 425*ba677afaSXin Li if len(fileNoID.LicenseInfoInFiles) != 1 { 426*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileNoID.LicenseInfoInFiles)) 427*ba677afaSXin Li } 428*ba677afaSXin Li if fileNoID.LicenseInfoInFiles[0] != "NOASSERTION" { 429*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseInfoInFiles[0]) 430*ba677afaSXin Li } 431*ba677afaSXin Li if fileNoID.LicenseConcluded != "NOASSERTION" { 432*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseConcluded) 433*ba677afaSXin Li } 434*ba677afaSXin Li 435*ba677afaSXin Li // and finally, the package should have all of these licenses 436*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles == nil { 437*ba677afaSXin Li t.Fatalf("expected non-nil PackageLicenseInfoFromFiles, got nil") 438*ba677afaSXin Li } 439*ba677afaSXin Li if len(pkg.PackageLicenseInfoFromFiles) != 7 { 440*ba677afaSXin Li t.Fatalf("expected PackageLicenseInfoFromFiles len to be 7, got %d", len(pkg.PackageLicenseInfoFromFiles)) 441*ba677afaSXin Li } 442*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[0] != "Apache-2.0" { 443*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0", pkg.PackageLicenseInfoFromFiles[0]) 444*ba677afaSXin Li } 445*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[1] != "BSD-2-Clause" { 446*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-2-Clause", pkg.PackageLicenseInfoFromFiles[1]) 447*ba677afaSXin Li } 448*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[2] != "BSD-3-Clause" { 449*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", pkg.PackageLicenseInfoFromFiles[2]) 450*ba677afaSXin Li } 451*ba677afaSXin Li // here, DO NOT keep the + 452*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[3] != "EPL-1.0" { 453*ba677afaSXin Li t.Errorf("expected %v, got %v", "EPL-1.0", pkg.PackageLicenseInfoFromFiles[3]) 454*ba677afaSXin Li } 455*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[4] != "GPL-2.0-or-later" { 456*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", pkg.PackageLicenseInfoFromFiles[4]) 457*ba677afaSXin Li } 458*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[5] != "ISC" { 459*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", pkg.PackageLicenseInfoFromFiles[5]) 460*ba677afaSXin Li } 461*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[6] != "MIT" { 462*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", pkg.PackageLicenseInfoFromFiles[6]) 463*ba677afaSXin Li } 464*ba677afaSXin Li 465*ba677afaSXin Li} 466*ba677afaSXin Li 467*ba677afaSXin Lifunc Test2_2SearcherCanFillInIDsAndIgnorePaths(t *testing.T) { 468*ba677afaSXin Li packageName := "project3" 469*ba677afaSXin Li dirRoot := "../testdata/project3/" 470*ba677afaSXin Li config := &Config2_2{ 471*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 472*ba677afaSXin Li BuilderPathsIgnored: []string{ 473*ba677afaSXin Li "**/ignoredir/", 474*ba677afaSXin Li "/excludedir/", 475*ba677afaSXin Li "**/ignorefile.txt", 476*ba677afaSXin Li "/alsoEXCLUDEthis.txt", 477*ba677afaSXin Li }, 478*ba677afaSXin Li SearcherPathsIgnored: []string{ 479*ba677afaSXin Li "**/dontscan.txt", 480*ba677afaSXin Li }, 481*ba677afaSXin Li } 482*ba677afaSXin Li 483*ba677afaSXin Li doc, err := BuildIDsDocument2_2(packageName, dirRoot, config) 484*ba677afaSXin Li if err != nil { 485*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 486*ba677afaSXin Li } 487*ba677afaSXin Li if doc == nil { 488*ba677afaSXin Li t.Fatalf("expected non-nil Document, got nil") 489*ba677afaSXin Li } 490*ba677afaSXin Li 491*ba677afaSXin Li // not checking all contents of doc, see builder tests for those 492*ba677afaSXin Li 493*ba677afaSXin Li // get the package and its files, checking licenses for each, and 494*ba677afaSXin Li // confirming NOASSERTION for those that are skipped 495*ba677afaSXin Li pkg := doc.Packages[0] 496*ba677afaSXin Li if pkg == nil { 497*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 498*ba677afaSXin Li } 499*ba677afaSXin Li if len(pkg.Files) != 5 { 500*ba677afaSXin Li t.Fatalf("expected len %d, got %d", 5, len(pkg.Files)) 501*ba677afaSXin Li } 502*ba677afaSXin Li 503*ba677afaSXin Li f := pkg.Files[0] 504*ba677afaSXin Li if f.FileName != "./dontscan.txt" { 505*ba677afaSXin Li t.Errorf("expected %v, got %v", "./dontscan.txt", f.FileName) 506*ba677afaSXin Li } 507*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 508*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 509*ba677afaSXin Li } 510*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 511*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 512*ba677afaSXin Li } 513*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 514*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 515*ba677afaSXin Li } 516*ba677afaSXin Li 517*ba677afaSXin Li f = pkg.Files[1] 518*ba677afaSXin Li if f.FileName != "./keep/keep.txt" { 519*ba677afaSXin Li t.Errorf("expected %v, got %v", "./keep/keep.txt", f.FileName) 520*ba677afaSXin Li } 521*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 522*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 523*ba677afaSXin Li } 524*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "MIT" { 525*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) 526*ba677afaSXin Li } 527*ba677afaSXin Li if f.LicenseConcluded != "MIT" { 528*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) 529*ba677afaSXin Li } 530*ba677afaSXin Li 531*ba677afaSXin Li f = pkg.Files[2] 532*ba677afaSXin Li if f.FileName != "./keep.txt" { 533*ba677afaSXin Li t.Errorf("expected %v, got %v", "./keep.txt", f.FileName) 534*ba677afaSXin Li } 535*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 536*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 537*ba677afaSXin Li } 538*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 539*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 540*ba677afaSXin Li } 541*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 542*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 543*ba677afaSXin Li } 544*ba677afaSXin Li 545*ba677afaSXin Li f = pkg.Files[3] 546*ba677afaSXin Li if f.FileName != "./subdir/keep/dontscan.txt" { 547*ba677afaSXin Li t.Errorf("expected %v, got %v", "./subdir/keep/dontscan.txt", f.FileName) 548*ba677afaSXin Li } 549*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 550*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 551*ba677afaSXin Li } 552*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 553*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 554*ba677afaSXin Li } 555*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 556*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 557*ba677afaSXin Li } 558*ba677afaSXin Li 559*ba677afaSXin Li f = pkg.Files[4] 560*ba677afaSXin Li if f.FileName != "./subdir/keep/keep.txt" { 561*ba677afaSXin Li t.Errorf("expected %v, got %v", "./subdir/keep/keep.txt", f.FileName) 562*ba677afaSXin Li } 563*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 564*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 565*ba677afaSXin Li } 566*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "MIT" { 567*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) 568*ba677afaSXin Li } 569*ba677afaSXin Li if f.LicenseConcluded != "MIT" { 570*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) 571*ba677afaSXin Li } 572*ba677afaSXin Li} 573*ba677afaSXin Li 574*ba677afaSXin Lifunc Test2_2SearcherFailsWithInvalidPath(t *testing.T) { 575*ba677afaSXin Li packageName := "project2" 576*ba677afaSXin Li dirRoot := "./oops/invalid" 577*ba677afaSXin Li config := &Config2_2{ 578*ba677afaSXin Li NamespacePrefix: "whatever", 579*ba677afaSXin Li } 580*ba677afaSXin Li 581*ba677afaSXin Li _, err := BuildIDsDocument2_2(packageName, dirRoot, config) 582*ba677afaSXin Li if err == nil { 583*ba677afaSXin Li t.Fatalf("expected non-nil error, got nil") 584*ba677afaSXin Li } 585*ba677afaSXin Li} 586*ba677afaSXin Li 587*ba677afaSXin Li// ===== 2.3 Searcher top-level function tests ===== 588*ba677afaSXin Lifunc Test2_3SearcherCanFillInIDs(t *testing.T) { 589*ba677afaSXin Li packageName := "project2" 590*ba677afaSXin Li dirRoot := "../testdata/project2/" 591*ba677afaSXin Li config := &Config2_3{ 592*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 593*ba677afaSXin Li } 594*ba677afaSXin Li 595*ba677afaSXin Li doc, err := BuildIDsDocument2_3(packageName, dirRoot, config) 596*ba677afaSXin Li if err != nil { 597*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 598*ba677afaSXin Li } 599*ba677afaSXin Li if doc == nil { 600*ba677afaSXin Li t.Fatalf("expected non-nil Document, got nil") 601*ba677afaSXin Li } 602*ba677afaSXin Li 603*ba677afaSXin Li // not checking all contents of doc, see builder tests for those 604*ba677afaSXin Li 605*ba677afaSXin Li // get the package and its files, checking size of each 606*ba677afaSXin Li if doc.Packages == nil { 607*ba677afaSXin Li t.Fatalf("expected non-nil Packages, got nil") 608*ba677afaSXin Li } 609*ba677afaSXin Li if len(doc.Packages) != 1 { 610*ba677afaSXin Li t.Fatalf("expected Packages len to be 1, got %d", len(doc.Packages)) 611*ba677afaSXin Li } 612*ba677afaSXin Li pkg := doc.Packages[0] 613*ba677afaSXin Li if pkg == nil { 614*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 615*ba677afaSXin Li } 616*ba677afaSXin Li 617*ba677afaSXin Li if pkg.Files == nil { 618*ba677afaSXin Li t.Fatalf("expected non-nil Files, got nil") 619*ba677afaSXin Li } 620*ba677afaSXin Li if len(pkg.Files) != 6 { 621*ba677afaSXin Li t.Fatalf("expected Files len to be 6, got %d", len(pkg.Files)) 622*ba677afaSXin Li } 623*ba677afaSXin Li 624*ba677afaSXin Li fileInFolder := pkg.Files[0] 625*ba677afaSXin Li if fileInFolder.LicenseInfoInFiles == nil { 626*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 627*ba677afaSXin Li } 628*ba677afaSXin Li if len(fileInFolder.LicenseInfoInFiles) != 1 { 629*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileInFolder.LicenseInfoInFiles)) 630*ba677afaSXin Li } 631*ba677afaSXin Li if fileInFolder.LicenseInfoInFiles[0] != "MIT" { 632*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseInfoInFiles[0]) 633*ba677afaSXin Li } 634*ba677afaSXin Li if fileInFolder.LicenseConcluded != "MIT" { 635*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseConcluded) 636*ba677afaSXin Li } 637*ba677afaSXin Li 638*ba677afaSXin Li fileTrailingComment := pkg.Files[1] 639*ba677afaSXin Li if fileTrailingComment.LicenseInfoInFiles == nil { 640*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 641*ba677afaSXin Li } 642*ba677afaSXin Li if len(fileTrailingComment.LicenseInfoInFiles) != 1 { 643*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileTrailingComment.LicenseInfoInFiles)) 644*ba677afaSXin Li } 645*ba677afaSXin Li if fileTrailingComment.LicenseInfoInFiles[0] != "GPL-2.0-or-later" { 646*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseInfoInFiles[0]) 647*ba677afaSXin Li } 648*ba677afaSXin Li if fileTrailingComment.LicenseConcluded != "GPL-2.0-or-later" { 649*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseConcluded) 650*ba677afaSXin Li } 651*ba677afaSXin Li 652*ba677afaSXin Li fileHasDuplicateID := pkg.Files[2] 653*ba677afaSXin Li if fileHasDuplicateID.LicenseInfoInFiles == nil { 654*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 655*ba677afaSXin Li } 656*ba677afaSXin Li if len(fileHasDuplicateID.LicenseInfoInFiles) != 1 { 657*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileHasDuplicateID.LicenseInfoInFiles)) 658*ba677afaSXin Li } 659*ba677afaSXin Li if fileHasDuplicateID.LicenseInfoInFiles[0] != "MIT" { 660*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseInfoInFiles[0]) 661*ba677afaSXin Li } 662*ba677afaSXin Li if fileHasDuplicateID.LicenseConcluded != "MIT" { 663*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseConcluded) 664*ba677afaSXin Li } 665*ba677afaSXin Li 666*ba677afaSXin Li fileHasID := pkg.Files[3] 667*ba677afaSXin Li if fileHasID.LicenseInfoInFiles == nil { 668*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 669*ba677afaSXin Li } 670*ba677afaSXin Li if len(fileHasID.LicenseInfoInFiles) != 2 { 671*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 2, got %d", len(fileHasID.LicenseInfoInFiles)) 672*ba677afaSXin Li } 673*ba677afaSXin Li if fileHasID.LicenseInfoInFiles[0] != "Apache-2.0" { 674*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0", fileHasID.LicenseInfoInFiles[0]) 675*ba677afaSXin Li } 676*ba677afaSXin Li if fileHasID.LicenseInfoInFiles[1] != "GPL-2.0-or-later" { 677*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileHasID.LicenseInfoInFiles[1]) 678*ba677afaSXin Li } 679*ba677afaSXin Li if fileHasID.LicenseConcluded != "Apache-2.0 OR GPL-2.0-or-later" { 680*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0 OR GPL-2.0-or-later", fileHasID.LicenseConcluded) 681*ba677afaSXin Li } 682*ba677afaSXin Li 683*ba677afaSXin Li fileMultipleIDs := pkg.Files[4] 684*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles == nil { 685*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 686*ba677afaSXin Li } 687*ba677afaSXin Li if len(fileMultipleIDs.LicenseInfoInFiles) != 5 { 688*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 5, got %d", len(fileMultipleIDs.LicenseInfoInFiles)) 689*ba677afaSXin Li } 690*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[0] != "BSD-2-Clause" { 691*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-2-Clause", fileMultipleIDs.LicenseInfoInFiles[0]) 692*ba677afaSXin Li } 693*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[1] != "BSD-3-Clause" { 694*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", fileMultipleIDs.LicenseInfoInFiles[1]) 695*ba677afaSXin Li } 696*ba677afaSXin Li // here, DO NOT keep the + 697*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[2] != "EPL-1.0" { 698*ba677afaSXin Li t.Errorf("expected %v, got %v", "EPL-1.0", fileMultipleIDs.LicenseInfoInFiles[2]) 699*ba677afaSXin Li } 700*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[3] != "ISC" { 701*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", fileMultipleIDs.LicenseInfoInFiles[3]) 702*ba677afaSXin Li } 703*ba677afaSXin Li if fileMultipleIDs.LicenseInfoInFiles[4] != "MIT" { 704*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", fileMultipleIDs.LicenseInfoInFiles[4]) 705*ba677afaSXin Li } 706*ba677afaSXin Li if fileMultipleIDs.LicenseConcluded != "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+" { 707*ba677afaSXin Li t.Errorf("expected %v, got %v", "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+", fileMultipleIDs.LicenseConcluded) 708*ba677afaSXin Li } 709*ba677afaSXin Li 710*ba677afaSXin Li fileNoID := pkg.Files[5] 711*ba677afaSXin Li if fileNoID.LicenseInfoInFiles == nil { 712*ba677afaSXin Li t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") 713*ba677afaSXin Li } 714*ba677afaSXin Li if len(fileNoID.LicenseInfoInFiles) != 1 { 715*ba677afaSXin Li t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileNoID.LicenseInfoInFiles)) 716*ba677afaSXin Li } 717*ba677afaSXin Li if fileNoID.LicenseInfoInFiles[0] != "NOASSERTION" { 718*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseInfoInFiles[0]) 719*ba677afaSXin Li } 720*ba677afaSXin Li if fileNoID.LicenseConcluded != "NOASSERTION" { 721*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseConcluded) 722*ba677afaSXin Li } 723*ba677afaSXin Li 724*ba677afaSXin Li // and finally, the package should have all of these licenses 725*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles == nil { 726*ba677afaSXin Li t.Fatalf("expected non-nil PackageLicenseInfoFromFiles, got nil") 727*ba677afaSXin Li } 728*ba677afaSXin Li if len(pkg.PackageLicenseInfoFromFiles) != 7 { 729*ba677afaSXin Li t.Fatalf("expected PackageLicenseInfoFromFiles len to be 7, got %d", len(pkg.PackageLicenseInfoFromFiles)) 730*ba677afaSXin Li } 731*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[0] != "Apache-2.0" { 732*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0", pkg.PackageLicenseInfoFromFiles[0]) 733*ba677afaSXin Li } 734*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[1] != "BSD-2-Clause" { 735*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-2-Clause", pkg.PackageLicenseInfoFromFiles[1]) 736*ba677afaSXin Li } 737*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[2] != "BSD-3-Clause" { 738*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", pkg.PackageLicenseInfoFromFiles[2]) 739*ba677afaSXin Li } 740*ba677afaSXin Li // here, DO NOT keep the + 741*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[3] != "EPL-1.0" { 742*ba677afaSXin Li t.Errorf("expected %v, got %v", "EPL-1.0", pkg.PackageLicenseInfoFromFiles[3]) 743*ba677afaSXin Li } 744*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[4] != "GPL-2.0-or-later" { 745*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", pkg.PackageLicenseInfoFromFiles[4]) 746*ba677afaSXin Li } 747*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[5] != "ISC" { 748*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", pkg.PackageLicenseInfoFromFiles[5]) 749*ba677afaSXin Li } 750*ba677afaSXin Li if pkg.PackageLicenseInfoFromFiles[6] != "MIT" { 751*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", pkg.PackageLicenseInfoFromFiles[6]) 752*ba677afaSXin Li } 753*ba677afaSXin Li 754*ba677afaSXin Li} 755*ba677afaSXin Li 756*ba677afaSXin Lifunc Test2_3SearcherCanFillInIDsAndIgnorePaths(t *testing.T) { 757*ba677afaSXin Li packageName := "project3" 758*ba677afaSXin Li dirRoot := "../testdata/project3/" 759*ba677afaSXin Li config := &Config2_3{ 760*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 761*ba677afaSXin Li BuilderPathsIgnored: []string{ 762*ba677afaSXin Li "**/ignoredir/", 763*ba677afaSXin Li "/excludedir/", 764*ba677afaSXin Li "**/ignorefile.txt", 765*ba677afaSXin Li "/alsoEXCLUDEthis.txt", 766*ba677afaSXin Li }, 767*ba677afaSXin Li SearcherPathsIgnored: []string{ 768*ba677afaSXin Li "**/dontscan.txt", 769*ba677afaSXin Li }, 770*ba677afaSXin Li } 771*ba677afaSXin Li 772*ba677afaSXin Li doc, err := BuildIDsDocument2_3(packageName, dirRoot, config) 773*ba677afaSXin Li if err != nil { 774*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 775*ba677afaSXin Li } 776*ba677afaSXin Li if doc == nil { 777*ba677afaSXin Li t.Fatalf("expected non-nil Document, got nil") 778*ba677afaSXin Li } 779*ba677afaSXin Li 780*ba677afaSXin Li // not checking all contents of doc, see builder tests for those 781*ba677afaSXin Li 782*ba677afaSXin Li // get the package and its files, checking licenses for each, and 783*ba677afaSXin Li // confirming NOASSERTION for those that are skipped 784*ba677afaSXin Li pkg := doc.Packages[0] 785*ba677afaSXin Li if pkg == nil { 786*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 787*ba677afaSXin Li } 788*ba677afaSXin Li if len(pkg.Files) != 5 { 789*ba677afaSXin Li t.Fatalf("expected len %d, got %d", 5, len(pkg.Files)) 790*ba677afaSXin Li } 791*ba677afaSXin Li 792*ba677afaSXin Li f := pkg.Files[0] 793*ba677afaSXin Li if f.FileName != "./dontscan.txt" { 794*ba677afaSXin Li t.Errorf("expected %v, got %v", "./dontscan.txt", f.FileName) 795*ba677afaSXin Li } 796*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 797*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 798*ba677afaSXin Li } 799*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 800*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 801*ba677afaSXin Li } 802*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 803*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 804*ba677afaSXin Li } 805*ba677afaSXin Li 806*ba677afaSXin Li f = pkg.Files[1] 807*ba677afaSXin Li if f.FileName != "./keep/keep.txt" { 808*ba677afaSXin Li t.Errorf("expected %v, got %v", "./keep/keep.txt", f.FileName) 809*ba677afaSXin Li } 810*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 811*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 812*ba677afaSXin Li } 813*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "MIT" { 814*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) 815*ba677afaSXin Li } 816*ba677afaSXin Li if f.LicenseConcluded != "MIT" { 817*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) 818*ba677afaSXin Li } 819*ba677afaSXin Li 820*ba677afaSXin Li f = pkg.Files[2] 821*ba677afaSXin Li if f.FileName != "./keep.txt" { 822*ba677afaSXin Li t.Errorf("expected %v, got %v", "./keep.txt", f.FileName) 823*ba677afaSXin Li } 824*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 825*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 826*ba677afaSXin Li } 827*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 828*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 829*ba677afaSXin Li } 830*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 831*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 832*ba677afaSXin Li } 833*ba677afaSXin Li 834*ba677afaSXin Li f = pkg.Files[3] 835*ba677afaSXin Li if f.FileName != "./subdir/keep/dontscan.txt" { 836*ba677afaSXin Li t.Errorf("expected %v, got %v", "./subdir/keep/dontscan.txt", f.FileName) 837*ba677afaSXin Li } 838*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 839*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 840*ba677afaSXin Li } 841*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "NOASSERTION" { 842*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) 843*ba677afaSXin Li } 844*ba677afaSXin Li if f.LicenseConcluded != "NOASSERTION" { 845*ba677afaSXin Li t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) 846*ba677afaSXin Li } 847*ba677afaSXin Li 848*ba677afaSXin Li f = pkg.Files[4] 849*ba677afaSXin Li if f.FileName != "./subdir/keep/keep.txt" { 850*ba677afaSXin Li t.Errorf("expected %v, got %v", "./subdir/keep/keep.txt", f.FileName) 851*ba677afaSXin Li } 852*ba677afaSXin Li if len(f.LicenseInfoInFiles) != 1 { 853*ba677afaSXin Li t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) 854*ba677afaSXin Li } 855*ba677afaSXin Li if f.LicenseInfoInFiles[0] != "MIT" { 856*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) 857*ba677afaSXin Li } 858*ba677afaSXin Li if f.LicenseConcluded != "MIT" { 859*ba677afaSXin Li t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) 860*ba677afaSXin Li } 861*ba677afaSXin Li} 862*ba677afaSXin Li 863*ba677afaSXin Lifunc Test2_3SearcherFailsWithInvalidPath(t *testing.T) { 864*ba677afaSXin Li packageName := "project2" 865*ba677afaSXin Li dirRoot := "./oops/invalid" 866*ba677afaSXin Li config := &Config2_3{ 867*ba677afaSXin Li NamespacePrefix: "whatever", 868*ba677afaSXin Li } 869*ba677afaSXin Li 870*ba677afaSXin Li _, err := BuildIDsDocument2_3(packageName, dirRoot, config) 871*ba677afaSXin Li if err == nil { 872*ba677afaSXin Li t.Fatalf("expected non-nil error, got nil") 873*ba677afaSXin Li } 874*ba677afaSXin Li} 875*ba677afaSXin Li 876*ba677afaSXin Li// ===== Searcher utility tests ===== 877*ba677afaSXin Lifunc TestCanFindShortFormIDWhenPresent(t *testing.T) { 878*ba677afaSXin Li filePath := "../testdata/project2/has-id.txt" 879*ba677afaSXin Li 880*ba677afaSXin Li ids, err := searchFileIDs(filePath) 881*ba677afaSXin Li if err != nil { 882*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 883*ba677afaSXin Li } 884*ba677afaSXin Li 885*ba677afaSXin Li if len(ids) != 1 { 886*ba677afaSXin Li t.Fatalf("expected len 1, got %d", len(ids)) 887*ba677afaSXin Li } 888*ba677afaSXin Li 889*ba677afaSXin Li if ids[0] != "Apache-2.0 OR GPL-2.0-or-later" { 890*ba677afaSXin Li t.Errorf("expected %v, got %v", "Apache-2.0 OR GPL-2.0-or-later", ids[0]) 891*ba677afaSXin Li } 892*ba677afaSXin Li} 893*ba677afaSXin Li 894*ba677afaSXin Lifunc TestCanFindMultipleShortFormIDsWhenPresent(t *testing.T) { 895*ba677afaSXin Li filePath := "../testdata/project2/has-multiple-ids.txt" 896*ba677afaSXin Li 897*ba677afaSXin Li ids, err := searchFileIDs(filePath) 898*ba677afaSXin Li if err != nil { 899*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 900*ba677afaSXin Li } 901*ba677afaSXin Li 902*ba677afaSXin Li if len(ids) != 3 { 903*ba677afaSXin Li t.Fatalf("expected len 3, got %d", len(ids)) 904*ba677afaSXin Li } 905*ba677afaSXin Li 906*ba677afaSXin Li if ids[0] != "(MIT AND BSD-3-Clause) OR ISC" { 907*ba677afaSXin Li t.Errorf("expected %v, got %v", "(MIT AND BSD-3-Clause) OR ISC", ids[0]) 908*ba677afaSXin Li } 909*ba677afaSXin Li if ids[1] != "BSD-2-Clause" { 910*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-2-Clause", ids[1]) 911*ba677afaSXin Li } 912*ba677afaSXin Li if ids[2] != "EPL-1.0+" { 913*ba677afaSXin Li t.Errorf("expected %v, got %v", "EPL-1.0+", ids[2]) 914*ba677afaSXin Li } 915*ba677afaSXin Li} 916*ba677afaSXin Li 917*ba677afaSXin Lifunc TestCanCollapseDuplicateShortFormIDsWhenPresent(t *testing.T) { 918*ba677afaSXin Li filePath := "../testdata/project2/has-duplicate-ids.txt" 919*ba677afaSXin Li 920*ba677afaSXin Li ids, err := searchFileIDs(filePath) 921*ba677afaSXin Li if err != nil { 922*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 923*ba677afaSXin Li } 924*ba677afaSXin Li 925*ba677afaSXin Li if len(ids) != 1 { 926*ba677afaSXin Li t.Fatalf("expected len 1, got %d", len(ids)) 927*ba677afaSXin Li } 928*ba677afaSXin Li 929*ba677afaSXin Li if ids[0] != "MIT" { 930*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", ids[0]) 931*ba677afaSXin Li } 932*ba677afaSXin Li} 933*ba677afaSXin Li 934*ba677afaSXin Lifunc TestCanStripTrailingStarSlash(t *testing.T) { 935*ba677afaSXin Li filePath := "../testdata/project2/folder/has-trailing-comment-marker.c" 936*ba677afaSXin Li 937*ba677afaSXin Li ids, err := searchFileIDs(filePath) 938*ba677afaSXin Li if err != nil { 939*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 940*ba677afaSXin Li } 941*ba677afaSXin Li 942*ba677afaSXin Li if len(ids) != 1 { 943*ba677afaSXin Li t.Fatalf("expected len 1, got %d", len(ids)) 944*ba677afaSXin Li } 945*ba677afaSXin Li 946*ba677afaSXin Li if ids[0] != "GPL-2.0-or-later" { 947*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-or-later", ids[0]) 948*ba677afaSXin Li } 949*ba677afaSXin Li} 950*ba677afaSXin Li 951*ba677afaSXin Lifunc TestCanIgnoreShortFormIDWhenTooManyPrefixChars(t *testing.T) { 952*ba677afaSXin Li filePath := "../testdata/project4/has-id-to-ignore.txt" 953*ba677afaSXin Li 954*ba677afaSXin Li ids, err := searchFileIDs(filePath) 955*ba677afaSXin Li if err != nil { 956*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 957*ba677afaSXin Li } 958*ba677afaSXin Li 959*ba677afaSXin Li if len(ids) != 0 { 960*ba677afaSXin Li t.Fatalf("expected len 0, got %d", len(ids)) 961*ba677afaSXin Li } 962*ba677afaSXin Li} 963*ba677afaSXin Li 964*ba677afaSXin Lifunc TestCanPickJustTheRightID(t *testing.T) { 965*ba677afaSXin Li filePath := "../testdata/project4/has-mix-of-ids.txt" 966*ba677afaSXin Li 967*ba677afaSXin Li ids, err := searchFileIDs(filePath) 968*ba677afaSXin Li if err != nil { 969*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 970*ba677afaSXin Li } 971*ba677afaSXin Li 972*ba677afaSXin Li if len(ids) != 1 { 973*ba677afaSXin Li t.Fatalf("expected len 1, got %d", len(ids)) 974*ba677afaSXin Li } 975*ba677afaSXin Li 976*ba677afaSXin Li if ids[0] != "MIT" { 977*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", ids[0]) 978*ba677afaSXin Li } 979*ba677afaSXin Li} 980*ba677afaSXin Li 981*ba677afaSXin Lifunc TestCannotFindShortFormIDWhenAbsent(t *testing.T) { 982*ba677afaSXin Li filePath := "../testdata/project2/no-id.txt" 983*ba677afaSXin Li 984*ba677afaSXin Li ids, err := searchFileIDs(filePath) 985*ba677afaSXin Li if err != nil { 986*ba677afaSXin Li t.Fatalf("expected nil error, got %v", err) 987*ba677afaSXin Li } 988*ba677afaSXin Li 989*ba677afaSXin Li if len(ids) != 0 { 990*ba677afaSXin Li t.Fatalf("expected len 0, got %d", len(ids)) 991*ba677afaSXin Li } 992*ba677afaSXin Li} 993*ba677afaSXin Li 994*ba677afaSXin Lifunc TestCanExcludeTrashCharactersFromID(t *testing.T) { 995*ba677afaSXin Li lid := "Apac\",he-2.0" 996*ba677afaSXin Li want := "Apache-2.0" 997*ba677afaSXin Li got := stripTrash(lid) 998*ba677afaSXin Li if want != got { 999*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 1000*ba677afaSXin Li } 1001*ba677afaSXin Li 1002*ba677afaSXin Li lid = "Apache-2.0" 1003*ba677afaSXin Li want = "Apache-2.0" 1004*ba677afaSXin Li got = stripTrash(lid) 1005*ba677afaSXin Li if want != got { 1006*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 1007*ba677afaSXin Li } 1008*ba677afaSXin Li} 1009*ba677afaSXin Li 1010*ba677afaSXin Lifunc TestSearchFileIDsFailsWithInvalidFilePath(t *testing.T) { 1011*ba677afaSXin Li filePath := "./oops/nm/invalid" 1012*ba677afaSXin Li 1013*ba677afaSXin Li _, err := searchFileIDs(filePath) 1014*ba677afaSXin Li if err == nil { 1015*ba677afaSXin Li t.Fatalf("expected non-nil error, got nil") 1016*ba677afaSXin Li } 1017*ba677afaSXin Li} 1018*ba677afaSXin Li 1019*ba677afaSXin Lifunc TestWillParenthesizeIfNeeded(t *testing.T) { 1020*ba677afaSXin Li licID := "MIT OR BSD-3-Clause" 1021*ba677afaSXin Li retval := makeElement(licID) 1022*ba677afaSXin Li if retval != "(MIT OR BSD-3-Clause)" { 1023*ba677afaSXin Li t.Errorf("expected %v, got %v", "(MIT OR BSD-3-Clause)", retval) 1024*ba677afaSXin Li } 1025*ba677afaSXin Li 1026*ba677afaSXin Li licID = "ISC AND HPND" 1027*ba677afaSXin Li retval = makeElement(licID) 1028*ba677afaSXin Li if retval != "(ISC AND HPND)" { 1029*ba677afaSXin Li t.Errorf("expected %v, got %v", "(ISC AND HPND)", retval) 1030*ba677afaSXin Li } 1031*ba677afaSXin Li} 1032*ba677afaSXin Li 1033*ba677afaSXin Lifunc TestWillNotParenthesizeIfNotNeeded(t *testing.T) { 1034*ba677afaSXin Li lic := "MIT" 1035*ba677afaSXin Li retval := makeElement(lic) 1036*ba677afaSXin Li if retval != "MIT" { 1037*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", retval) 1038*ba677afaSXin Li } 1039*ba677afaSXin Li 1040*ba677afaSXin Li lic = "GPL-2.0-only WITH Classpath-exception-2.0" 1041*ba677afaSXin Li retval = makeElement(lic) 1042*ba677afaSXin Li if retval != "GPL-2.0-only WITH Classpath-exception-2.0" { 1043*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-only WITH Classpath-exception-2.0", retval) 1044*ba677afaSXin Li } 1045*ba677afaSXin Li} 1046*ba677afaSXin Li 1047*ba677afaSXin Lifunc TestCanGetIndividualLicenses(t *testing.T) { 1048*ba677afaSXin Li // single license 1049*ba677afaSXin Li lic := "MIT" 1050*ba677afaSXin Li lics := getIndividualLicenses(lic) 1051*ba677afaSXin Li if lics == nil { 1052*ba677afaSXin Li t.Fatalf("expected non-nil lics, got nil") 1053*ba677afaSXin Li } 1054*ba677afaSXin Li if len(lics) != 1 { 1055*ba677afaSXin Li t.Fatalf("expected lics to have len 1, got %d", len(lics)) 1056*ba677afaSXin Li } 1057*ba677afaSXin Li if lics[0] != "MIT" { 1058*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", lics[0]) 1059*ba677afaSXin Li } 1060*ba677afaSXin Li 1061*ba677afaSXin Li // two-license combo 1062*ba677afaSXin Li lic = "ISC AND BSD-3-Clause" 1063*ba677afaSXin Li lics = getIndividualLicenses(lic) 1064*ba677afaSXin Li if lics == nil { 1065*ba677afaSXin Li t.Fatalf("expected non-nil lics, got nil") 1066*ba677afaSXin Li } 1067*ba677afaSXin Li if len(lics) != 2 { 1068*ba677afaSXin Li t.Fatalf("expected lics to have len 2, got %d", len(lics)) 1069*ba677afaSXin Li } 1070*ba677afaSXin Li // should be sorted alphabetically 1071*ba677afaSXin Li if lics[0] != "BSD-3-Clause" { 1072*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", lics[0]) 1073*ba677afaSXin Li } 1074*ba677afaSXin Li if lics[1] != "ISC" { 1075*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", lics[1]) 1076*ba677afaSXin Li } 1077*ba677afaSXin Li 1078*ba677afaSXin Li // license WITH exception 1079*ba677afaSXin Li lic = "GPL-2.0-only WITH Classpath-exception-2.0" 1080*ba677afaSXin Li lics = getIndividualLicenses(lic) 1081*ba677afaSXin Li if lics == nil { 1082*ba677afaSXin Li t.Fatalf("expected non-nil lics, got nil") 1083*ba677afaSXin Li } 1084*ba677afaSXin Li if len(lics) != 2 { 1085*ba677afaSXin Li t.Fatalf("expected lics to have len 2, got %d", len(lics)) 1086*ba677afaSXin Li } 1087*ba677afaSXin Li // exception should be listed separately 1088*ba677afaSXin Li if lics[0] != "Classpath-exception-2.0" { 1089*ba677afaSXin Li t.Errorf("expected %v, got %v", "Classpath-exception-2.0", lics[0]) 1090*ba677afaSXin Li } 1091*ba677afaSXin Li if lics[1] != "GPL-2.0-only" { 1092*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-only", lics[1]) 1093*ba677afaSXin Li } 1094*ba677afaSXin Li 1095*ba677afaSXin Li // two-license combo with parens 1096*ba677afaSXin Li lic = "(JSON OR BSD-2-Clause)" 1097*ba677afaSXin Li lics = getIndividualLicenses(lic) 1098*ba677afaSXin Li if lics == nil { 1099*ba677afaSXin Li t.Fatalf("expected non-nil lics, got nil") 1100*ba677afaSXin Li } 1101*ba677afaSXin Li if len(lics) != 2 { 1102*ba677afaSXin Li t.Fatalf("expected lics to have len 2, got %d", len(lics)) 1103*ba677afaSXin Li } 1104*ba677afaSXin Li // parens should get dropped 1105*ba677afaSXin Li if lics[0] != "BSD-2-Clause" { 1106*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-2-Clause", lics[0]) 1107*ba677afaSXin Li } 1108*ba677afaSXin Li if lics[1] != "JSON" { 1109*ba677afaSXin Li t.Errorf("expected %v, got %v", "JSON", lics[1]) 1110*ba677afaSXin Li } 1111*ba677afaSXin Li 1112*ba677afaSXin Li // multi-license combo with nested parens 1113*ba677afaSXin Li lic = "GPL-2.0-only AND ((EPL-1.0 AND BSD-4-Clause) OR MIT)" 1114*ba677afaSXin Li lics = getIndividualLicenses(lic) 1115*ba677afaSXin Li if lics == nil { 1116*ba677afaSXin Li t.Fatalf("expected non-nil lics, got nil") 1117*ba677afaSXin Li } 1118*ba677afaSXin Li if len(lics) != 4 { 1119*ba677afaSXin Li t.Fatalf("expected lics to have len 4, got %d", len(lics)) 1120*ba677afaSXin Li } 1121*ba677afaSXin Li if lics[0] != "BSD-4-Clause" { 1122*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-4-Clause", lics[0]) 1123*ba677afaSXin Li } 1124*ba677afaSXin Li if lics[1] != "EPL-1.0" { 1125*ba677afaSXin Li t.Errorf("expected %v, got %v", "EPL-1.0", lics[1]) 1126*ba677afaSXin Li } 1127*ba677afaSXin Li if lics[2] != "GPL-2.0-only" { 1128*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-only", lics[2]) 1129*ba677afaSXin Li } 1130*ba677afaSXin Li if lics[3] != "MIT" { 1131*ba677afaSXin Li t.Errorf("expected %v, got %v", "MIT", lics[3]) 1132*ba677afaSXin Li } 1133*ba677afaSXin Li} 1134*ba677afaSXin Li 1135*ba677afaSXin Lifunc TestCanGetIndividualLicensesIgnoringOperatorCase(t *testing.T) { 1136*ba677afaSXin Li // two-license combo with lowercase 'and' 1137*ba677afaSXin Li lic := "ISC and BSD-3-Clause" 1138*ba677afaSXin Li lics := getIndividualLicenses(lic) 1139*ba677afaSXin Li if lics == nil { 1140*ba677afaSXin Li t.Fatalf("expected non-nil lics, got nil") 1141*ba677afaSXin Li } 1142*ba677afaSXin Li // should be sorted alphabetically; 'and' should not appear 1143*ba677afaSXin Li if len(lics) != 2 { 1144*ba677afaSXin Li t.Fatalf("expected lics to have len 2, got %d", len(lics)) 1145*ba677afaSXin Li } 1146*ba677afaSXin Li if lics[0] != "BSD-3-Clause" { 1147*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", lics[0]) 1148*ba677afaSXin Li } 1149*ba677afaSXin Li if lics[1] != "ISC" { 1150*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", lics[1]) 1151*ba677afaSXin Li } 1152*ba677afaSXin Li 1153*ba677afaSXin Li // two-license combo with lowercase 'or' 1154*ba677afaSXin Li lic = "ISC or BSD-3-Clause" 1155*ba677afaSXin Li lics = getIndividualLicenses(lic) 1156*ba677afaSXin Li if lics == nil { 1157*ba677afaSXin Li t.Fatalf("expected non-nil lics, got nil") 1158*ba677afaSXin Li } 1159*ba677afaSXin Li // should be sorted alphabetically; 'or' should not appear 1160*ba677afaSXin Li if len(lics) != 2 { 1161*ba677afaSXin Li t.Fatalf("expected lics to have len 2, got %d", len(lics)) 1162*ba677afaSXin Li } 1163*ba677afaSXin Li if lics[0] != "BSD-3-Clause" { 1164*ba677afaSXin Li t.Errorf("expected %v, got %v", "BSD-3-Clause", lics[0]) 1165*ba677afaSXin Li } 1166*ba677afaSXin Li if lics[1] != "ISC" { 1167*ba677afaSXin Li t.Errorf("expected %v, got %v", "ISC", lics[1]) 1168*ba677afaSXin Li } 1169*ba677afaSXin Li 1170*ba677afaSXin Li // two-license combo with lowercase 'with' 1171*ba677afaSXin Li lic = "GPL-2.0-only with Classpath-exception-2.0" 1172*ba677afaSXin Li lics = getIndividualLicenses(lic) 1173*ba677afaSXin Li if lics == nil { 1174*ba677afaSXin Li t.Fatalf("expected non-nil lics, got nil") 1175*ba677afaSXin Li } 1176*ba677afaSXin Li // should be sorted alphabetically; 'with' should not appear 1177*ba677afaSXin Li if len(lics) != 2 { 1178*ba677afaSXin Li t.Fatalf("expected lics to have len 2, got %d", len(lics)) 1179*ba677afaSXin Li } 1180*ba677afaSXin Li if lics[0] != "Classpath-exception-2.0" { 1181*ba677afaSXin Li t.Errorf("expected %v, got %v", "Classpath-exception-2.0", lics[0]) 1182*ba677afaSXin Li } 1183*ba677afaSXin Li if lics[1] != "GPL-2.0-only" { 1184*ba677afaSXin Li t.Errorf("expected %v, got %v", "GPL-2.0-only", lics[1]) 1185*ba677afaSXin Li } 1186*ba677afaSXin Li 1187*ba677afaSXin Li} 1188