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