| // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later |
| |
| package idsearcher |
| |
| import ( |
| "testing" |
| ) |
| |
| // ===== 2.1 Searcher top-level function tests ===== |
| func Test2_1SearcherCanFillInIDs(t *testing.T) { |
| packageName := "project2" |
| dirRoot := "../testdata/project2/" |
| config := &Config2_1{ |
| NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", |
| } |
| |
| doc, err := BuildIDsDocument2_1(packageName, dirRoot, config) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| if doc == nil { |
| t.Fatalf("expected non-nil Document, got nil") |
| } |
| |
| // not checking all contents of doc, see builder tests for those |
| |
| // get the package and its files, checking size of each |
| if doc.Packages == nil { |
| t.Fatalf("expected non-nil Packages, got nil") |
| } |
| if len(doc.Packages) != 1 { |
| t.Fatalf("expected Packages len to be 1, got %d", len(doc.Packages)) |
| } |
| pkg := doc.Packages[0] |
| if pkg == nil { |
| t.Fatalf("expected non-nil pkg, got nil") |
| } |
| |
| if pkg.Files == nil { |
| t.Fatalf("expected non-nil Files, got nil") |
| } |
| if len(pkg.Files) != 6 { |
| t.Fatalf("expected Files len to be 6, got %d", len(pkg.Files)) |
| } |
| |
| fileInFolder := pkg.Files[0] |
| if fileInFolder.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileInFolder.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileInFolder.LicenseInfoInFiles)) |
| } |
| if fileInFolder.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseInfoInFiles[0]) |
| } |
| if fileInFolder.LicenseConcluded != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseConcluded) |
| } |
| |
| fileTrailingComment := pkg.Files[1] |
| if fileTrailingComment.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileTrailingComment.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileTrailingComment.LicenseInfoInFiles)) |
| } |
| if fileTrailingComment.LicenseInfoInFiles[0] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseInfoInFiles[0]) |
| } |
| if fileTrailingComment.LicenseConcluded != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseConcluded) |
| } |
| |
| fileHasDuplicateID := pkg.Files[2] |
| if fileHasDuplicateID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileHasDuplicateID.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileHasDuplicateID.LicenseInfoInFiles)) |
| } |
| if fileHasDuplicateID.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseInfoInFiles[0]) |
| } |
| if fileHasDuplicateID.LicenseConcluded != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseConcluded) |
| } |
| |
| fileHasID := pkg.Files[3] |
| if fileHasID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileHasID.LicenseInfoInFiles) != 2 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 2, got %d", len(fileHasID.LicenseInfoInFiles)) |
| } |
| if fileHasID.LicenseInfoInFiles[0] != "Apache-2.0" { |
| t.Errorf("expected %v, got %v", "Apache-2.0", fileHasID.LicenseInfoInFiles[0]) |
| } |
| if fileHasID.LicenseInfoInFiles[1] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileHasID.LicenseInfoInFiles[1]) |
| } |
| if fileHasID.LicenseConcluded != "Apache-2.0 OR GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "Apache-2.0 OR GPL-2.0-or-later", fileHasID.LicenseConcluded) |
| } |
| |
| fileMultipleIDs := pkg.Files[4] |
| if fileMultipleIDs.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileMultipleIDs.LicenseInfoInFiles) != 5 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 5, got %d", len(fileMultipleIDs.LicenseInfoInFiles)) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[0] != "BSD-2-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-2-Clause", fileMultipleIDs.LicenseInfoInFiles[0]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[1] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", fileMultipleIDs.LicenseInfoInFiles[1]) |
| } |
| // here, DO NOT keep the + |
| if fileMultipleIDs.LicenseInfoInFiles[2] != "EPL-1.0" { |
| t.Errorf("expected %v, got %v", "EPL-1.0", fileMultipleIDs.LicenseInfoInFiles[2]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[3] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", fileMultipleIDs.LicenseInfoInFiles[3]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[4] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileMultipleIDs.LicenseInfoInFiles[4]) |
| } |
| if fileMultipleIDs.LicenseConcluded != "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+" { |
| t.Errorf("expected %v, got %v", "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+", fileMultipleIDs.LicenseConcluded) |
| } |
| |
| fileNoID := pkg.Files[5] |
| if fileNoID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileNoID.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileNoID.LicenseInfoInFiles)) |
| } |
| if fileNoID.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseInfoInFiles[0]) |
| } |
| if fileNoID.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseConcluded) |
| } |
| |
| // and finally, the package should have all of these licenses |
| if pkg.PackageLicenseInfoFromFiles == nil { |
| t.Fatalf("expected non-nil PackageLicenseInfoFromFiles, got nil") |
| } |
| if len(pkg.PackageLicenseInfoFromFiles) != 7 { |
| t.Fatalf("expected PackageLicenseInfoFromFiles len to be 7, got %d", len(pkg.PackageLicenseInfoFromFiles)) |
| } |
| if pkg.PackageLicenseInfoFromFiles[0] != "Apache-2.0" { |
| t.Errorf("expected %v, got %v", "Apache-2.0", pkg.PackageLicenseInfoFromFiles[0]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[1] != "BSD-2-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-2-Clause", pkg.PackageLicenseInfoFromFiles[1]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[2] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", pkg.PackageLicenseInfoFromFiles[2]) |
| } |
| // here, DO NOT keep the + |
| if pkg.PackageLicenseInfoFromFiles[3] != "EPL-1.0" { |
| t.Errorf("expected %v, got %v", "EPL-1.0", pkg.PackageLicenseInfoFromFiles[3]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[4] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", pkg.PackageLicenseInfoFromFiles[4]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[5] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", pkg.PackageLicenseInfoFromFiles[5]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[6] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", pkg.PackageLicenseInfoFromFiles[6]) |
| } |
| |
| } |
| |
| func Test2_1SearcherCanFillInIDsAndIgnorePaths(t *testing.T) { |
| packageName := "project3" |
| dirRoot := "../testdata/project3/" |
| config := &Config2_1{ |
| NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", |
| BuilderPathsIgnored: []string{ |
| "**/ignoredir/", |
| "/excludedir/", |
| "**/ignorefile.txt", |
| "/alsoEXCLUDEthis.txt", |
| }, |
| SearcherPathsIgnored: []string{ |
| "**/dontscan.txt", |
| }, |
| } |
| |
| doc, err := BuildIDsDocument2_1(packageName, dirRoot, config) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| if doc == nil { |
| t.Fatalf("expected non-nil Document, got nil") |
| } |
| |
| // not checking all contents of doc, see builder tests for those |
| |
| // get the package and its files, checking licenses for each, and |
| // confirming NOASSERTION for those that are skipped |
| pkg := doc.Packages[0] |
| if pkg == nil { |
| t.Fatalf("expected non-nil pkg, got nil") |
| } |
| if len(pkg.Files) != 5 { |
| t.Fatalf("expected len %d, got %d", 5, len(pkg.Files)) |
| } |
| |
| f := pkg.Files[0] |
| if f.FileName != "./dontscan.txt" { |
| t.Errorf("expected %v, got %v", "./dontscan.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[1] |
| if f.FileName != "./keep/keep.txt" { |
| t.Errorf("expected %v, got %v", "./keep/keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[2] |
| if f.FileName != "./keep.txt" { |
| t.Errorf("expected %v, got %v", "./keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[3] |
| if f.FileName != "./subdir/keep/dontscan.txt" { |
| t.Errorf("expected %v, got %v", "./subdir/keep/dontscan.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[4] |
| if f.FileName != "./subdir/keep/keep.txt" { |
| t.Errorf("expected %v, got %v", "./subdir/keep/keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) |
| } |
| } |
| |
| func Test2_1SearcherFailsWithInvalidPath(t *testing.T) { |
| packageName := "project2" |
| dirRoot := "./oops/invalid" |
| config := &Config2_1{ |
| NamespacePrefix: "whatever", |
| } |
| |
| _, err := BuildIDsDocument2_1(packageName, dirRoot, config) |
| if err == nil { |
| t.Fatalf("expected non-nil error, got nil") |
| } |
| } |
| |
| // ===== 2.2 Searcher top-level function tests ===== |
| func Test2_2SearcherCanFillInIDs(t *testing.T) { |
| packageName := "project2" |
| dirRoot := "../testdata/project2/" |
| config := &Config2_2{ |
| NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", |
| } |
| |
| doc, err := BuildIDsDocument2_2(packageName, dirRoot, config) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| if doc == nil { |
| t.Fatalf("expected non-nil Document, got nil") |
| } |
| |
| // not checking all contents of doc, see builder tests for those |
| |
| // get the package and its files, checking size of each |
| if doc.Packages == nil { |
| t.Fatalf("expected non-nil Packages, got nil") |
| } |
| if len(doc.Packages) != 1 { |
| t.Fatalf("expected Packages len to be 1, got %d", len(doc.Packages)) |
| } |
| pkg := doc.Packages[0] |
| if pkg == nil { |
| t.Fatalf("expected non-nil pkg, got nil") |
| } |
| |
| if pkg.Files == nil { |
| t.Fatalf("expected non-nil Files, got nil") |
| } |
| if len(pkg.Files) != 6 { |
| t.Fatalf("expected Files len to be 6, got %d", len(pkg.Files)) |
| } |
| |
| fileInFolder := pkg.Files[0] |
| if fileInFolder.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileInFolder.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileInFolder.LicenseInfoInFiles)) |
| } |
| if fileInFolder.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseInfoInFiles[0]) |
| } |
| if fileInFolder.LicenseConcluded != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseConcluded) |
| } |
| |
| fileTrailingComment := pkg.Files[1] |
| if fileTrailingComment.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileTrailingComment.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileTrailingComment.LicenseInfoInFiles)) |
| } |
| if fileTrailingComment.LicenseInfoInFiles[0] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseInfoInFiles[0]) |
| } |
| if fileTrailingComment.LicenseConcluded != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseConcluded) |
| } |
| |
| fileHasDuplicateID := pkg.Files[2] |
| if fileHasDuplicateID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileHasDuplicateID.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileHasDuplicateID.LicenseInfoInFiles)) |
| } |
| if fileHasDuplicateID.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseInfoInFiles[0]) |
| } |
| if fileHasDuplicateID.LicenseConcluded != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseConcluded) |
| } |
| |
| fileHasID := pkg.Files[3] |
| if fileHasID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileHasID.LicenseInfoInFiles) != 2 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 2, got %d", len(fileHasID.LicenseInfoInFiles)) |
| } |
| if fileHasID.LicenseInfoInFiles[0] != "Apache-2.0" { |
| t.Errorf("expected %v, got %v", "Apache-2.0", fileHasID.LicenseInfoInFiles[0]) |
| } |
| if fileHasID.LicenseInfoInFiles[1] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileHasID.LicenseInfoInFiles[1]) |
| } |
| if fileHasID.LicenseConcluded != "Apache-2.0 OR GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "Apache-2.0 OR GPL-2.0-or-later", fileHasID.LicenseConcluded) |
| } |
| |
| fileMultipleIDs := pkg.Files[4] |
| if fileMultipleIDs.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileMultipleIDs.LicenseInfoInFiles) != 5 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 5, got %d", len(fileMultipleIDs.LicenseInfoInFiles)) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[0] != "BSD-2-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-2-Clause", fileMultipleIDs.LicenseInfoInFiles[0]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[1] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", fileMultipleIDs.LicenseInfoInFiles[1]) |
| } |
| // here, DO NOT keep the + |
| if fileMultipleIDs.LicenseInfoInFiles[2] != "EPL-1.0" { |
| t.Errorf("expected %v, got %v", "EPL-1.0", fileMultipleIDs.LicenseInfoInFiles[2]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[3] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", fileMultipleIDs.LicenseInfoInFiles[3]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[4] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileMultipleIDs.LicenseInfoInFiles[4]) |
| } |
| if fileMultipleIDs.LicenseConcluded != "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+" { |
| t.Errorf("expected %v, got %v", "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+", fileMultipleIDs.LicenseConcluded) |
| } |
| |
| fileNoID := pkg.Files[5] |
| if fileNoID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileNoID.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileNoID.LicenseInfoInFiles)) |
| } |
| if fileNoID.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseInfoInFiles[0]) |
| } |
| if fileNoID.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseConcluded) |
| } |
| |
| // and finally, the package should have all of these licenses |
| if pkg.PackageLicenseInfoFromFiles == nil { |
| t.Fatalf("expected non-nil PackageLicenseInfoFromFiles, got nil") |
| } |
| if len(pkg.PackageLicenseInfoFromFiles) != 7 { |
| t.Fatalf("expected PackageLicenseInfoFromFiles len to be 7, got %d", len(pkg.PackageLicenseInfoFromFiles)) |
| } |
| if pkg.PackageLicenseInfoFromFiles[0] != "Apache-2.0" { |
| t.Errorf("expected %v, got %v", "Apache-2.0", pkg.PackageLicenseInfoFromFiles[0]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[1] != "BSD-2-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-2-Clause", pkg.PackageLicenseInfoFromFiles[1]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[2] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", pkg.PackageLicenseInfoFromFiles[2]) |
| } |
| // here, DO NOT keep the + |
| if pkg.PackageLicenseInfoFromFiles[3] != "EPL-1.0" { |
| t.Errorf("expected %v, got %v", "EPL-1.0", pkg.PackageLicenseInfoFromFiles[3]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[4] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", pkg.PackageLicenseInfoFromFiles[4]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[5] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", pkg.PackageLicenseInfoFromFiles[5]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[6] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", pkg.PackageLicenseInfoFromFiles[6]) |
| } |
| |
| } |
| |
| func Test2_2SearcherCanFillInIDsAndIgnorePaths(t *testing.T) { |
| packageName := "project3" |
| dirRoot := "../testdata/project3/" |
| config := &Config2_2{ |
| NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", |
| BuilderPathsIgnored: []string{ |
| "**/ignoredir/", |
| "/excludedir/", |
| "**/ignorefile.txt", |
| "/alsoEXCLUDEthis.txt", |
| }, |
| SearcherPathsIgnored: []string{ |
| "**/dontscan.txt", |
| }, |
| } |
| |
| doc, err := BuildIDsDocument2_2(packageName, dirRoot, config) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| if doc == nil { |
| t.Fatalf("expected non-nil Document, got nil") |
| } |
| |
| // not checking all contents of doc, see builder tests for those |
| |
| // get the package and its files, checking licenses for each, and |
| // confirming NOASSERTION for those that are skipped |
| pkg := doc.Packages[0] |
| if pkg == nil { |
| t.Fatalf("expected non-nil pkg, got nil") |
| } |
| if len(pkg.Files) != 5 { |
| t.Fatalf("expected len %d, got %d", 5, len(pkg.Files)) |
| } |
| |
| f := pkg.Files[0] |
| if f.FileName != "./dontscan.txt" { |
| t.Errorf("expected %v, got %v", "./dontscan.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[1] |
| if f.FileName != "./keep/keep.txt" { |
| t.Errorf("expected %v, got %v", "./keep/keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[2] |
| if f.FileName != "./keep.txt" { |
| t.Errorf("expected %v, got %v", "./keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[3] |
| if f.FileName != "./subdir/keep/dontscan.txt" { |
| t.Errorf("expected %v, got %v", "./subdir/keep/dontscan.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[4] |
| if f.FileName != "./subdir/keep/keep.txt" { |
| t.Errorf("expected %v, got %v", "./subdir/keep/keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) |
| } |
| } |
| |
| func Test2_2SearcherFailsWithInvalidPath(t *testing.T) { |
| packageName := "project2" |
| dirRoot := "./oops/invalid" |
| config := &Config2_2{ |
| NamespacePrefix: "whatever", |
| } |
| |
| _, err := BuildIDsDocument2_2(packageName, dirRoot, config) |
| if err == nil { |
| t.Fatalf("expected non-nil error, got nil") |
| } |
| } |
| |
| // ===== 2.3 Searcher top-level function tests ===== |
| func Test2_3SearcherCanFillInIDs(t *testing.T) { |
| packageName := "project2" |
| dirRoot := "../testdata/project2/" |
| config := &Config2_3{ |
| NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", |
| } |
| |
| doc, err := BuildIDsDocument2_3(packageName, dirRoot, config) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| if doc == nil { |
| t.Fatalf("expected non-nil Document, got nil") |
| } |
| |
| // not checking all contents of doc, see builder tests for those |
| |
| // get the package and its files, checking size of each |
| if doc.Packages == nil { |
| t.Fatalf("expected non-nil Packages, got nil") |
| } |
| if len(doc.Packages) != 1 { |
| t.Fatalf("expected Packages len to be 1, got %d", len(doc.Packages)) |
| } |
| pkg := doc.Packages[0] |
| if pkg == nil { |
| t.Fatalf("expected non-nil pkg, got nil") |
| } |
| |
| if pkg.Files == nil { |
| t.Fatalf("expected non-nil Files, got nil") |
| } |
| if len(pkg.Files) != 6 { |
| t.Fatalf("expected Files len to be 6, got %d", len(pkg.Files)) |
| } |
| |
| fileInFolder := pkg.Files[0] |
| if fileInFolder.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileInFolder.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileInFolder.LicenseInfoInFiles)) |
| } |
| if fileInFolder.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseInfoInFiles[0]) |
| } |
| if fileInFolder.LicenseConcluded != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileInFolder.LicenseConcluded) |
| } |
| |
| fileTrailingComment := pkg.Files[1] |
| if fileTrailingComment.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileTrailingComment.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileTrailingComment.LicenseInfoInFiles)) |
| } |
| if fileTrailingComment.LicenseInfoInFiles[0] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseInfoInFiles[0]) |
| } |
| if fileTrailingComment.LicenseConcluded != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileTrailingComment.LicenseConcluded) |
| } |
| |
| fileHasDuplicateID := pkg.Files[2] |
| if fileHasDuplicateID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileHasDuplicateID.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileHasDuplicateID.LicenseInfoInFiles)) |
| } |
| if fileHasDuplicateID.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseInfoInFiles[0]) |
| } |
| if fileHasDuplicateID.LicenseConcluded != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileHasDuplicateID.LicenseConcluded) |
| } |
| |
| fileHasID := pkg.Files[3] |
| if fileHasID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileHasID.LicenseInfoInFiles) != 2 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 2, got %d", len(fileHasID.LicenseInfoInFiles)) |
| } |
| if fileHasID.LicenseInfoInFiles[0] != "Apache-2.0" { |
| t.Errorf("expected %v, got %v", "Apache-2.0", fileHasID.LicenseInfoInFiles[0]) |
| } |
| if fileHasID.LicenseInfoInFiles[1] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", fileHasID.LicenseInfoInFiles[1]) |
| } |
| if fileHasID.LicenseConcluded != "Apache-2.0 OR GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "Apache-2.0 OR GPL-2.0-or-later", fileHasID.LicenseConcluded) |
| } |
| |
| fileMultipleIDs := pkg.Files[4] |
| if fileMultipleIDs.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileMultipleIDs.LicenseInfoInFiles) != 5 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 5, got %d", len(fileMultipleIDs.LicenseInfoInFiles)) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[0] != "BSD-2-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-2-Clause", fileMultipleIDs.LicenseInfoInFiles[0]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[1] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", fileMultipleIDs.LicenseInfoInFiles[1]) |
| } |
| // here, DO NOT keep the + |
| if fileMultipleIDs.LicenseInfoInFiles[2] != "EPL-1.0" { |
| t.Errorf("expected %v, got %v", "EPL-1.0", fileMultipleIDs.LicenseInfoInFiles[2]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[3] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", fileMultipleIDs.LicenseInfoInFiles[3]) |
| } |
| if fileMultipleIDs.LicenseInfoInFiles[4] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", fileMultipleIDs.LicenseInfoInFiles[4]) |
| } |
| if fileMultipleIDs.LicenseConcluded != "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+" { |
| t.Errorf("expected %v, got %v", "((MIT AND BSD-3-Clause) OR ISC) AND BSD-2-Clause AND EPL-1.0+", fileMultipleIDs.LicenseConcluded) |
| } |
| |
| fileNoID := pkg.Files[5] |
| if fileNoID.LicenseInfoInFiles == nil { |
| t.Fatalf("expected non-nil LicenseInfoInFiles, got nil") |
| } |
| if len(fileNoID.LicenseInfoInFiles) != 1 { |
| t.Fatalf("expected LicenseInfoInFiles len to be 1, got %d", len(fileNoID.LicenseInfoInFiles)) |
| } |
| if fileNoID.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseInfoInFiles[0]) |
| } |
| if fileNoID.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %v, got %v", "NOASSERTION", fileNoID.LicenseConcluded) |
| } |
| |
| // and finally, the package should have all of these licenses |
| if pkg.PackageLicenseInfoFromFiles == nil { |
| t.Fatalf("expected non-nil PackageLicenseInfoFromFiles, got nil") |
| } |
| if len(pkg.PackageLicenseInfoFromFiles) != 7 { |
| t.Fatalf("expected PackageLicenseInfoFromFiles len to be 7, got %d", len(pkg.PackageLicenseInfoFromFiles)) |
| } |
| if pkg.PackageLicenseInfoFromFiles[0] != "Apache-2.0" { |
| t.Errorf("expected %v, got %v", "Apache-2.0", pkg.PackageLicenseInfoFromFiles[0]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[1] != "BSD-2-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-2-Clause", pkg.PackageLicenseInfoFromFiles[1]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[2] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", pkg.PackageLicenseInfoFromFiles[2]) |
| } |
| // here, DO NOT keep the + |
| if pkg.PackageLicenseInfoFromFiles[3] != "EPL-1.0" { |
| t.Errorf("expected %v, got %v", "EPL-1.0", pkg.PackageLicenseInfoFromFiles[3]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[4] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", pkg.PackageLicenseInfoFromFiles[4]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[5] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", pkg.PackageLicenseInfoFromFiles[5]) |
| } |
| if pkg.PackageLicenseInfoFromFiles[6] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", pkg.PackageLicenseInfoFromFiles[6]) |
| } |
| |
| } |
| |
| func Test2_3SearcherCanFillInIDsAndIgnorePaths(t *testing.T) { |
| packageName := "project3" |
| dirRoot := "../testdata/project3/" |
| config := &Config2_3{ |
| NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", |
| BuilderPathsIgnored: []string{ |
| "**/ignoredir/", |
| "/excludedir/", |
| "**/ignorefile.txt", |
| "/alsoEXCLUDEthis.txt", |
| }, |
| SearcherPathsIgnored: []string{ |
| "**/dontscan.txt", |
| }, |
| } |
| |
| doc, err := BuildIDsDocument2_3(packageName, dirRoot, config) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| if doc == nil { |
| t.Fatalf("expected non-nil Document, got nil") |
| } |
| |
| // not checking all contents of doc, see builder tests for those |
| |
| // get the package and its files, checking licenses for each, and |
| // confirming NOASSERTION for those that are skipped |
| pkg := doc.Packages[0] |
| if pkg == nil { |
| t.Fatalf("expected non-nil pkg, got nil") |
| } |
| if len(pkg.Files) != 5 { |
| t.Fatalf("expected len %d, got %d", 5, len(pkg.Files)) |
| } |
| |
| f := pkg.Files[0] |
| if f.FileName != "./dontscan.txt" { |
| t.Errorf("expected %v, got %v", "./dontscan.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[1] |
| if f.FileName != "./keep/keep.txt" { |
| t.Errorf("expected %v, got %v", "./keep/keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[2] |
| if f.FileName != "./keep.txt" { |
| t.Errorf("expected %v, got %v", "./keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[3] |
| if f.FileName != "./subdir/keep/dontscan.txt" { |
| t.Errorf("expected %v, got %v", "./subdir/keep/dontscan.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "NOASSERTION" { |
| t.Errorf("expected %s, got %s", "NOASSERTION", f.LicenseConcluded) |
| } |
| |
| f = pkg.Files[4] |
| if f.FileName != "./subdir/keep/keep.txt" { |
| t.Errorf("expected %v, got %v", "./subdir/keep/keep.txt", f.FileName) |
| } |
| if len(f.LicenseInfoInFiles) != 1 { |
| t.Errorf("expected len to be %d, got %d", 1, len(f.LicenseInfoInFiles)) |
| } |
| if f.LicenseInfoInFiles[0] != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseInfoInFiles[0]) |
| } |
| if f.LicenseConcluded != "MIT" { |
| t.Errorf("expected %s, got %s", "MIT", f.LicenseConcluded) |
| } |
| } |
| |
| func Test2_3SearcherFailsWithInvalidPath(t *testing.T) { |
| packageName := "project2" |
| dirRoot := "./oops/invalid" |
| config := &Config2_3{ |
| NamespacePrefix: "whatever", |
| } |
| |
| _, err := BuildIDsDocument2_3(packageName, dirRoot, config) |
| if err == nil { |
| t.Fatalf("expected non-nil error, got nil") |
| } |
| } |
| |
| // ===== Searcher utility tests ===== |
| func TestCanFindShortFormIDWhenPresent(t *testing.T) { |
| filePath := "../testdata/project2/has-id.txt" |
| |
| ids, err := searchFileIDs(filePath) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| |
| if len(ids) != 1 { |
| t.Fatalf("expected len 1, got %d", len(ids)) |
| } |
| |
| if ids[0] != "Apache-2.0 OR GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "Apache-2.0 OR GPL-2.0-or-later", ids[0]) |
| } |
| } |
| |
| func TestCanFindMultipleShortFormIDsWhenPresent(t *testing.T) { |
| filePath := "../testdata/project2/has-multiple-ids.txt" |
| |
| ids, err := searchFileIDs(filePath) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| |
| if len(ids) != 3 { |
| t.Fatalf("expected len 3, got %d", len(ids)) |
| } |
| |
| if ids[0] != "(MIT AND BSD-3-Clause) OR ISC" { |
| t.Errorf("expected %v, got %v", "(MIT AND BSD-3-Clause) OR ISC", ids[0]) |
| } |
| if ids[1] != "BSD-2-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-2-Clause", ids[1]) |
| } |
| if ids[2] != "EPL-1.0+" { |
| t.Errorf("expected %v, got %v", "EPL-1.0+", ids[2]) |
| } |
| } |
| |
| func TestCanCollapseDuplicateShortFormIDsWhenPresent(t *testing.T) { |
| filePath := "../testdata/project2/has-duplicate-ids.txt" |
| |
| ids, err := searchFileIDs(filePath) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| |
| if len(ids) != 1 { |
| t.Fatalf("expected len 1, got %d", len(ids)) |
| } |
| |
| if ids[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", ids[0]) |
| } |
| } |
| |
| func TestCanStripTrailingStarSlash(t *testing.T) { |
| filePath := "../testdata/project2/folder/has-trailing-comment-marker.c" |
| |
| ids, err := searchFileIDs(filePath) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| |
| if len(ids) != 1 { |
| t.Fatalf("expected len 1, got %d", len(ids)) |
| } |
| |
| if ids[0] != "GPL-2.0-or-later" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-or-later", ids[0]) |
| } |
| } |
| |
| func TestCanIgnoreShortFormIDWhenTooManyPrefixChars(t *testing.T) { |
| filePath := "../testdata/project4/has-id-to-ignore.txt" |
| |
| ids, err := searchFileIDs(filePath) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| |
| if len(ids) != 0 { |
| t.Fatalf("expected len 0, got %d", len(ids)) |
| } |
| } |
| |
| func TestCanPickJustTheRightID(t *testing.T) { |
| filePath := "../testdata/project4/has-mix-of-ids.txt" |
| |
| ids, err := searchFileIDs(filePath) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| |
| if len(ids) != 1 { |
| t.Fatalf("expected len 1, got %d", len(ids)) |
| } |
| |
| if ids[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", ids[0]) |
| } |
| } |
| |
| func TestCannotFindShortFormIDWhenAbsent(t *testing.T) { |
| filePath := "../testdata/project2/no-id.txt" |
| |
| ids, err := searchFileIDs(filePath) |
| if err != nil { |
| t.Fatalf("expected nil error, got %v", err) |
| } |
| |
| if len(ids) != 0 { |
| t.Fatalf("expected len 0, got %d", len(ids)) |
| } |
| } |
| |
| func TestCanExcludeTrashCharactersFromID(t *testing.T) { |
| lid := "Apac\",he-2.0" |
| want := "Apache-2.0" |
| got := stripTrash(lid) |
| if want != got { |
| t.Errorf("expected %v, got %v", want, got) |
| } |
| |
| lid = "Apache-2.0" |
| want = "Apache-2.0" |
| got = stripTrash(lid) |
| if want != got { |
| t.Errorf("expected %v, got %v", want, got) |
| } |
| } |
| |
| func TestSearchFileIDsFailsWithInvalidFilePath(t *testing.T) { |
| filePath := "./oops/nm/invalid" |
| |
| _, err := searchFileIDs(filePath) |
| if err == nil { |
| t.Fatalf("expected non-nil error, got nil") |
| } |
| } |
| |
| func TestWillParenthesizeIfNeeded(t *testing.T) { |
| licID := "MIT OR BSD-3-Clause" |
| retval := makeElement(licID) |
| if retval != "(MIT OR BSD-3-Clause)" { |
| t.Errorf("expected %v, got %v", "(MIT OR BSD-3-Clause)", retval) |
| } |
| |
| licID = "ISC AND HPND" |
| retval = makeElement(licID) |
| if retval != "(ISC AND HPND)" { |
| t.Errorf("expected %v, got %v", "(ISC AND HPND)", retval) |
| } |
| } |
| |
| func TestWillNotParenthesizeIfNotNeeded(t *testing.T) { |
| lic := "MIT" |
| retval := makeElement(lic) |
| if retval != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", retval) |
| } |
| |
| lic = "GPL-2.0-only WITH Classpath-exception-2.0" |
| retval = makeElement(lic) |
| if retval != "GPL-2.0-only WITH Classpath-exception-2.0" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-only WITH Classpath-exception-2.0", retval) |
| } |
| } |
| |
| func TestCanGetIndividualLicenses(t *testing.T) { |
| // single license |
| lic := "MIT" |
| lics := getIndividualLicenses(lic) |
| if lics == nil { |
| t.Fatalf("expected non-nil lics, got nil") |
| } |
| if len(lics) != 1 { |
| t.Fatalf("expected lics to have len 1, got %d", len(lics)) |
| } |
| if lics[0] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", lics[0]) |
| } |
| |
| // two-license combo |
| lic = "ISC AND BSD-3-Clause" |
| lics = getIndividualLicenses(lic) |
| if lics == nil { |
| t.Fatalf("expected non-nil lics, got nil") |
| } |
| if len(lics) != 2 { |
| t.Fatalf("expected lics to have len 2, got %d", len(lics)) |
| } |
| // should be sorted alphabetically |
| if lics[0] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", lics[0]) |
| } |
| if lics[1] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", lics[1]) |
| } |
| |
| // license WITH exception |
| lic = "GPL-2.0-only WITH Classpath-exception-2.0" |
| lics = getIndividualLicenses(lic) |
| if lics == nil { |
| t.Fatalf("expected non-nil lics, got nil") |
| } |
| if len(lics) != 2 { |
| t.Fatalf("expected lics to have len 2, got %d", len(lics)) |
| } |
| // exception should be listed separately |
| if lics[0] != "Classpath-exception-2.0" { |
| t.Errorf("expected %v, got %v", "Classpath-exception-2.0", lics[0]) |
| } |
| if lics[1] != "GPL-2.0-only" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-only", lics[1]) |
| } |
| |
| // two-license combo with parens |
| lic = "(JSON OR BSD-2-Clause)" |
| lics = getIndividualLicenses(lic) |
| if lics == nil { |
| t.Fatalf("expected non-nil lics, got nil") |
| } |
| if len(lics) != 2 { |
| t.Fatalf("expected lics to have len 2, got %d", len(lics)) |
| } |
| // parens should get dropped |
| if lics[0] != "BSD-2-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-2-Clause", lics[0]) |
| } |
| if lics[1] != "JSON" { |
| t.Errorf("expected %v, got %v", "JSON", lics[1]) |
| } |
| |
| // multi-license combo with nested parens |
| lic = "GPL-2.0-only AND ((EPL-1.0 AND BSD-4-Clause) OR MIT)" |
| lics = getIndividualLicenses(lic) |
| if lics == nil { |
| t.Fatalf("expected non-nil lics, got nil") |
| } |
| if len(lics) != 4 { |
| t.Fatalf("expected lics to have len 4, got %d", len(lics)) |
| } |
| if lics[0] != "BSD-4-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-4-Clause", lics[0]) |
| } |
| if lics[1] != "EPL-1.0" { |
| t.Errorf("expected %v, got %v", "EPL-1.0", lics[1]) |
| } |
| if lics[2] != "GPL-2.0-only" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-only", lics[2]) |
| } |
| if lics[3] != "MIT" { |
| t.Errorf("expected %v, got %v", "MIT", lics[3]) |
| } |
| } |
| |
| func TestCanGetIndividualLicensesIgnoringOperatorCase(t *testing.T) { |
| // two-license combo with lowercase 'and' |
| lic := "ISC and BSD-3-Clause" |
| lics := getIndividualLicenses(lic) |
| if lics == nil { |
| t.Fatalf("expected non-nil lics, got nil") |
| } |
| // should be sorted alphabetically; 'and' should not appear |
| if len(lics) != 2 { |
| t.Fatalf("expected lics to have len 2, got %d", len(lics)) |
| } |
| if lics[0] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", lics[0]) |
| } |
| if lics[1] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", lics[1]) |
| } |
| |
| // two-license combo with lowercase 'or' |
| lic = "ISC or BSD-3-Clause" |
| lics = getIndividualLicenses(lic) |
| if lics == nil { |
| t.Fatalf("expected non-nil lics, got nil") |
| } |
| // should be sorted alphabetically; 'or' should not appear |
| if len(lics) != 2 { |
| t.Fatalf("expected lics to have len 2, got %d", len(lics)) |
| } |
| if lics[0] != "BSD-3-Clause" { |
| t.Errorf("expected %v, got %v", "BSD-3-Clause", lics[0]) |
| } |
| if lics[1] != "ISC" { |
| t.Errorf("expected %v, got %v", "ISC", lics[1]) |
| } |
| |
| // two-license combo with lowercase 'with' |
| lic = "GPL-2.0-only with Classpath-exception-2.0" |
| lics = getIndividualLicenses(lic) |
| if lics == nil { |
| t.Fatalf("expected non-nil lics, got nil") |
| } |
| // should be sorted alphabetically; 'with' should not appear |
| if len(lics) != 2 { |
| t.Fatalf("expected lics to have len 2, got %d", len(lics)) |
| } |
| if lics[0] != "Classpath-exception-2.0" { |
| t.Errorf("expected %v, got %v", "Classpath-exception-2.0", lics[0]) |
| } |
| if lics[1] != "GPL-2.0-only" { |
| t.Errorf("expected %v, got %v", "GPL-2.0-only", lics[1]) |
| } |
| |
| } |