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/tvloader/reader" 8*ba677afaSXin Li) 9*ba677afaSXin Li 10*ba677afaSXin Li// ===== Parser exported entry point tests ===== 11*ba677afaSXin Lifunc TestParser2_3CanParseTagValues(t *testing.T) { 12*ba677afaSXin Li var tvPairs []reader.TagValuePair 13*ba677afaSXin Li 14*ba677afaSXin Li // create some pairs 15*ba677afaSXin Li tvPair1 := reader.TagValuePair{Tag: "SPDXVersion", Value: "SPDX-2.3"} 16*ba677afaSXin Li tvPairs = append(tvPairs, tvPair1) 17*ba677afaSXin Li tvPair2 := reader.TagValuePair{Tag: "DataLicense", Value: "CC0-1.0"} 18*ba677afaSXin Li tvPairs = append(tvPairs, tvPair2) 19*ba677afaSXin Li tvPair3 := reader.TagValuePair{Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"} 20*ba677afaSXin Li tvPairs = append(tvPairs, tvPair3) 21*ba677afaSXin Li 22*ba677afaSXin Li // now parse them 23*ba677afaSXin Li doc, err := ParseTagValues(tvPairs) 24*ba677afaSXin Li if err != nil { 25*ba677afaSXin Li t.Errorf("got error when calling ParseTagValues: %v", err) 26*ba677afaSXin Li } 27*ba677afaSXin Li if doc.SPDXVersion != "SPDX-2.3" { 28*ba677afaSXin Li t.Errorf("expected SPDXVersion to be SPDX-2.3, got %v", doc.SPDXVersion) 29*ba677afaSXin Li } 30*ba677afaSXin Li if doc.DataLicense != "CC0-1.0" { 31*ba677afaSXin Li t.Errorf("expected DataLicense to be CC0-1.0, got %v", doc.DataLicense) 32*ba677afaSXin Li } 33*ba677afaSXin Li if doc.SPDXIdentifier != "DOCUMENT" { 34*ba677afaSXin Li t.Errorf("expected SPDXIdentifier to be DOCUMENT, got %v", doc.SPDXIdentifier) 35*ba677afaSXin Li } 36*ba677afaSXin Li 37*ba677afaSXin Li} 38*ba677afaSXin Li 39*ba677afaSXin Li// ===== Parser initialization tests ===== 40*ba677afaSXin Lifunc TestParser2_3InitCreatesResetStatus(t *testing.T) { 41*ba677afaSXin Li parser := tvParser2_3{} 42*ba677afaSXin Li if parser.st != psStart2_3 { 43*ba677afaSXin Li t.Errorf("parser did not begin in start state") 44*ba677afaSXin Li } 45*ba677afaSXin Li if parser.doc != nil { 46*ba677afaSXin Li t.Errorf("parser did not begin with nil document") 47*ba677afaSXin Li } 48*ba677afaSXin Li} 49*ba677afaSXin Li 50*ba677afaSXin Lifunc TestParser2_3HasDocumentAfterCallToParseFirstTag(t *testing.T) { 51*ba677afaSXin Li parser := tvParser2_3{} 52*ba677afaSXin Li err := parser.parsePair2_3("SPDXVersion", "SPDX-2.3") 53*ba677afaSXin Li if err != nil { 54*ba677afaSXin Li t.Errorf("got error when calling parsePair2_3: %v", err) 55*ba677afaSXin Li } 56*ba677afaSXin Li if parser.doc == nil { 57*ba677afaSXin Li t.Errorf("doc is still nil after parsing first pair") 58*ba677afaSXin Li } 59*ba677afaSXin Li} 60*ba677afaSXin Li 61*ba677afaSXin Lifunc TestParser2_3StartFailsToParseIfInInvalidState(t *testing.T) { 62*ba677afaSXin Li parser := tvParser2_3{st: psReview2_3} 63*ba677afaSXin Li err := parser.parsePairFromStart2_3("SPDXVersion", "SPDX-2.3") 64*ba677afaSXin Li if err == nil { 65*ba677afaSXin Li t.Errorf("expected non-nil error, got nil") 66*ba677afaSXin Li } 67*ba677afaSXin Li} 68*ba677afaSXin Li 69*ba677afaSXin Lifunc TestParser2_3FilesWithoutSpdxIdThrowErrorAtCompleteParse(t *testing.T) { 70*ba677afaSXin Li // case: Checks the last file 71*ba677afaSXin Li // Last unpackaged file with no packages in doc 72*ba677afaSXin Li // Last file of last package in the doc 73*ba677afaSXin Li tvPairs := []reader.TagValuePair{ 74*ba677afaSXin Li {Tag: "SPDXVersion", Value: "SPDX-2.3"}, 75*ba677afaSXin Li {Tag: "DataLicense", Value: "CC0-1.0"}, 76*ba677afaSXin Li {Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"}, 77*ba677afaSXin Li {Tag: "FileName", Value: "f1"}, 78*ba677afaSXin Li } 79*ba677afaSXin Li _, err := ParseTagValues(tvPairs) 80*ba677afaSXin Li if err == nil { 81*ba677afaSXin Li t.Errorf("file without SPDX Identifier getting accepted") 82*ba677afaSXin Li } 83*ba677afaSXin Li} 84*ba677afaSXin Li 85*ba677afaSXin Lifunc TestParser2_3PackageWithoutSpdxIdThrowErrorAtCompleteParse(t *testing.T) { 86*ba677afaSXin Li // case: Checks the last package 87*ba677afaSXin Li tvPairs := []reader.TagValuePair{ 88*ba677afaSXin Li {Tag: "SPDXVersion", Value: "SPDX-2.3"}, 89*ba677afaSXin Li {Tag: "DataLicense", Value: "CC0-1.0"}, 90*ba677afaSXin Li {Tag: "SPDXID", Value: "SPDXRef-DOCUMENT"}, 91*ba677afaSXin Li {Tag: "PackageName", Value: "p1"}, 92*ba677afaSXin Li } 93*ba677afaSXin Li _, err := ParseTagValues(tvPairs) 94*ba677afaSXin Li if err == nil { 95*ba677afaSXin Li t.Errorf("package without SPDX Identifier getting accepted") 96*ba677afaSXin Li } 97*ba677afaSXin Li} 98