98 lines
2.9 KiB
Go
98 lines
2.9 KiB
Go
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
|
package parser2v2
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/spdx/tools-golang/tvloader/reader"
|
|
)
|
|
|
|
// ===== Parser exported entry point tests =====
|
|
func TestParser2_2CanParseTagValues(t *testing.T) {
|
|
var tvPairs []reader.TagValuePair
|
|
|
|
// create some pairs
|
|
tvPair1 := reader.TagValuePair{Tag: "SPDXVersion", Value: "SPDX-2.2"}
|
|
tvPairs = append(tvPairs, tvPair1)
|
|
tvPair2 := reader.TagValuePair{Tag: "DataLicense", Value: "CC0-1.0"}
|
|
tvPairs = append(tvPairs, tvPair2)
|
|
tvPair3 := reader.TagValuePair{Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"}
|
|
tvPairs = append(tvPairs, tvPair3)
|
|
|
|
// now parse them
|
|
doc, err := ParseTagValues(tvPairs)
|
|
if err != nil {
|
|
t.Errorf("got error when calling ParseTagValues: %v", err)
|
|
}
|
|
if doc.SPDXVersion != "SPDX-2.2" {
|
|
t.Errorf("expected SPDXVersion to be SPDX-2.2, got %v", doc.SPDXVersion)
|
|
}
|
|
if doc.DataLicense != "CC0-1.0" {
|
|
t.Errorf("expected DataLicense to be CC0-1.0, got %v", doc.DataLicense)
|
|
}
|
|
if doc.SPDXIdentifier != "DOCUMENT" {
|
|
t.Errorf("expected SPDXIdentifier to be DOCUMENT, got %v", doc.SPDXIdentifier)
|
|
}
|
|
|
|
}
|
|
|
|
// ===== Parser initialization tests =====
|
|
func TestParser2_2InitCreatesResetStatus(t *testing.T) {
|
|
parser := tvParser2_2{}
|
|
if parser.st != psStart2_2 {
|
|
t.Errorf("parser did not begin in start state")
|
|
}
|
|
if parser.doc != nil {
|
|
t.Errorf("parser did not begin with nil document")
|
|
}
|
|
}
|
|
|
|
func TestParser2_2HasDocumentAfterCallToParseFirstTag(t *testing.T) {
|
|
parser := tvParser2_2{}
|
|
err := parser.parsePair2_2("SPDXVersion", "SPDX-2.2")
|
|
if err != nil {
|
|
t.Errorf("got error when calling parsePair2_2: %v", err)
|
|
}
|
|
if parser.doc == nil {
|
|
t.Errorf("doc is still nil after parsing first pair")
|
|
}
|
|
}
|
|
|
|
func TestParser2_2StartFailsToParseIfInInvalidState(t *testing.T) {
|
|
parser := tvParser2_2{st: psReview2_2}
|
|
err := parser.parsePairFromStart2_2("SPDXVersion", "SPDX-2.2")
|
|
if err == nil {
|
|
t.Errorf("expected non-nil error, got nil")
|
|
}
|
|
}
|
|
|
|
func TestParser2_2FilesWithoutSpdxIdThrowErrorAtCompleteParse(t *testing.T) {
|
|
// case: Checks the last file
|
|
// Last unpackaged file with no packages in doc
|
|
// Last file of last package in the doc
|
|
tvPairs := []reader.TagValuePair{
|
|
{Tag: "SPDXVersion", Value: "SPDX-2.2"},
|
|
{Tag: "DataLicense", Value: "CC0-1.0"},
|
|
{Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"},
|
|
{Tag: "FileName", Value: "f1"},
|
|
}
|
|
_, err := ParseTagValues(tvPairs)
|
|
if err == nil {
|
|
t.Errorf("file without SPDX Identifier getting accepted")
|
|
}
|
|
}
|
|
|
|
func TestParser2_2PackageWithoutSpdxIdThrowErrorAtCompleteParse(t *testing.T) {
|
|
// case: Checks the last package
|
|
tvPairs := []reader.TagValuePair{
|
|
{Tag: "SPDXVersion", Value: "SPDX-2.2"},
|
|
{Tag: "DataLicense", Value: "CC0-1.0"},
|
|
{Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"},
|
|
{Tag: "PackageName", Value: "p1"},
|
|
}
|
|
_, err := ParseTagValues(tvPairs)
|
|
if err == nil {
|
|
t.Errorf("package without SPDX Identifier getting accepted")
|
|
}
|
|
}
|