xref: /aosp_15_r20/external/spdx-tools/rdfloader/parser2v2/parse_annotation_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2*ba677afaSXin Li
3*ba677afaSXin Lipackage parser2v2
4*ba677afaSXin Li
5*ba677afaSXin Liimport (
6*ba677afaSXin Li	"testing"
7*ba677afaSXin Li
8*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/v2_2"
9*ba677afaSXin Li)
10*ba677afaSXin Li
11*ba677afaSXin Lifunc Test_setAnnotatorFromString(t *testing.T) {
12*ba677afaSXin Li	// TestCase 1: Empty String must raise an error
13*ba677afaSXin Li	ann := &v2_2.Annotation{}
14*ba677afaSXin Li	input := ""
15*ba677afaSXin Li	err := setAnnotatorFromString(input, ann)
16*ba677afaSXin Li	if err == nil {
17*ba677afaSXin Li		t.Error("should've raised an error for an empty string")
18*ba677afaSXin Li	}
19*ba677afaSXin Li
20*ba677afaSXin Li	// TestCase 2: Invalid annotator type
21*ba677afaSXin Li	ann = &v2_2.Annotation{}
22*ba677afaSXin Li	input = "Company: some_company"
23*ba677afaSXin Li	err = setAnnotatorFromString(input, ann)
24*ba677afaSXin Li	if err == nil {
25*ba677afaSXin Li		t.Errorf("should've raised an error for an unknown annotator type")
26*ba677afaSXin Li	}
27*ba677afaSXin Li
28*ba677afaSXin Li	// TestCase 3: Valid annotator
29*ba677afaSXin Li	ann = &v2_2.Annotation{}
30*ba677afaSXin Li	input = "Person: Rishabh"
31*ba677afaSXin Li	err = setAnnotatorFromString(input, ann)
32*ba677afaSXin Li	if err != nil {
33*ba677afaSXin Li		t.Errorf("unexpected error for a valid annotator")
34*ba677afaSXin Li	}
35*ba677afaSXin Li	if ann.Annotator.AnnotatorType != "Person" {
36*ba677afaSXin Li		t.Errorf("wrnog annotator type: expected: %s, found: %s", "Person", ann.Annotator)
37*ba677afaSXin Li	}
38*ba677afaSXin Li	if ann.Annotator.Annotator != "Rishabh" {
39*ba677afaSXin Li		t.Errorf("wrong annotator: expected: %s, found: %s", "Rishabh", ann.Annotator)
40*ba677afaSXin Li	}
41*ba677afaSXin Li}
42*ba677afaSXin Li
43*ba677afaSXin Lifunc Test_setAnnotationType(t *testing.T) {
44*ba677afaSXin Li	ann := &v2_2.Annotation{}
45*ba677afaSXin Li	// TestCase 1: invalid input (empty annotationType)
46*ba677afaSXin Li	err := setAnnotationType("", ann)
47*ba677afaSXin Li	if err == nil {
48*ba677afaSXin Li		t.Errorf("expected an error for empty input")
49*ba677afaSXin Li	}
50*ba677afaSXin Li
51*ba677afaSXin Li	// TestCase 2: invalid input (unknown annotation type)
52*ba677afaSXin Li	err = setAnnotationType(NS_SPDX+"annotationType_unknown", ann)
53*ba677afaSXin Li	if err == nil {
54*ba677afaSXin Li		t.Errorf("expected an error for invalid annotationType")
55*ba677afaSXin Li	}
56*ba677afaSXin Li
57*ba677afaSXin Li	// TestCase 3: valid input (annotationType_other)
58*ba677afaSXin Li	err = setAnnotationType(SPDX_ANNOTATION_TYPE_OTHER, ann)
59*ba677afaSXin Li	if err != nil {
60*ba677afaSXin Li		t.Errorf("unexpected error: %v", err)
61*ba677afaSXin Li	}
62*ba677afaSXin Li	if ann.AnnotationType != "OTHER" {
63*ba677afaSXin Li		t.Errorf("expected: OTHER, found: %s", ann.AnnotationType)
64*ba677afaSXin Li	}
65*ba677afaSXin Li
66*ba677afaSXin Li	// TestCase 4: valid input (annotationType_review)
67*ba677afaSXin Li	err = setAnnotationType(SPDX_ANNOTATION_TYPE_REVIEW, ann)
68*ba677afaSXin Li	if err != nil {
69*ba677afaSXin Li		t.Errorf("unexpected error: %v", err)
70*ba677afaSXin Li	}
71*ba677afaSXin Li	if ann.AnnotationType != "REVIEW" {
72*ba677afaSXin Li		t.Errorf("expected: REVIEW, found: %s", ann.AnnotationType)
73*ba677afaSXin Li	}
74*ba677afaSXin Li}
75*ba677afaSXin Li
76*ba677afaSXin Lifunc Test_setAnnotationToParser(t *testing.T) {
77*ba677afaSXin Li	// TestCase 1: doc is nil (must raise an error)
78*ba677afaSXin Li	parser, _ := parserFromBodyContent(``)
79*ba677afaSXin Li	parser.doc = nil
80*ba677afaSXin Li	err := setAnnotationToParser(parser, &v2_2.Annotation{})
81*ba677afaSXin Li	if err == nil {
82*ba677afaSXin Li		t.Errorf("empty doc should've raised an error")
83*ba677afaSXin Li	}
84*ba677afaSXin Li
85*ba677afaSXin Li	// TestCase 2: empty annotations should create a new annotations
86*ba677afaSXin Li	//			   list and append the input to it.
87*ba677afaSXin Li	parser, _ = parserFromBodyContent(``)
88*ba677afaSXin Li	parser.doc.Annotations = nil
89*ba677afaSXin Li	err = setAnnotationToParser(parser, &v2_2.Annotation{})
90*ba677afaSXin Li	if err != nil {
91*ba677afaSXin Li		t.Errorf("unexpected error: %v", err)
92*ba677afaSXin Li	}
93*ba677afaSXin Li	if len(parser.doc.Annotations) != 1 {
94*ba677afaSXin Li		t.Errorf("expected doc to have 1 annotation, found %d", len(parser.doc.Annotations))
95*ba677afaSXin Li	}
96*ba677afaSXin Li}
97*ba677afaSXin Li
98*ba677afaSXin Lifunc Test_rdfParser2_2_parseAnnotationFromNode(t *testing.T) {
99*ba677afaSXin Li	// TestCase 1: invalid annotator must raise an error
100*ba677afaSXin Li	parser, _ := parserFromBodyContent(`
101*ba677afaSXin Li		<spdx:Annotation>
102*ba677afaSXin Li			<spdx:annotationDate>2010-01-29T18:30:22Z</spdx:annotationDate>
103*ba677afaSXin Li			<rdfs:comment>Document level annotation</rdfs:comment>
104*ba677afaSXin Li			<spdx:annotator>Company: some company</spdx:annotator>
105*ba677afaSXin Li			<spdx:annotationType rdf:resource="http://spdx.org/rdf/terms#annotationType_other"/>
106*ba677afaSXin Li		</spdx:Annotation>
107*ba677afaSXin Li	`)
108*ba677afaSXin Li	node := parser.gordfParserObj.Triples[0].Subject
109*ba677afaSXin Li	err := parser.parseAnnotationFromNode(node)
110*ba677afaSXin Li	if err == nil {
111*ba677afaSXin Li		t.Errorf("wrong annotator type should've raised an error")
112*ba677afaSXin Li	}
113*ba677afaSXin Li
114*ba677afaSXin Li	// TestCase 2: wrong annotation type should raise an error
115*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
116*ba677afaSXin Li		<spdx:Annotation>
117*ba677afaSXin Li			<spdx:annotationDate>2010-01-29T18:30:22Z</spdx:annotationDate>
118*ba677afaSXin Li			<rdfs:comment>Document level annotation</rdfs:comment>
119*ba677afaSXin Li			<spdx:annotator>Person: Jane Doe</spdx:annotator>
120*ba677afaSXin Li			<spdx:annotationType rdf:resource="http://spdx.org/rdf/terms#annotationType_unknown"/>
121*ba677afaSXin Li		</spdx:Annotation>
122*ba677afaSXin Li	`)
123*ba677afaSXin Li	node = parser.gordfParserObj.Triples[0].Subject
124*ba677afaSXin Li	err = parser.parseAnnotationFromNode(node)
125*ba677afaSXin Li	if err == nil {
126*ba677afaSXin Li		t.Errorf("wrong annotation type should've raised an error")
127*ba677afaSXin Li	}
128*ba677afaSXin Li
129*ba677afaSXin Li	// TestCase 3: unknown predicate should also raise an error
130*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
131*ba677afaSXin Li		<spdx:Annotation>
132*ba677afaSXin Li			<spdx:annotationDate>2010-01-29T18:30:22Z</spdx:annotationDate>
133*ba677afaSXin Li			<rdfs:comment>Document level annotation</rdfs:comment>
134*ba677afaSXin Li			<spdx:annotator>Person: Jane Doe</spdx:annotator>
135*ba677afaSXin Li			<spdx:annotationType rdf:resource="http://spdx.org/rdf/terms#annotationType_unknown"/>
136*ba677afaSXin Li			<spdx:unknownPredicate />
137*ba677afaSXin Li		</spdx:Annotation>
138*ba677afaSXin Li	`)
139*ba677afaSXin Li	node = parser.gordfParserObj.Triples[0].Subject
140*ba677afaSXin Li	err = parser.parseAnnotationFromNode(node)
141*ba677afaSXin Li	if err == nil {
142*ba677afaSXin Li		t.Errorf("unknown predicate must raise an error")
143*ba677afaSXin Li	}
144*ba677afaSXin Li
145*ba677afaSXin Li	// TestCase 4: completely valid annotation
146*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
147*ba677afaSXin Li		<spdx:Annotation>
148*ba677afaSXin Li			<spdx:annotationDate>2010-01-29T18:30:22Z</spdx:annotationDate>
149*ba677afaSXin Li			<rdfs:comment>Document level annotation</rdfs:comment>
150*ba677afaSXin Li			<spdx:annotator>Person: Jane Doe</spdx:annotator>
151*ba677afaSXin Li			<spdx:annotationType rdf:resource="http://spdx.org/rdf/terms#annotationType_other"/>
152*ba677afaSXin Li		</spdx:Annotation>
153*ba677afaSXin Li	`)
154*ba677afaSXin Li	node = parser.gordfParserObj.Triples[0].Subject
155*ba677afaSXin Li	err = parser.parseAnnotationFromNode(node)
156*ba677afaSXin Li	if err != nil {
157*ba677afaSXin Li		t.Errorf("error parsing valid a annotation")
158*ba677afaSXin Li	}
159*ba677afaSXin Li	if n := len(parser.doc.Annotations); n != 1 {
160*ba677afaSXin Li		t.Errorf("document should've had only one annotation, found %d", n)
161*ba677afaSXin Li	}
162*ba677afaSXin Li	ann := parser.doc.Annotations[0]
163*ba677afaSXin Li	// validating all the attributes of the annotations
164*ba677afaSXin Li	expectedComment := "Document level annotation"
165*ba677afaSXin Li	if ann.AnnotationComment != expectedComment {
166*ba677afaSXin Li		t.Errorf(`expected: "%s", found "%s"`, expectedComment, ann.AnnotationComment)
167*ba677afaSXin Li	}
168*ba677afaSXin Li	expectedDate := "2010-01-29T18:30:22Z"
169*ba677afaSXin Li	if expectedDate != ann.AnnotationDate {
170*ba677afaSXin Li		t.Errorf(`expected: "%s", found "%s"`, expectedDate, ann.AnnotationDate)
171*ba677afaSXin Li	}
172*ba677afaSXin Li	expectedAnnotator := "Jane Doe"
173*ba677afaSXin Li	if expectedAnnotator != ann.Annotator.Annotator {
174*ba677afaSXin Li		t.Errorf(`expected: "%s", found "%s"`, expectedAnnotator, ann.Annotator)
175*ba677afaSXin Li	}
176*ba677afaSXin Li	if ann.Annotator.AnnotatorType != "Person" {
177*ba677afaSXin Li		t.Errorf(`expected: "%s", found "%s"`, "Person", ann.Annotator.AnnotatorType)
178*ba677afaSXin Li	}
179*ba677afaSXin Li	expectedAnnotationType := "OTHER"
180*ba677afaSXin Li	if expectedAnnotationType != ann.AnnotationType {
181*ba677afaSXin Li		t.Errorf(`expected: "%s", found "%s"`, expectedAnnotationType, ann.AnnotationType)
182*ba677afaSXin Li	}
183*ba677afaSXin Li}
184