xref: /aosp_15_r20/external/spdx-tools/tvloader/parser2v3/parse_annotation_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/spdx/v2_3"
8*ba677afaSXin Li)
9*ba677afaSXin Li
10*ba677afaSXin Li// ===== Annotation section tests =====
11*ba677afaSXin Lifunc TestParser2_3FailsIfAnnotationNotSet(t *testing.T) {
12*ba677afaSXin Li	parser := tvParser2_3{
13*ba677afaSXin Li		doc: &v2_3.Document{},
14*ba677afaSXin Li		st:  psCreationInfo2_3,
15*ba677afaSXin Li	}
16*ba677afaSXin Li	err := parser.parsePairForAnnotation2_3("Annotator", "Person: John Doe ([email protected])")
17*ba677afaSXin Li	if err == nil {
18*ba677afaSXin Li		t.Errorf("expected error when calling parsePairFromAnnotation2_3 without setting ann pointer")
19*ba677afaSXin Li	}
20*ba677afaSXin Li}
21*ba677afaSXin Li
22*ba677afaSXin Lifunc TestParser2_3FailsIfAnnotationTagUnknown(t *testing.T) {
23*ba677afaSXin Li	parser := tvParser2_3{
24*ba677afaSXin Li		doc: &v2_3.Document{},
25*ba677afaSXin Li		st:  psCreationInfo2_3,
26*ba677afaSXin Li	}
27*ba677afaSXin Li	// start with valid annotator
28*ba677afaSXin Li	err := parser.parsePair2_3("Annotator", "Person: John Doe ([email protected])")
29*ba677afaSXin Li	if err != nil {
30*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
31*ba677afaSXin Li	}
32*ba677afaSXin Li	// parse invalid tag, using parsePairForAnnotation2_3(
33*ba677afaSXin Li	err = parser.parsePairForAnnotation2_3("blah", "oops")
34*ba677afaSXin Li	if err == nil {
35*ba677afaSXin Li		t.Errorf("expected non-nil error, got nil")
36*ba677afaSXin Li	}
37*ba677afaSXin Li}
38*ba677afaSXin Li
39*ba677afaSXin Lifunc TestParser2_3FailsIfAnnotationFieldsWithoutAnnotation(t *testing.T) {
40*ba677afaSXin Li	parser := tvParser2_3{
41*ba677afaSXin Li		doc: &v2_3.Document{},
42*ba677afaSXin Li		st:  psCreationInfo2_3,
43*ba677afaSXin Li	}
44*ba677afaSXin Li	err := parser.parsePair2_3("AnnotationDate", "2018-09-15T17:25:00Z")
45*ba677afaSXin Li	if err == nil {
46*ba677afaSXin Li		t.Errorf("expected error when calling parsePair2_3 for AnnotationDate without Annotator first")
47*ba677afaSXin Li	}
48*ba677afaSXin Li	err = parser.parsePair2_3("AnnotationType", "REVIEW")
49*ba677afaSXin Li	if err == nil {
50*ba677afaSXin Li		t.Errorf("expected error when calling parsePair2_3 for AnnotationType without Annotator first")
51*ba677afaSXin Li	}
52*ba677afaSXin Li	err = parser.parsePair2_3("SPDXREF", "SPDXRef-45")
53*ba677afaSXin Li	if err == nil {
54*ba677afaSXin Li		t.Errorf("expected error when calling parsePair2_3 for SPDXREF without Annotator first")
55*ba677afaSXin Li	}
56*ba677afaSXin Li	err = parser.parsePair2_3("AnnotationComment", "comment whatever")
57*ba677afaSXin Li	if err == nil {
58*ba677afaSXin Li		t.Errorf("expected error when calling parsePair2_3 for AnnotationComment without Annotator first")
59*ba677afaSXin Li	}
60*ba677afaSXin Li}
61*ba677afaSXin Li
62*ba677afaSXin Lifunc TestParser2_3CanParseAnnotationTags(t *testing.T) {
63*ba677afaSXin Li	parser := tvParser2_3{
64*ba677afaSXin Li		doc: &v2_3.Document{},
65*ba677afaSXin Li		st:  psCreationInfo2_3,
66*ba677afaSXin Li	}
67*ba677afaSXin Li
68*ba677afaSXin Li	// Annotator without email address
69*ba677afaSXin Li	err := parser.parsePair2_3("Annotator", "Person: John Doe")
70*ba677afaSXin Li	if err != nil {
71*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
72*ba677afaSXin Li	}
73*ba677afaSXin Li	if parser.ann.Annotator.Annotator != "John Doe" {
74*ba677afaSXin Li		t.Errorf("got %+v for Annotator, expected John Doe", parser.ann.Annotator.Annotator)
75*ba677afaSXin Li	}
76*ba677afaSXin Li	if parser.ann.Annotator.AnnotatorType != "Person" {
77*ba677afaSXin Li		t.Errorf("got %v for AnnotatorType, expected Person", parser.ann.Annotator.AnnotatorType)
78*ba677afaSXin Li	}
79*ba677afaSXin Li
80*ba677afaSXin Li	// Annotation Date
81*ba677afaSXin Li	dt := "2018-09-15T17:32:00Z"
82*ba677afaSXin Li	err = parser.parsePair2_3("AnnotationDate", dt)
83*ba677afaSXin Li	if err != nil {
84*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
85*ba677afaSXin Li	}
86*ba677afaSXin Li	if parser.ann.AnnotationDate != dt {
87*ba677afaSXin Li		t.Errorf("got %v for AnnotationDate, expected %v", parser.ann.AnnotationDate, dt)
88*ba677afaSXin Li	}
89*ba677afaSXin Li
90*ba677afaSXin Li	// Annotation type
91*ba677afaSXin Li	aType := "REVIEW"
92*ba677afaSXin Li	err = parser.parsePair2_3("AnnotationType", aType)
93*ba677afaSXin Li	if err != nil {
94*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
95*ba677afaSXin Li	}
96*ba677afaSXin Li	if parser.ann.AnnotationType != aType {
97*ba677afaSXin Li		t.Errorf("got %v for AnnotationType, expected %v", parser.ann.AnnotationType, aType)
98*ba677afaSXin Li	}
99*ba677afaSXin Li
100*ba677afaSXin Li	// SPDX Identifier Reference
101*ba677afaSXin Li	ref := "SPDXRef-30"
102*ba677afaSXin Li	err = parser.parsePair2_3("SPDXREF", ref)
103*ba677afaSXin Li	if err != nil {
104*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
105*ba677afaSXin Li	}
106*ba677afaSXin Li	deID := parser.ann.AnnotationSPDXIdentifier
107*ba677afaSXin Li	if deID.DocumentRefID != "" || deID.ElementRefID != "30" {
108*ba677afaSXin Li		t.Errorf("got %v for SPDXREF, expected %v", parser.ann.AnnotationSPDXIdentifier, "30")
109*ba677afaSXin Li	}
110*ba677afaSXin Li
111*ba677afaSXin Li	// Annotation Comment
112*ba677afaSXin Li	cmt := "this is a comment"
113*ba677afaSXin Li	err = parser.parsePair2_3("AnnotationComment", cmt)
114*ba677afaSXin Li	if err != nil {
115*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
116*ba677afaSXin Li	}
117*ba677afaSXin Li	if parser.ann.AnnotationComment != cmt {
118*ba677afaSXin Li		t.Errorf("got %v for AnnotationComment, expected %v", parser.ann.AnnotationComment, cmt)
119*ba677afaSXin Li	}
120*ba677afaSXin Li}
121*ba677afaSXin Li
122*ba677afaSXin Lifunc TestParser2_3FailsIfAnnotatorInvalid(t *testing.T) {
123*ba677afaSXin Li	parser := tvParser2_3{
124*ba677afaSXin Li		doc: &v2_3.Document{},
125*ba677afaSXin Li		st:  psCreationInfo2_3,
126*ba677afaSXin Li	}
127*ba677afaSXin Li	err := parser.parsePair2_3("Annotator", "John Doe ([email protected])")
128*ba677afaSXin Li	if err == nil {
129*ba677afaSXin Li		t.Errorf("expected non-nil error, got nil")
130*ba677afaSXin Li	}
131*ba677afaSXin Li}
132*ba677afaSXin Li
133*ba677afaSXin Lifunc TestParser2_3FailsIfAnnotatorTypeInvalid(t *testing.T) {
134*ba677afaSXin Li	parser := tvParser2_3{
135*ba677afaSXin Li		doc: &v2_3.Document{},
136*ba677afaSXin Li		st:  psCreationInfo2_3,
137*ba677afaSXin Li	}
138*ba677afaSXin Li	err := parser.parsePair2_3("Annotator", "Human: John Doe ([email protected])")
139*ba677afaSXin Li	if err == nil {
140*ba677afaSXin Li		t.Errorf("expected non-nil error, got nil")
141*ba677afaSXin Li	}
142*ba677afaSXin Li}
143*ba677afaSXin Li
144*ba677afaSXin Lifunc TestParser2_3FailsIfAnnotationRefInvalid(t *testing.T) {
145*ba677afaSXin Li	parser := tvParser2_3{
146*ba677afaSXin Li		doc: &v2_3.Document{},
147*ba677afaSXin Li		st:  psCreationInfo2_3,
148*ba677afaSXin Li	}
149*ba677afaSXin Li	// start with valid annotator
150*ba677afaSXin Li	err := parser.parsePair2_3("Annotator", "Person: John Doe ([email protected])")
151*ba677afaSXin Li	if err != nil {
152*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
153*ba677afaSXin Li	}
154*ba677afaSXin Li	err = parser.parsePair2_3("SPDXREF", "blah:other")
155*ba677afaSXin Li	if err == nil {
156*ba677afaSXin Li		t.Errorf("expected non-nil error, got nil")
157*ba677afaSXin Li	}
158*ba677afaSXin Li}
159