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