xref: /aosp_15_r20/external/spdx-tools/tvloader/parser2v3/parse_review_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// ===== Parser review section state change tests =====
11*ba677afaSXin Lifunc TestParser2_3ReviewStartsNewReviewAfterParsingReviewerTag(t *testing.T) {
12*ba677afaSXin Li	// create the first review
13*ba677afaSXin Li	rev1 := "John Doe"
14*ba677afaSXin Li	parser := tvParser2_3{
15*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
16*ba677afaSXin Li		st:   psReview2_3,
17*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
18*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
19*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
20*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
21*ba677afaSXin Li			LicenseName:       "License 11",
22*ba677afaSXin Li		},
23*ba677afaSXin Li		rev: &v2_3.Review{
24*ba677afaSXin Li			Reviewer:     rev1,
25*ba677afaSXin Li			ReviewerType: "Person",
26*ba677afaSXin Li		},
27*ba677afaSXin Li	}
28*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
29*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
30*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
31*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
32*ba677afaSXin Li	r1 := parser.rev
33*ba677afaSXin Li
34*ba677afaSXin Li	// the Document's Reviews should have this one only
35*ba677afaSXin Li	if len(parser.doc.Reviews) != 1 {
36*ba677afaSXin Li		t.Errorf("Expected only one review, got %d", len(parser.doc.Reviews))
37*ba677afaSXin Li	}
38*ba677afaSXin Li	if parser.doc.Reviews[0] != r1 {
39*ba677afaSXin Li		t.Errorf("Expected review %v in Reviews[0], got %v", r1, parser.doc.Reviews[0])
40*ba677afaSXin Li	}
41*ba677afaSXin Li	if parser.doc.Reviews[0].Reviewer != rev1 {
42*ba677afaSXin Li		t.Errorf("expected review name %s in Reviews[0], got %s", rev1, parser.doc.Reviews[0].Reviewer)
43*ba677afaSXin Li	}
44*ba677afaSXin Li
45*ba677afaSXin Li	// now add a new review
46*ba677afaSXin Li	rev2 := "Steve"
47*ba677afaSXin Li	rp2 := "Person: Steve"
48*ba677afaSXin Li	err := parser.parsePair2_3("Reviewer", rp2)
49*ba677afaSXin Li	if err != nil {
50*ba677afaSXin Li		t.Errorf("got error when calling parsePair2_3: %v", err)
51*ba677afaSXin Li	}
52*ba677afaSXin Li	// state should be correct
53*ba677afaSXin Li	if parser.st != psReview2_3 {
54*ba677afaSXin Li		t.Errorf("expected state to be %v, got %v", psReview2_3, parser.st)
55*ba677afaSXin Li	}
56*ba677afaSXin Li	// and a review should be created
57*ba677afaSXin Li	if parser.rev == nil {
58*ba677afaSXin Li		t.Fatalf("parser didn't create new review")
59*ba677afaSXin Li	}
60*ba677afaSXin Li	// and the reviewer's name should be as expected
61*ba677afaSXin Li	if parser.rev.Reviewer != rev2 {
62*ba677afaSXin Li		t.Errorf("expected reviewer name %s, got %s", rev2, parser.rev.Reviewer)
63*ba677afaSXin Li	}
64*ba677afaSXin Li	// and the Document's reviews should be of size 2 and have these two
65*ba677afaSXin Li	if len(parser.doc.Reviews) != 2 {
66*ba677afaSXin Li		t.Fatalf("Expected Reviews to have len 2, got %d", len(parser.doc.Reviews))
67*ba677afaSXin Li	}
68*ba677afaSXin Li	if parser.doc.Reviews[0] != r1 {
69*ba677afaSXin Li		t.Errorf("Expected review %v in Reviews[0], got %v", r1, parser.doc.Reviews[0])
70*ba677afaSXin Li	}
71*ba677afaSXin Li	if parser.doc.Reviews[0].Reviewer != rev1 {
72*ba677afaSXin Li		t.Errorf("expected reviewer name %s in Reviews[0], got %s", rev1, parser.doc.Reviews[0].Reviewer)
73*ba677afaSXin Li	}
74*ba677afaSXin Li	if parser.doc.Reviews[1] != parser.rev {
75*ba677afaSXin Li		t.Errorf("Expected review %v in Reviews[1], got %v", parser.rev, parser.doc.Reviews[1])
76*ba677afaSXin Li	}
77*ba677afaSXin Li	if parser.doc.Reviews[1].Reviewer != rev2 {
78*ba677afaSXin Li		t.Errorf("expected reviewer name %s in Reviews[1], got %s", rev2, parser.doc.Reviews[1].Reviewer)
79*ba677afaSXin Li	}
80*ba677afaSXin Li
81*ba677afaSXin Li}
82*ba677afaSXin Li
83*ba677afaSXin Lifunc TestParser2_3ReviewStaysAfterParsingRelationshipTags(t *testing.T) {
84*ba677afaSXin Li	parser := tvParser2_3{
85*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
86*ba677afaSXin Li		st:   psReview2_3,
87*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
88*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
89*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
90*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
91*ba677afaSXin Li			LicenseName:       "License 11",
92*ba677afaSXin Li		},
93*ba677afaSXin Li		rev: &v2_3.Review{
94*ba677afaSXin Li			Reviewer:     "Jane Doe",
95*ba677afaSXin Li			ReviewerType: "Person",
96*ba677afaSXin Li		},
97*ba677afaSXin Li	}
98*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
99*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
100*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
101*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
102*ba677afaSXin Li
103*ba677afaSXin Li	err := parser.parsePair2_3("Relationship", "SPDXRef-blah CONTAINS SPDXRef-blah-else")
104*ba677afaSXin Li	if err != nil {
105*ba677afaSXin Li		t.Errorf("got error when calling parsePair2_3: %v", err)
106*ba677afaSXin Li	}
107*ba677afaSXin Li	// state should remain unchanged
108*ba677afaSXin Li	if parser.st != psReview2_3 {
109*ba677afaSXin Li		t.Errorf("expected state to be %v, got %v", psReview2_3, parser.st)
110*ba677afaSXin Li	}
111*ba677afaSXin Li	// and the relationship should be in the Document's Relationships
112*ba677afaSXin Li	if len(parser.doc.Relationships) != 1 {
113*ba677afaSXin Li		t.Fatalf("expected doc.Relationships to have len 1, got %d", len(parser.doc.Relationships))
114*ba677afaSXin Li	}
115*ba677afaSXin Li	deID := parser.doc.Relationships[0].RefA
116*ba677afaSXin Li	if deID.DocumentRefID != "" || deID.ElementRefID != "blah" {
117*ba677afaSXin Li		t.Errorf("expected RefA to be %s, got %s", "blah", parser.doc.Relationships[0].RefA)
118*ba677afaSXin Li	}
119*ba677afaSXin Li
120*ba677afaSXin Li	err = parser.parsePair2_3("RelationshipComment", "blah")
121*ba677afaSXin Li	if err != nil {
122*ba677afaSXin Li		t.Errorf("got error when calling parsePair2_3: %v", err)
123*ba677afaSXin Li	}
124*ba677afaSXin Li	// state should still remain unchanged
125*ba677afaSXin Li	if parser.st != psReview2_3 {
126*ba677afaSXin Li		t.Errorf("expected state to be %v, got %v", psReview2_3, parser.st)
127*ba677afaSXin Li	}
128*ba677afaSXin Li}
129*ba677afaSXin Li
130*ba677afaSXin Lifunc TestParser2_3ReviewStaysAfterParsingAnnotationTags(t *testing.T) {
131*ba677afaSXin Li	parser := tvParser2_3{
132*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
133*ba677afaSXin Li		st:   psReview2_3,
134*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
135*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
136*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
137*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
138*ba677afaSXin Li			LicenseName:       "License 11",
139*ba677afaSXin Li		},
140*ba677afaSXin Li		rev: &v2_3.Review{
141*ba677afaSXin Li			Reviewer:     "Jane Doe",
142*ba677afaSXin Li			ReviewerType: "Person",
143*ba677afaSXin Li		},
144*ba677afaSXin Li	}
145*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
146*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
147*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
148*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
149*ba677afaSXin Li
150*ba677afaSXin Li	err := parser.parsePair2_3("Annotator", "Person: John Doe ()")
151*ba677afaSXin Li	if err != nil {
152*ba677afaSXin Li		t.Errorf("got error when calling parsePair2_3: %v", err)
153*ba677afaSXin Li	}
154*ba677afaSXin Li	if parser.st != psReview2_3 {
155*ba677afaSXin Li		t.Errorf("parser is in state %v, expected %v", parser.st, psReview2_3)
156*ba677afaSXin Li	}
157*ba677afaSXin Li
158*ba677afaSXin Li	err = parser.parsePair2_3("AnnotationDate", "2018-09-15T00:36:00Z")
159*ba677afaSXin Li	if err != nil {
160*ba677afaSXin Li		t.Errorf("got error when calling parsePair2_3: %v", err)
161*ba677afaSXin Li	}
162*ba677afaSXin Li	if parser.st != psReview2_3 {
163*ba677afaSXin Li		t.Errorf("parser is in state %v, expected %v", parser.st, psReview2_3)
164*ba677afaSXin Li	}
165*ba677afaSXin Li
166*ba677afaSXin Li	err = parser.parsePair2_3("AnnotationType", "REVIEW")
167*ba677afaSXin Li	if err != nil {
168*ba677afaSXin Li		t.Errorf("got error when calling parsePair2_3: %v", err)
169*ba677afaSXin Li	}
170*ba677afaSXin Li	if parser.st != psReview2_3 {
171*ba677afaSXin Li		t.Errorf("parser is in state %v, expected %v", parser.st, psReview2_3)
172*ba677afaSXin Li	}
173*ba677afaSXin Li
174*ba677afaSXin Li	err = parser.parsePair2_3("SPDXREF", "SPDXRef-45")
175*ba677afaSXin Li	if err != nil {
176*ba677afaSXin Li		t.Errorf("got error when calling parsePair2_3: %v", err)
177*ba677afaSXin Li	}
178*ba677afaSXin Li	if parser.st != psReview2_3 {
179*ba677afaSXin Li		t.Errorf("parser is in state %v, expected %v", parser.st, psReview2_3)
180*ba677afaSXin Li	}
181*ba677afaSXin Li
182*ba677afaSXin Li	err = parser.parsePair2_3("AnnotationComment", "i guess i had something to say about this particular file")
183*ba677afaSXin Li	if err != nil {
184*ba677afaSXin Li		t.Errorf("got error when calling parsePair2_3: %v", err)
185*ba677afaSXin Li	}
186*ba677afaSXin Li	if parser.st != psReview2_3 {
187*ba677afaSXin Li		t.Errorf("parser is in state %v, expected %v", parser.st, psReview2_3)
188*ba677afaSXin Li	}
189*ba677afaSXin Li
190*ba677afaSXin Li	// and the annotation should be in the Document's Annotations
191*ba677afaSXin Li	if len(parser.doc.Annotations) != 1 {
192*ba677afaSXin Li		t.Fatalf("expected doc.Annotations to have len 1, got %d", len(parser.doc.Annotations))
193*ba677afaSXin Li	}
194*ba677afaSXin Li	if parser.doc.Annotations[0].Annotator.Annotator != "John Doe ()" {
195*ba677afaSXin Li		t.Errorf("expected Annotator to be %s, got %s", "John Doe ()", parser.doc.Annotations[0].Annotator)
196*ba677afaSXin Li	}
197*ba677afaSXin Li}
198*ba677afaSXin Li
199*ba677afaSXin Lifunc TestParser2_3ReviewFailsAfterParsingOtherSectionTags(t *testing.T) {
200*ba677afaSXin Li	parser := tvParser2_3{
201*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
202*ba677afaSXin Li		st:   psReview2_3,
203*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
204*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
205*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
206*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
207*ba677afaSXin Li			LicenseName:       "License 11",
208*ba677afaSXin Li		},
209*ba677afaSXin Li		rev: &v2_3.Review{},
210*ba677afaSXin Li	}
211*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
212*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
213*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
214*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
215*ba677afaSXin Li
216*ba677afaSXin Li	// can't go back to old sections
217*ba677afaSXin Li	err := parser.parsePair2_3("SPDXVersion", "SPDX-2.3")
218*ba677afaSXin Li	if err == nil {
219*ba677afaSXin Li		t.Errorf("expected error when calling parsePair2_3, got nil")
220*ba677afaSXin Li	}
221*ba677afaSXin Li	err = parser.parsePair2_3("PackageName", "whatever")
222*ba677afaSXin Li	if err == nil {
223*ba677afaSXin Li		t.Errorf("expected error when calling parsePair2_3, got nil")
224*ba677afaSXin Li	}
225*ba677afaSXin Li	err = parser.parsePair2_3("FileName", "whatever")
226*ba677afaSXin Li	if err == nil {
227*ba677afaSXin Li		t.Errorf("expected error when calling parsePair2_3, got nil")
228*ba677afaSXin Li	}
229*ba677afaSXin Li	err = parser.parsePair2_3("LicenseID", "LicenseRef-Lic22")
230*ba677afaSXin Li	if err == nil {
231*ba677afaSXin Li		t.Errorf("expected error when calling parsePair2_3, got nil")
232*ba677afaSXin Li	}
233*ba677afaSXin Li}
234*ba677afaSXin Li
235*ba677afaSXin Li// ===== Review data section tests =====
236*ba677afaSXin Lifunc TestParser2_3CanParseReviewTags(t *testing.T) {
237*ba677afaSXin Li	parser := tvParser2_3{
238*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
239*ba677afaSXin Li		st:   psReview2_3,
240*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
241*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
242*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
243*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
244*ba677afaSXin Li			LicenseName:       "License 11",
245*ba677afaSXin Li		},
246*ba677afaSXin Li		rev: &v2_3.Review{},
247*ba677afaSXin Li	}
248*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
249*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
250*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
251*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
252*ba677afaSXin Li
253*ba677afaSXin Li	// Reviewer (DEPRECATED)
254*ba677afaSXin Li	// handled in subsequent subtests
255*ba677afaSXin Li
256*ba677afaSXin Li	// Review Date (DEPRECATED)
257*ba677afaSXin Li	err := parser.parsePairFromReview2_3("ReviewDate", "2018-09-23T08:30:00Z")
258*ba677afaSXin Li	if err != nil {
259*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
260*ba677afaSXin Li	}
261*ba677afaSXin Li	if parser.rev.ReviewDate != "2018-09-23T08:30:00Z" {
262*ba677afaSXin Li		t.Errorf("got %v for ReviewDate", parser.rev.ReviewDate)
263*ba677afaSXin Li	}
264*ba677afaSXin Li
265*ba677afaSXin Li	// Review Comment (DEPRECATED)
266*ba677afaSXin Li	err = parser.parsePairFromReview2_3("ReviewComment", "this is a comment")
267*ba677afaSXin Li	if err != nil {
268*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
269*ba677afaSXin Li	}
270*ba677afaSXin Li	if parser.rev.ReviewComment != "this is a comment" {
271*ba677afaSXin Li		t.Errorf("got %v for ReviewComment", parser.rev.ReviewComment)
272*ba677afaSXin Li	}
273*ba677afaSXin Li}
274*ba677afaSXin Li
275*ba677afaSXin Lifunc TestParser2_3CanParseReviewerPersonTag(t *testing.T) {
276*ba677afaSXin Li	parser := tvParser2_3{
277*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
278*ba677afaSXin Li		st:   psReview2_3,
279*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
280*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
281*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
282*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
283*ba677afaSXin Li			LicenseName:       "License 11",
284*ba677afaSXin Li		},
285*ba677afaSXin Li		rev: &v2_3.Review{},
286*ba677afaSXin Li	}
287*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
288*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
289*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
290*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
291*ba677afaSXin Li
292*ba677afaSXin Li	// Reviewer: Person
293*ba677afaSXin Li	err := parser.parsePairFromReview2_3("Reviewer", "Person: John Doe")
294*ba677afaSXin Li	if err != nil {
295*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
296*ba677afaSXin Li	}
297*ba677afaSXin Li	if parser.rev.Reviewer != "John Doe" {
298*ba677afaSXin Li		t.Errorf("got %v for Reviewer", parser.rev.Reviewer)
299*ba677afaSXin Li	}
300*ba677afaSXin Li	if parser.rev.ReviewerType != "Person" {
301*ba677afaSXin Li		t.Errorf("got %v for ReviewerType", parser.rev.ReviewerType)
302*ba677afaSXin Li	}
303*ba677afaSXin Li}
304*ba677afaSXin Li
305*ba677afaSXin Lifunc TestParser2_3CanParseReviewerOrganizationTag(t *testing.T) {
306*ba677afaSXin Li	parser := tvParser2_3{
307*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
308*ba677afaSXin Li		st:   psReview2_3,
309*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
310*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
311*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
312*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
313*ba677afaSXin Li			LicenseName:       "License 11",
314*ba677afaSXin Li		},
315*ba677afaSXin Li		rev: &v2_3.Review{},
316*ba677afaSXin Li	}
317*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
318*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
319*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
320*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
321*ba677afaSXin Li
322*ba677afaSXin Li	// Reviewer: Organization
323*ba677afaSXin Li	err := parser.parsePairFromReview2_3("Reviewer", "Organization: John Doe, Inc.")
324*ba677afaSXin Li	if err != nil {
325*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
326*ba677afaSXin Li	}
327*ba677afaSXin Li	if parser.rev.Reviewer != "John Doe, Inc." {
328*ba677afaSXin Li		t.Errorf("got %v for Reviewer", parser.rev.Reviewer)
329*ba677afaSXin Li	}
330*ba677afaSXin Li	if parser.rev.ReviewerType != "Organization" {
331*ba677afaSXin Li		t.Errorf("got %v for ReviewerType", parser.rev.ReviewerType)
332*ba677afaSXin Li	}
333*ba677afaSXin Li}
334*ba677afaSXin Li
335*ba677afaSXin Lifunc TestParser2_3CanParseReviewerToolTag(t *testing.T) {
336*ba677afaSXin Li	parser := tvParser2_3{
337*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
338*ba677afaSXin Li		st:   psReview2_3,
339*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
340*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
341*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
342*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
343*ba677afaSXin Li			LicenseName:       "License 11",
344*ba677afaSXin Li		},
345*ba677afaSXin Li		rev: &v2_3.Review{},
346*ba677afaSXin Li	}
347*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
348*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
349*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
350*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
351*ba677afaSXin Li
352*ba677afaSXin Li	// Reviewer: Tool
353*ba677afaSXin Li	err := parser.parsePairFromReview2_3("Reviewer", "Tool: scannertool - 1.2.12")
354*ba677afaSXin Li	if err != nil {
355*ba677afaSXin Li		t.Errorf("expected nil error, got %v", err)
356*ba677afaSXin Li	}
357*ba677afaSXin Li	if parser.rev.Reviewer != "scannertool - 1.2.12" {
358*ba677afaSXin Li		t.Errorf("got %v for Reviewer", parser.rev.Reviewer)
359*ba677afaSXin Li	}
360*ba677afaSXin Li	if parser.rev.ReviewerType != "Tool" {
361*ba677afaSXin Li		t.Errorf("got %v for ReviewerType", parser.rev.ReviewerType)
362*ba677afaSXin Li	}
363*ba677afaSXin Li}
364*ba677afaSXin Li
365*ba677afaSXin Lifunc TestParser2_3FailsIfReviewerInvalidFormat(t *testing.T) {
366*ba677afaSXin Li	parser := tvParser2_3{
367*ba677afaSXin Li		doc: &v2_3.Document{Packages: []*v2_3.Package{}},
368*ba677afaSXin Li		st:  psReview2_3,
369*ba677afaSXin Li		rev: &v2_3.Review{},
370*ba677afaSXin Li	}
371*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
372*ba677afaSXin Li
373*ba677afaSXin Li	err := parser.parsePairFromReview2_3("Reviewer", "oops")
374*ba677afaSXin Li	if err == nil {
375*ba677afaSXin Li		t.Errorf("expected non-nil error, got nil")
376*ba677afaSXin Li	}
377*ba677afaSXin Li}
378*ba677afaSXin Li
379*ba677afaSXin Lifunc TestParser2_3FailsIfReviewerUnknownType(t *testing.T) {
380*ba677afaSXin Li	parser := tvParser2_3{
381*ba677afaSXin Li		doc: &v2_3.Document{Packages: []*v2_3.Package{}},
382*ba677afaSXin Li		st:  psReview2_3,
383*ba677afaSXin Li		rev: &v2_3.Review{},
384*ba677afaSXin Li	}
385*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
386*ba677afaSXin Li
387*ba677afaSXin Li	err := parser.parsePairFromReview2_3("Reviewer", "whoops: John Doe")
388*ba677afaSXin Li	if err == nil {
389*ba677afaSXin Li		t.Errorf("expected non-nil error, got nil")
390*ba677afaSXin Li	}
391*ba677afaSXin Li}
392*ba677afaSXin Li
393*ba677afaSXin Lifunc TestParser2_3ReviewUnknownTagFails(t *testing.T) {
394*ba677afaSXin Li	parser := tvParser2_3{
395*ba677afaSXin Li		doc:  &v2_3.Document{Packages: []*v2_3.Package{}},
396*ba677afaSXin Li		st:   psReview2_3,
397*ba677afaSXin Li		pkg:  &v2_3.Package{PackageName: "test", PackageSPDXIdentifier: "test", Files: []*v2_3.File{}},
398*ba677afaSXin Li		file: &v2_3.File{FileName: "f1.txt", FileSPDXIdentifier: "f1"},
399*ba677afaSXin Li		otherLic: &v2_3.OtherLicense{
400*ba677afaSXin Li			LicenseIdentifier: "LicenseRef-Lic11",
401*ba677afaSXin Li			LicenseName:       "License 11",
402*ba677afaSXin Li		},
403*ba677afaSXin Li		rev: &v2_3.Review{},
404*ba677afaSXin Li	}
405*ba677afaSXin Li	parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
406*ba677afaSXin Li	parser.pkg.Files = append(parser.pkg.Files, parser.file)
407*ba677afaSXin Li	parser.doc.OtherLicenses = append(parser.doc.OtherLicenses, parser.otherLic)
408*ba677afaSXin Li	parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
409*ba677afaSXin Li
410*ba677afaSXin Li	err := parser.parsePairFromReview2_3("blah", "something")
411*ba677afaSXin Li	if err == nil {
412*ba677afaSXin Li		t.Errorf("expected error from parsing unknown tag")
413*ba677afaSXin Li	}
414*ba677afaSXin Li}
415