xref: /aosp_15_r20/external/spdx-tools/tvsaver/saver2v3/save_relationship_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
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