| // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later |
| package parser2v1 |
| |
| import ( |
| "testing" |
| |
| "github.com/spdx/tools-golang/spdx" |
| ) |
| |
| // ===== Parser snippet section state change tests ===== |
| func TestParser2_1SnippetStartsNewSnippetAfterParsingSnippetSPDXIDTag(t *testing.T) { |
| // create the first snippet |
| sid1 := spdx.ElementID("s1") |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "test", PackageSPDXIdentifier: "test", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{SnippetSPDXIdentifier: sid1}, |
| } |
| s1 := parser.snippet |
| parser.doc.Packages["test"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| parser.file.Snippets[sid1] = parser.snippet |
| |
| // the File's Snippets should have this one only |
| if len(parser.file.Snippets) != 1 { |
| t.Errorf("Expected len(Snippets) to be 1, got %d", len(parser.file.Snippets)) |
| } |
| if parser.file.Snippets["s1"] != s1 { |
| t.Errorf("Expected snippet %v in Snippets[s1], got %v", s1, parser.file.Snippets["s1"]) |
| } |
| if parser.file.Snippets["s1"].SnippetSPDXIdentifier != sid1 { |
| t.Errorf("expected snippet ID %s in Snippets[s1], got %s", sid1, parser.file.Snippets["s1"].SnippetSPDXIdentifier) |
| } |
| |
| // now add a new snippet |
| err := parser.parsePair2_1("SnippetSPDXID", "SPDXRef-s2") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| // state should be correct |
| if parser.st != psSnippet2_1 { |
| t.Errorf("expected state to be %v, got %v", psSnippet2_1, parser.st) |
| } |
| // and a snippet should be created |
| if parser.snippet == nil { |
| t.Fatalf("parser didn't create new snippet") |
| } |
| // and the snippet ID should be as expected |
| if parser.snippet.SnippetSPDXIdentifier != "s2" { |
| t.Errorf("expected snippet ID %s, got %s", "s2", parser.snippet.SnippetSPDXIdentifier) |
| } |
| // and the File's Snippets should be of size 2 and have these two |
| if len(parser.file.Snippets) != 2 { |
| t.Errorf("Expected len(Snippets) to be 2, got %d", len(parser.file.Snippets)) |
| } |
| if parser.file.Snippets["s1"] != s1 { |
| t.Errorf("Expected snippet %v in Snippets[s1], got %v", s1, parser.file.Snippets["s1"]) |
| } |
| if parser.file.Snippets["s1"].SnippetSPDXIdentifier != sid1 { |
| t.Errorf("expected snippet ID %s in Snippets[s1], got %s", sid1, parser.file.Snippets["s1"].SnippetSPDXIdentifier) |
| } |
| if parser.file.Snippets["s2"] != parser.snippet { |
| t.Errorf("Expected snippet %v in Snippets[s2], got %v", parser.snippet, parser.file.Snippets["s2"]) |
| } |
| if parser.file.Snippets["s2"].SnippetSPDXIdentifier != "s2" { |
| t.Errorf("expected snippet ID %s in Snippets[s2], got %s", "s2", parser.file.Snippets["s2"].SnippetSPDXIdentifier) |
| } |
| } |
| |
| func TestParser2_1SnippetStartsNewPackageAfterParsingPackageNameTag(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{SnippetSPDXIdentifier: "s1"}, |
| } |
| p1 := parser.pkg |
| f1 := parser.file |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| parser.file.Snippets["s1"] = parser.snippet |
| |
| // now add a new package |
| p2Name := "package2" |
| err := parser.parsePair2_1("PackageName", p2Name) |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| // state should go back to Package |
| if parser.st != psPackage2_1 { |
| t.Errorf("expected state to be %v, got %v", psPackage2_1, parser.st) |
| } |
| // and a package should be created |
| if parser.pkg == nil { |
| t.Fatalf("parser didn't create new pkg") |
| } |
| // and the package name should be as expected |
| if parser.pkg.PackageName != p2Name { |
| t.Errorf("expected package name %s, got %s", p2Name, parser.pkg.PackageName) |
| } |
| // and the package should default to true for FilesAnalyzed |
| if parser.pkg.FilesAnalyzed != true { |
| t.Errorf("expected FilesAnalyzed to default to true, got false") |
| } |
| if parser.pkg.IsFilesAnalyzedTagPresent != false { |
| t.Errorf("expected IsFilesAnalyzedTagPresent to default to false, got true") |
| } |
| // and the Document's Packages should still be of size 1 b/c no SPDX |
| // identifier has been seen yet |
| if len(parser.doc.Packages) != 1 { |
| t.Errorf("Expected len(Packages) to be 1, got %d", len(parser.doc.Packages)) |
| } |
| if parser.doc.Packages["package1"] != p1 { |
| t.Errorf("Expected package %v in Packages[package1], got %v", p1, parser.doc.Packages["package1"]) |
| } |
| if parser.doc.Packages["package1"].PackageName != "package1" { |
| t.Errorf("expected package name %s in Packages[package1], got %s", "package1", parser.doc.Packages["package1"].PackageName) |
| } |
| // and the first Package's Files should be of size 1 and have f1 only |
| if len(parser.doc.Packages["package1"].Files) != 1 { |
| t.Errorf("Expected 1 file in Packages[package1].Files, got %d", len(parser.doc.Packages["package1"].Files)) |
| } |
| if parser.doc.Packages["package1"].Files["f1"] != f1 { |
| t.Errorf("Expected file %v in Files[f1], got %v", f1, parser.doc.Packages["package1"].Files["f1"]) |
| } |
| if parser.doc.Packages["package1"].Files["f1"].FileName != "f1.txt" { |
| t.Errorf("expected file name %s in Files[f1], got %s", "f1.txt", parser.doc.Packages["package1"].Files["f1"].FileName) |
| } |
| // and the new Package should have no files |
| if len(parser.pkg.Files) != 0 { |
| t.Errorf("Expected no files in Packages[1].Files, got %d", len(parser.pkg.Files)) |
| } |
| // and the current file should be nil |
| if parser.file != nil { |
| t.Errorf("Expected nil for parser.file, got %v", parser.file) |
| } |
| // and the current snippet should be nil |
| if parser.snippet != nil { |
| t.Errorf("Expected nil for parser.snippet, got %v", parser.snippet) |
| } |
| } |
| |
| func TestParser2_1SnippetMovesToFileAfterParsingFileNameTag(t *testing.T) { |
| f1Name := "f1.txt" |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{SnippetSPDXIdentifier: "s1"}, |
| } |
| p1 := parser.pkg |
| f1 := parser.file |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| parser.file.Snippets["s1"] = parser.snippet |
| |
| f2Name := "f2.txt" |
| err := parser.parsePair2_1("FileName", f2Name) |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| // state should be correct |
| if parser.st != psFile2_1 { |
| t.Errorf("expected state to be %v, got %v", psSnippet2_1, parser.st) |
| } |
| // and current package should remain what it was |
| if parser.pkg != p1 { |
| t.Fatalf("expected package to remain %v, got %v", p1, parser.pkg) |
| } |
| // and a file should be created |
| if parser.file == nil { |
| t.Fatalf("parser didn't create new file") |
| } |
| // and the file name should be as expected |
| if parser.file.FileName != f2Name { |
| t.Errorf("expected file name %s, got %s", f2Name, parser.file.FileName) |
| } |
| // and the Package's Files should still be of size 1 since we haven't seen |
| // an SPDX identifier yet for this new file |
| if len(parser.pkg.Files) != 1 { |
| t.Errorf("Expected len(Files) to be 1, got %d", len(parser.pkg.Files)) |
| } |
| if parser.pkg.Files["f1"] != f1 { |
| t.Errorf("Expected file %v in Files[f1], got %v", f1, parser.pkg.Files["f1"]) |
| } |
| if parser.pkg.Files["f1"].FileName != f1Name { |
| t.Errorf("expected file name %s in Files[f1], got %s", f1Name, parser.pkg.Files["f1"].FileName) |
| } |
| // and the current snippet should be nil |
| if parser.snippet != nil { |
| t.Errorf("Expected nil for parser.snippet, got %v", parser.snippet) |
| } |
| } |
| |
| func TestParser2_1SnippetMovesToOtherLicenseAfterParsingLicenseIDTag(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{SnippetSPDXIdentifier: "s1"}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| parser.file.Snippets["s1"] = parser.snippet |
| |
| err := parser.parsePair2_1("LicenseID", "LicenseRef-TestLic") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| if parser.st != psOtherLicense2_1 { |
| t.Errorf("expected state to be %v, got %v", psOtherLicense2_1, parser.st) |
| } |
| } |
| |
| func TestParser2_1SnippetMovesToReviewAfterParsingReviewerTag(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{SnippetSPDXIdentifier: "s1"}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| parser.file.Snippets["s1"] = parser.snippet |
| |
| err := parser.parsePair2_1("Reviewer", "Person: John Doe") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| if parser.st != psReview2_1 { |
| t.Errorf("expected state to be %v, got %v", psReview2_1, parser.st) |
| } |
| } |
| |
| func TestParser2_1SnippetStaysAfterParsingRelationshipTags(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{SnippetSPDXIdentifier: "s1"}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| parser.file.Snippets["s1"] = parser.snippet |
| |
| err := parser.parsePair2_1("Relationship", "SPDXRef-blah CONTAINS SPDXRef-blah-else") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| // state should remain unchanged |
| if parser.st != psSnippet2_1 { |
| t.Errorf("expected state to be %v, got %v", psSnippet2_1, parser.st) |
| } |
| // and the relationship should be in the Document's Relationships |
| if len(parser.doc.Relationships) != 1 { |
| t.Fatalf("expected doc.Relationships to have len 1, got %d", len(parser.doc.Relationships)) |
| } |
| deID := parser.doc.Relationships[0].RefA |
| if deID.DocumentRefID != "" || deID.ElementRefID != "blah" { |
| t.Errorf("expected RefA to be %s, got %s", "blah", parser.doc.Relationships[0].RefA) |
| } |
| |
| err = parser.parsePair2_1("RelationshipComment", "blah") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| // state should still remain unchanged |
| if parser.st != psSnippet2_1 { |
| t.Errorf("expected state to be %v, got %v", psSnippet2_1, parser.st) |
| } |
| } |
| |
| func TestParser2_1SnippetStaysAfterParsingAnnotationTags(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{SnippetSPDXIdentifier: "s1"}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| parser.file.Snippets["s1"] = parser.snippet |
| |
| err := parser.parsePair2_1("Annotator", "Person: John Doe ()") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| if parser.st != psSnippet2_1 { |
| t.Errorf("parser is in state %v, expected %v", parser.st, psSnippet2_1) |
| } |
| |
| err = parser.parsePair2_1("AnnotationDate", "2018-09-15T00:36:00Z") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| if parser.st != psSnippet2_1 { |
| t.Errorf("parser is in state %v, expected %v", parser.st, psSnippet2_1) |
| } |
| |
| err = parser.parsePair2_1("AnnotationType", "REVIEW") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| if parser.st != psSnippet2_1 { |
| t.Errorf("parser is in state %v, expected %v", parser.st, psSnippet2_1) |
| } |
| |
| err = parser.parsePair2_1("SPDXREF", "SPDXRef-45") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| if parser.st != psSnippet2_1 { |
| t.Errorf("parser is in state %v, expected %v", parser.st, psSnippet2_1) |
| } |
| |
| err = parser.parsePair2_1("AnnotationComment", "i guess i had something to say about this particular file") |
| if err != nil { |
| t.Errorf("got error when calling parsePair2_1: %v", err) |
| } |
| if parser.st != psSnippet2_1 { |
| t.Errorf("parser is in state %v, expected %v", parser.st, psSnippet2_1) |
| } |
| |
| // and the annotation should be in the Document's Annotations |
| if len(parser.doc.Annotations) != 1 { |
| t.Fatalf("expected doc.Annotations to have len 1, got %d", len(parser.doc.Annotations)) |
| } |
| if parser.doc.Annotations[0].Annotator != "John Doe ()" { |
| t.Errorf("expected Annotator to be %s, got %s", "John Doe ()", parser.doc.Annotations[0].Annotator) |
| } |
| } |
| |
| // ===== Snippet data section tests ===== |
| func TestParser2_1CanParseSnippetTags(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| |
| // Snippet SPDX Identifier |
| err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "SPDXRef-s1") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| if parser.snippet.SnippetSPDXIdentifier != "s1" { |
| t.Errorf("got %v for SnippetSPDXIdentifier", parser.snippet.SnippetSPDXIdentifier) |
| } |
| |
| // Snippet from File SPDX Identifier |
| err = parser.parsePairFromSnippet2_1("SnippetFromFileSPDXID", "SPDXRef-f1") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| wantDeID := spdx.DocElementID{DocumentRefID: "", ElementRefID: spdx.ElementID("f1")} |
| if parser.snippet.SnippetFromFileSPDXIdentifier != wantDeID { |
| t.Errorf("got %v for SnippetFromFileSPDXIdentifier", parser.snippet.SnippetFromFileSPDXIdentifier) |
| } |
| |
| // Snippet Byte Range |
| err = parser.parsePairFromSnippet2_1("SnippetByteRange", "20:320") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| if parser.snippet.SnippetByteRangeStart != 20 { |
| t.Errorf("got %v for SnippetByteRangeStart", parser.snippet.SnippetByteRangeStart) |
| } |
| if parser.snippet.SnippetByteRangeEnd != 320 { |
| t.Errorf("got %v for SnippetByteRangeEnd", parser.snippet.SnippetByteRangeEnd) |
| } |
| |
| // Snippet Line Range |
| err = parser.parsePairFromSnippet2_1("SnippetLineRange", "5:12") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| if parser.snippet.SnippetLineRangeStart != 5 { |
| t.Errorf("got %v for SnippetLineRangeStart", parser.snippet.SnippetLineRangeStart) |
| } |
| if parser.snippet.SnippetLineRangeEnd != 12 { |
| t.Errorf("got %v for SnippetLineRangeEnd", parser.snippet.SnippetLineRangeEnd) |
| } |
| |
| // Snippet Concluded License |
| err = parser.parsePairFromSnippet2_1("SnippetLicenseConcluded", "BSD-3-Clause") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| if parser.snippet.SnippetLicenseConcluded != "BSD-3-Clause" { |
| t.Errorf("got %v for SnippetLicenseConcluded", parser.snippet.SnippetLicenseConcluded) |
| } |
| |
| // License Information in Snippet |
| lics := []string{ |
| "Apache-2.0", |
| "GPL-2.0-or-later", |
| "CC0-1.0", |
| } |
| for _, lic := range lics { |
| err = parser.parsePairFromSnippet2_1("LicenseInfoInSnippet", lic) |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| } |
| for _, licWant := range lics { |
| flagFound := false |
| for _, licCheck := range parser.snippet.LicenseInfoInSnippet { |
| if licWant == licCheck { |
| flagFound = true |
| } |
| } |
| if flagFound == false { |
| t.Errorf("didn't find %s in LicenseInfoInSnippet", licWant) |
| } |
| } |
| if len(lics) != len(parser.snippet.LicenseInfoInSnippet) { |
| t.Errorf("expected %d licenses in LicenseInfoInSnippet, got %d", len(lics), |
| len(parser.snippet.LicenseInfoInSnippet)) |
| } |
| |
| // Snippet Comments on License |
| err = parser.parsePairFromSnippet2_1("SnippetLicenseComments", "this is a comment about the licenses") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| if parser.snippet.SnippetLicenseComments != "this is a comment about the licenses" { |
| t.Errorf("got %v for SnippetLicenseComments", parser.snippet.SnippetLicenseComments) |
| } |
| |
| // Snippet Copyright Text |
| err = parser.parsePairFromSnippet2_1("SnippetCopyrightText", "copyright (c) John Doe and friends") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| if parser.snippet.SnippetCopyrightText != "copyright (c) John Doe and friends" { |
| t.Errorf("got %v for SnippetCopyrightText", parser.snippet.SnippetCopyrightText) |
| } |
| |
| // Snippet Comment |
| err = parser.parsePairFromSnippet2_1("SnippetComment", "this is a comment about the snippet") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| if parser.snippet.SnippetComment != "this is a comment about the snippet" { |
| t.Errorf("got %v for SnippetComment", parser.snippet.SnippetComment) |
| } |
| |
| // Snippet Name |
| err = parser.parsePairFromSnippet2_1("SnippetName", "from some other package called abc") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| if parser.snippet.SnippetName != "from some other package called abc" { |
| t.Errorf("got %v for SnippetName", parser.snippet.SnippetName) |
| } |
| } |
| |
| func TestParser2_1SnippetUnknownTagFails(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{SnippetSPDXIdentifier: "s1"}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| |
| err := parser.parsePairFromSnippet2_1("blah", "something") |
| if err == nil { |
| t.Errorf("expected error from parsing unknown tag") |
| } |
| } |
| |
| func TestParser2_1FailsForInvalidSnippetSPDXID(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| |
| // invalid Snippet SPDX Identifier |
| err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "whoops") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| } |
| |
| func TestParser2_1FailsForInvalidSnippetFromFileSPDXID(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| |
| // start with Snippet SPDX Identifier |
| err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "SPDXRef-s1") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| // invalid From File identifier |
| err = parser.parsePairFromSnippet2_1("SnippetFromFileSPDXID", "whoops") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| } |
| |
| func TestParser2_1FailsForInvalidSnippetByteValues(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| |
| // start with Snippet SPDX Identifier |
| err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "SPDXRef-s1") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| // invalid byte formats and values |
| err = parser.parsePairFromSnippet2_1("SnippetByteRange", "200 210") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| err = parser.parsePairFromSnippet2_1("SnippetByteRange", "a:210") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| err = parser.parsePairFromSnippet2_1("SnippetByteRange", "200:a") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| } |
| |
| func TestParser2_1FailsForInvalidSnippetLineValues(t *testing.T) { |
| parser := tvParser2_1{ |
| doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}}, |
| st: psSnippet2_1, |
| pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}}, |
| file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}}, |
| snippet: &spdx.Snippet2_1{}, |
| } |
| parser.doc.Packages["package1"] = parser.pkg |
| parser.pkg.Files["f1"] = parser.file |
| |
| // start with Snippet SPDX Identifier |
| err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "SPDXRef-s1") |
| if err != nil { |
| t.Errorf("expected nil error, got %v", err) |
| } |
| // invalid byte formats and values |
| err = parser.parsePairFromSnippet2_1("SnippetLineRange", "200 210") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| err = parser.parsePairFromSnippet2_1("SnippetLineRange", "a:210") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| err = parser.parsePairFromSnippet2_1("SnippetLineRange", "200:a") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| } |
| |