1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2package parser2v1 3 4import ( 5 "testing" 6 7 "github.com/spdx/tools-golang/tvloader/reader" 8) 9 10// ===== Parser exported entry point tests ===== 11func TestParser2_1CanParseTagValues(t *testing.T) { 12 var tvPairs []reader.TagValuePair 13 14 // create some pairs 15 tvPair1 := reader.TagValuePair{Tag: "SPDXVersion", Value: "SPDX-2.1"} 16 tvPairs = append(tvPairs, tvPair1) 17 tvPair2 := reader.TagValuePair{Tag: "DataLicense", Value: "CC0-1.0"} 18 tvPairs = append(tvPairs, tvPair2) 19 tvPair3 := reader.TagValuePair{Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"} 20 tvPairs = append(tvPairs, tvPair3) 21 22 // now parse them 23 doc, err := ParseTagValues(tvPairs) 24 if err != nil { 25 t.Errorf("got error when calling ParseTagValues: %v", err) 26 } 27 if doc.SPDXVersion != "SPDX-2.1" { 28 t.Errorf("expected SPDXVersion to be SPDX-2.1, got %v", doc.SPDXVersion) 29 } 30 if doc.DataLicense != "CC0-1.0" { 31 t.Errorf("expected DataLicense to be CC0-1.0, got %v", doc.DataLicense) 32 } 33 if doc.SPDXIdentifier != "DOCUMENT" { 34 t.Errorf("expected SPDXIdentifier to be DOCUMENT, got %v", doc.SPDXIdentifier) 35 } 36 37} 38 39// ===== Parser initialization tests ===== 40func TestParser2_1InitCreatesResetStatus(t *testing.T) { 41 parser := tvParser2_1{} 42 if parser.st != psStart2_1 { 43 t.Errorf("parser did not begin in start state") 44 } 45 if parser.doc != nil { 46 t.Errorf("parser did not begin with nil document") 47 } 48} 49 50func TestParser2_1HasDocumentAfterCallToParseFirstTag(t *testing.T) { 51 parser := tvParser2_1{} 52 err := parser.parsePair2_1("SPDXVersion", "SPDX-2.1") 53 if err != nil { 54 t.Errorf("got error when calling parsePair2_1: %v", err) 55 } 56 if parser.doc == nil { 57 t.Errorf("doc is still nil after parsing first pair") 58 } 59} 60 61func TestParser2_1StartFailsToParseIfInInvalidState(t *testing.T) { 62 parser := tvParser2_1{st: psReview2_1} 63 err := parser.parsePairFromStart2_1("SPDXVersion", "SPDX-2.1") 64 if err == nil { 65 t.Errorf("expected non-nil error, got nil") 66 } 67} 68 69func TestParser2_1FilesWithoutSpdxIdThrowErrorAtCompleteParse(t *testing.T) { 70 // case: checks the last file 71 // Last unpackaged file no packages in doc 72 // Last file of last package in the doc 73 tvPairs := []reader.TagValuePair{ 74 {Tag: "SPDXVersion", Value: "SPDX-2.1"}, 75 {Tag: "DataLicense", Value: "CC0-1.0"}, 76 {Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"}, 77 {Tag: "FileName", Value: "f1"}, 78 } 79 _, err := ParseTagValues(tvPairs) 80 if err == nil { 81 t.Errorf("file without SPDX Identifier getting accepted") 82 } 83} 84 85func TestParser2_1PackageWithoutSpdxIdThrowErrorAtCompleteParse(t *testing.T) { 86 // case: Checks the last package 87 tvPairs := []reader.TagValuePair{ 88 {Tag: "SPDXVersion", Value: "SPDX-2.1"}, 89 {Tag: "DataLicense", Value: "CC0-1.0"}, 90 {Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"}, 91 {Tag: "PackageName", Value: "p1"}, 92 } 93 _, err := ParseTagValues(tvPairs) 94 if err == nil { 95 t.Errorf("package without SPDX Identifier getting accepted") 96 } 97} 98