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