1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage saver2v3 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "bytes" 7*ba677afaSXin Li "testing" 8*ba677afaSXin Li 9*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 10*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/v2_3" 11*ba677afaSXin Li) 12*ba677afaSXin Li 13*ba677afaSXin Li// ===== Relationship section Saver tests ===== 14*ba677afaSXin Lifunc TestSaver2_3RelationshipSavesText(t *testing.T) { 15*ba677afaSXin Li rln := &v2_3.Relationship{ 16*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 17*ba677afaSXin Li RefB: common.MakeDocElementID("", "2"), 18*ba677afaSXin Li Relationship: "DESCRIBES", 19*ba677afaSXin Li RelationshipComment: "this is a comment", 20*ba677afaSXin Li } 21*ba677afaSXin Li 22*ba677afaSXin Li // what we want to get, as a buffer of bytes 23*ba677afaSXin Li // no trailing blank newline 24*ba677afaSXin Li want := bytes.NewBufferString(`Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-2 25*ba677afaSXin LiRelationshipComment: this is a comment 26*ba677afaSXin Li`) 27*ba677afaSXin Li 28*ba677afaSXin Li // render as buffer of bytes 29*ba677afaSXin Li var got bytes.Buffer 30*ba677afaSXin Li err := renderRelationship2_3(rln, &got) 31*ba677afaSXin Li if err != nil { 32*ba677afaSXin Li t.Errorf("Expected nil error, got %v", err) 33*ba677afaSXin Li } 34*ba677afaSXin Li 35*ba677afaSXin Li // check that they match 36*ba677afaSXin Li c := bytes.Compare(want.Bytes(), got.Bytes()) 37*ba677afaSXin Li if c != 0 { 38*ba677afaSXin Li t.Errorf("Expected %v, got %v", want.String(), got.String()) 39*ba677afaSXin Li } 40*ba677afaSXin Li} 41*ba677afaSXin Li 42*ba677afaSXin Lifunc TestSaver2_3RelationshipOmitsOptionalFieldsIfEmpty(t *testing.T) { 43*ba677afaSXin Li rln := &v2_3.Relationship{ 44*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 45*ba677afaSXin Li RefB: common.MakeDocElementID("", "2"), 46*ba677afaSXin Li Relationship: "DESCRIBES", 47*ba677afaSXin Li } 48*ba677afaSXin Li 49*ba677afaSXin Li // what we want to get, as a buffer of bytes 50*ba677afaSXin Li // no trailing blank newline 51*ba677afaSXin Li want := bytes.NewBufferString("Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-2\n") 52*ba677afaSXin Li 53*ba677afaSXin Li // render as buffer of bytes 54*ba677afaSXin Li var got bytes.Buffer 55*ba677afaSXin Li err := renderRelationship2_3(rln, &got) 56*ba677afaSXin Li if err != nil { 57*ba677afaSXin Li t.Errorf("Expected nil error, got %v", err) 58*ba677afaSXin Li } 59*ba677afaSXin Li 60*ba677afaSXin Li // check that they match 61*ba677afaSXin Li c := bytes.Compare(want.Bytes(), got.Bytes()) 62*ba677afaSXin Li if c != 0 { 63*ba677afaSXin Li t.Errorf("Expected %v, got %v", want.String(), got.String()) 64*ba677afaSXin Li } 65*ba677afaSXin Li} 66*ba677afaSXin Li 67*ba677afaSXin Lifunc TestSaver2_3RelationshipCanHaveNONEOnRight(t *testing.T) { 68*ba677afaSXin Li rln := &v2_3.Relationship{ 69*ba677afaSXin Li RefA: common.MakeDocElementID("", "PackageA"), 70*ba677afaSXin Li RefB: common.MakeDocElementSpecial("NONE"), 71*ba677afaSXin Li Relationship: "DEPENDS_ON", 72*ba677afaSXin Li } 73*ba677afaSXin Li 74*ba677afaSXin Li // what we want to get, as a buffer of bytes 75*ba677afaSXin Li // no trailing blank newline 76*ba677afaSXin Li want := bytes.NewBufferString("Relationship: SPDXRef-PackageA DEPENDS_ON NONE\n") 77*ba677afaSXin Li 78*ba677afaSXin Li // render as buffer of bytes 79*ba677afaSXin Li var got bytes.Buffer 80*ba677afaSXin Li err := renderRelationship2_3(rln, &got) 81*ba677afaSXin Li if err != nil { 82*ba677afaSXin Li t.Errorf("Expected nil error, got %v", err) 83*ba677afaSXin Li } 84*ba677afaSXin Li 85*ba677afaSXin Li // check that they match 86*ba677afaSXin Li c := bytes.Compare(want.Bytes(), got.Bytes()) 87*ba677afaSXin Li if c != 0 { 88*ba677afaSXin Li t.Errorf("Expected %v, got %v", want.String(), got.String()) 89*ba677afaSXin Li } 90*ba677afaSXin Li} 91*ba677afaSXin Li 92*ba677afaSXin Lifunc TestSaver2_3RelationshipCanHaveNOASSERTIONOnRight(t *testing.T) { 93*ba677afaSXin Li rln := &v2_3.Relationship{ 94*ba677afaSXin Li RefA: common.MakeDocElementID("", "PackageA"), 95*ba677afaSXin Li RefB: common.MakeDocElementSpecial("NOASSERTION"), 96*ba677afaSXin Li Relationship: "DEPENDS_ON", 97*ba677afaSXin Li } 98*ba677afaSXin Li 99*ba677afaSXin Li // what we want to get, as a buffer of bytes 100*ba677afaSXin Li // no trailing blank newline 101*ba677afaSXin Li want := bytes.NewBufferString("Relationship: SPDXRef-PackageA DEPENDS_ON NOASSERTION\n") 102*ba677afaSXin Li 103*ba677afaSXin Li // render as buffer of bytes 104*ba677afaSXin Li var got bytes.Buffer 105*ba677afaSXin Li err := renderRelationship2_3(rln, &got) 106*ba677afaSXin Li if err != nil { 107*ba677afaSXin Li t.Errorf("Expected nil error, got %v", err) 108*ba677afaSXin Li } 109*ba677afaSXin Li 110*ba677afaSXin Li // check that they match 111*ba677afaSXin Li c := bytes.Compare(want.Bytes(), got.Bytes()) 112*ba677afaSXin Li if c != 0 { 113*ba677afaSXin Li t.Errorf("Expected %v, got %v", want.String(), got.String()) 114*ba677afaSXin Li } 115*ba677afaSXin Li} 116*ba677afaSXin Li 117*ba677afaSXin Lifunc TestSaver2_3RelationshipWrapsCommentMultiLine(t *testing.T) { 118*ba677afaSXin Li rln := &v2_3.Relationship{ 119*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 120*ba677afaSXin Li RefB: common.MakeDocElementID("", "2"), 121*ba677afaSXin Li Relationship: "DESCRIBES", 122*ba677afaSXin Li RelationshipComment: `this is a 123*ba677afaSXin Limulti-line comment`, 124*ba677afaSXin Li } 125*ba677afaSXin Li 126*ba677afaSXin Li // what we want to get, as a buffer of bytes 127*ba677afaSXin Li // no trailing blank newline 128*ba677afaSXin Li want := bytes.NewBufferString(`Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-2 129*ba677afaSXin LiRelationshipComment: <text>this is a 130*ba677afaSXin Limulti-line comment</text> 131*ba677afaSXin Li`) 132*ba677afaSXin Li 133*ba677afaSXin Li // render as buffer of bytes 134*ba677afaSXin Li var got bytes.Buffer 135*ba677afaSXin Li err := renderRelationship2_3(rln, &got) 136*ba677afaSXin Li if err != nil { 137*ba677afaSXin Li t.Errorf("Expected nil error, got %v", err) 138*ba677afaSXin Li } 139*ba677afaSXin Li 140*ba677afaSXin Li // check that they match 141*ba677afaSXin Li c := bytes.Compare(want.Bytes(), got.Bytes()) 142*ba677afaSXin Li if c != 0 { 143*ba677afaSXin Li t.Errorf("Expected %v, got %v", want.String(), got.String()) 144*ba677afaSXin Li } 145*ba677afaSXin Li} 146