xref: /aosp_15_r20/external/spdx-tools/tvloader/parser2v1/parser_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
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