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