blob: a4412df3aa8f129557eb47f8ffb2617844f00b71 [file] [log] [blame]
// 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")
}
}