From bf2d1849ff4f03e2f6ccff6a6f0b2021579d92ad Mon Sep 17 00:00:00 2001 From: Steve Winslow Date: Sun, 4 Jul 2021 11:52:03 -0400 Subject: Fix multi-line text wrapping fields Signed-off-by: Steve Winslow --- tvsaver/saver2v1/save_file.go | 6 ++-- tvsaver/saver2v1/save_file_test.go | 48 +++++++++++++++++++++++++ tvsaver/saver2v1/save_package.go | 4 +-- tvsaver/saver2v1/save_package_test.go | 49 ++++++++++++++++++++++++- tvsaver/saver2v1/save_relationship.go | 2 +- tvsaver/saver2v1/save_relationship_test.go | 30 ++++++++++++++++ tvsaver/saver2v1/save_review.go | 2 +- tvsaver/saver2v1/save_review_test.go | 31 ++++++++++++++++ tvsaver/saver2v2/save_file.go | 6 ++-- tvsaver/saver2v2/save_file_test.go | 57 ++++++++++++++++++++++++++++++ tvsaver/saver2v2/save_package.go | 4 +-- tvsaver/saver2v2/save_package_test.go | 49 ++++++++++++++++++++++++- tvsaver/saver2v2/save_relationship.go | 2 +- tvsaver/saver2v2/save_relationship_test.go | 30 ++++++++++++++++ tvsaver/saver2v2/save_review.go | 2 +- tvsaver/saver2v2/save_review_test.go | 31 ++++++++++++++++ 16 files changed, 337 insertions(+), 16 deletions(-) diff --git a/tvsaver/saver2v1/save_file.go b/tvsaver/saver2v1/save_file.go index a9df3ed..d22a012 100644 --- a/tvsaver/saver2v1/save_file.go +++ b/tvsaver/saver2v1/save_file.go @@ -36,7 +36,7 @@ func renderFile2_1(f *spdx.File2_1, w io.Writer) error { fmt.Fprintf(w, "LicenseInfoInFile: %s\n", s) } if f.LicenseComments != "" { - fmt.Fprintf(w, "LicenseComments: %s\n", f.LicenseComments) + fmt.Fprintf(w, "LicenseComments: %s\n", textify(f.LicenseComments)) } if f.FileCopyrightText != "" { fmt.Fprintf(w, "FileCopyrightText: %s\n", textify(f.FileCopyrightText)) @@ -51,10 +51,10 @@ func renderFile2_1(f *spdx.File2_1, w io.Writer) error { } } if f.FileComment != "" { - fmt.Fprintf(w, "FileComment: %s\n", f.FileComment) + fmt.Fprintf(w, "FileComment: %s\n", textify(f.FileComment)) } if f.FileNotice != "" { - fmt.Fprintf(w, "FileNotice: %s\n", f.FileNotice) + fmt.Fprintf(w, "FileNotice: %s\n", textify(f.FileNotice)) } for _, s := range f.FileContributor { fmt.Fprintf(w, "FileContributor: %s\n", s) diff --git a/tvsaver/saver2v1/save_file_test.go b/tvsaver/saver2v1/save_file_test.go index 9e652b6..9d6b09b 100644 --- a/tvsaver/saver2v1/save_file_test.go +++ b/tvsaver/saver2v1/save_file_test.go @@ -247,3 +247,51 @@ Copyright (c) John Doe t.Errorf("Expected %v, got %v", want.String(), got.String()) } } + +func TestSaver2_1FileWrapsCommentsAndNoticesMultiLine(t *testing.T) { + f := &spdx.File2_1{ + FileName: "/tmp/whatever.txt", + FileSPDXIdentifier: spdx.ElementID("File123"), + FileChecksumSHA1: "85ed0817af83a24ad8da68c2b5094de69833983c", + LicenseComments: `this is a +multi-line license comment`, + LicenseConcluded: "Apache-2.0", + LicenseInfoInFile: []string{ + "Apache-2.0", + }, + FileCopyrightText: "Copyright (c) Jane Doe", + FileComment: `this is a +multi-line file comment`, + FileNotice: `This file may be used +under either Apache-2.0 or Apache-1.1.`, + } + + // what we want to get, as a buffer of bytes + want := bytes.NewBufferString(`FileName: /tmp/whatever.txt +SPDXID: SPDXRef-File123 +FileChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983c +LicenseConcluded: Apache-2.0 +LicenseInfoInFile: Apache-2.0 +LicenseComments: this is a +multi-line license comment +FileCopyrightText: Copyright (c) Jane Doe +FileComment: this is a +multi-line file comment +FileNotice: This file may be used +under either Apache-2.0 or Apache-1.1. + +`) + + // render as buffer of bytes + var got bytes.Buffer + err := renderFile2_1(f, &got) + if err != nil { + t.Errorf("Expected nil error, got %v", err) + } + + // check that they match + c := bytes.Compare(want.Bytes(), got.Bytes()) + if c != 0 { + t.Errorf("Expected %v, got %v", want.String(), got.String()) + } +} diff --git a/tvsaver/saver2v1/save_package.go b/tvsaver/saver2v1/save_package.go index c497404..9b19cfa 100644 --- a/tvsaver/saver2v1/save_package.go +++ b/tvsaver/saver2v1/save_package.go @@ -88,7 +88,7 @@ func renderPackage2_1(pkg *spdx.Package2_1, w io.Writer) error { fmt.Fprintf(w, "PackageLicenseComments: %s\n", textify(pkg.PackageLicenseComments)) } if pkg.PackageCopyrightText != "" { - fmt.Fprintf(w, "PackageCopyrightText: %s\n", pkg.PackageCopyrightText) + fmt.Fprintf(w, "PackageCopyrightText: %s\n", textify(pkg.PackageCopyrightText)) } if pkg.PackageSummary != "" { fmt.Fprintf(w, "PackageSummary: %s\n", textify(pkg.PackageSummary)) @@ -102,7 +102,7 @@ func renderPackage2_1(pkg *spdx.Package2_1, w io.Writer) error { for _, s := range pkg.PackageExternalReferences { fmt.Fprintf(w, "ExternalRef: %s %s %s\n", s.Category, s.RefType, s.Locator) if s.ExternalRefComment != "" { - fmt.Fprintf(w, "ExternalRefComment: %s\n", s.ExternalRefComment) + fmt.Fprintf(w, "ExternalRefComment: %s\n", textify(s.ExternalRefComment)) } } diff --git a/tvsaver/saver2v1/save_package_test.go b/tvsaver/saver2v1/save_package_test.go index 83f1fd5..fc6b2a6 100644 --- a/tvsaver/saver2v1/save_package_test.go +++ b/tvsaver/saver2v1/save_package_test.go @@ -29,7 +29,8 @@ func TestSaver2_1PackageSavesTextCombo1(t *testing.T) { Category: "PACKAGE-MANAGER", RefType: "npm", Locator: "p1@0.1.0", - // no ExternalRefComment for this one + ExternalRefComment: `this is a +multi-line external ref comment`, } per3 := &spdx.PackageExternalReference2_1{ @@ -103,6 +104,8 @@ PackageComment: this is a comment comment ExternalRef: SECURITY cpe22Type cpe:/a:john_doe_inc:p1:0.1.0 ExternalRefComment: this is an external ref comment #1 ExternalRef: PACKAGE-MANAGER npm p1@0.1.0 +ExternalRefComment: this is a +multi-line external ref comment ExternalRef: OTHER anything anything-without-spaces-can-go-here `) @@ -403,3 +406,47 @@ FileCopyrightText: Copyright (c) John Doe t.Errorf("Expected %v, got %v", want.String(), got.String()) } } + +func TestSaver2_1PackageWrapsCopyrightMultiLine(t *testing.T) { + pkg := &spdx.Package2_1{ + PackageName: "p1", + PackageSPDXIdentifier: spdx.ElementID("p1"), + PackageDownloadLocation: "http://example.com/p1/p1-0.1.0-master.tar.gz", + FilesAnalyzed: false, + IsFilesAnalyzedTagPresent: true, + PackageLicenseConcluded: "GPL-2.0-or-later", + PackageLicenseInfoFromFiles: []string{ + "Apache-1.1", + "Apache-2.0", + "GPL-2.0-or-later", + }, + PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later", + PackageCopyrightText: `Copyright (c) John Doe, Inc. +Copyright Jane Doe`, + } + + // what we want to get, as a buffer of bytes + want := bytes.NewBufferString(`PackageName: p1 +SPDXID: SPDXRef-p1 +PackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz +FilesAnalyzed: false +PackageLicenseConcluded: GPL-2.0-or-later +PackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later +PackageCopyrightText: Copyright (c) John Doe, Inc. +Copyright Jane Doe + +`) + + // render as buffer of bytes + var got bytes.Buffer + err := renderPackage2_1(pkg, &got) + if err != nil { + t.Errorf("Expected nil error, got %v", err) + } + + // check that they match + c := bytes.Compare(want.Bytes(), got.Bytes()) + if c != 0 { + t.Errorf("Expected %v, got %v", want.String(), got.String()) + } +} diff --git a/tvsaver/saver2v1/save_relationship.go b/tvsaver/saver2v1/save_relationship.go index 6bde4b3..aea48bc 100644 --- a/tvsaver/saver2v1/save_relationship.go +++ b/tvsaver/saver2v1/save_relationship.go @@ -16,7 +16,7 @@ func renderRelationship2_1(rln *spdx.Relationship2_1, w io.Writer) error { fmt.Fprintf(w, "Relationship: %s %s %s\n", rlnAStr, rln.Relationship, rlnBStr) } if rln.RelationshipComment != "" { - fmt.Fprintf(w, "RelationshipComment: %s\n", rln.RelationshipComment) + fmt.Fprintf(w, "RelationshipComment: %s\n", textify(rln.RelationshipComment)) } return nil diff --git a/tvsaver/saver2v1/save_relationship_test.go b/tvsaver/saver2v1/save_relationship_test.go index e8635b1..6fa03bd 100644 --- a/tvsaver/saver2v1/save_relationship_test.go +++ b/tvsaver/saver2v1/save_relationship_test.go @@ -62,3 +62,33 @@ func TestSaver2_1RelationshipOmitsOptionalFieldsIfEmpty(t *testing.T) { t.Errorf("Expected %v, got %v", want.String(), got.String()) } } + +func TestSaver2_1RelationshipWrapsCommentMultiLine(t *testing.T) { + rln := &spdx.Relationship2_1{ + RefA: spdx.MakeDocElementID("", "DOCUMENT"), + RefB: spdx.MakeDocElementID("", "2"), + Relationship: "DESCRIBES", + RelationshipComment: `this is a +multi-line comment`, + } + + // what we want to get, as a buffer of bytes + // no trailing blank newline + want := bytes.NewBufferString(`Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-2 +RelationshipComment: this is a +multi-line comment +`) + + // render as buffer of bytes + var got bytes.Buffer + err := renderRelationship2_1(rln, &got) + if err != nil { + t.Errorf("Expected nil error, got %v", err) + } + + // check that they match + c := bytes.Compare(want.Bytes(), got.Bytes()) + if c != 0 { + t.Errorf("Expected %v, got %v", want.String(), got.String()) + } +} diff --git a/tvsaver/saver2v1/save_review.go b/tvsaver/saver2v1/save_review.go index 8d192ba..3193963 100644 --- a/tvsaver/saver2v1/save_review.go +++ b/tvsaver/saver2v1/save_review.go @@ -17,7 +17,7 @@ func renderReview2_1(rev *spdx.Review2_1, w io.Writer) error { fmt.Fprintf(w, "ReviewDate: %s\n", rev.ReviewDate) } if rev.ReviewComment != "" { - fmt.Fprintf(w, "ReviewComment: %s\n", rev.ReviewComment) + fmt.Fprintf(w, "ReviewComment: %s\n", textify(rev.ReviewComment)) } fmt.Fprintf(w, "\n") diff --git a/tvsaver/saver2v1/save_review_test.go b/tvsaver/saver2v1/save_review_test.go index d780467..7421681 100644 --- a/tvsaver/saver2v1/save_review_test.go +++ b/tvsaver/saver2v1/save_review_test.go @@ -65,3 +65,34 @@ ReviewDate: 2018-10-14T10:28:00Z t.Errorf("Expected %v, got %v", want.String(), got.String()) } } + +func TestSaver2_1ReviewWrapsMultiLine(t *testing.T) { + rev := &spdx.Review2_1{ + Reviewer: "John Doe", + ReviewerType: "Person", + ReviewDate: "2018-10-14T10:28:00Z", + ReviewComment: `this is a +multi-line review comment`, + } + + // what we want to get, as a buffer of bytes + want := bytes.NewBufferString(`Reviewer: Person: John Doe +ReviewDate: 2018-10-14T10:28:00Z +ReviewComment: this is a +multi-line review comment + +`) + + // render as buffer of bytes + var got bytes.Buffer + err := renderReview2_1(rev, &got) + if err != nil { + t.Errorf("Expected nil error, got %v", err) + } + + // check that they match + c := bytes.Compare(want.Bytes(), got.Bytes()) + if c != 0 { + t.Errorf("Expected %v, got %v", want.String(), got.String()) + } +} diff --git a/tvsaver/saver2v2/save_file.go b/tvsaver/saver2v2/save_file.go index 18e95b0..ce75f31 100644 --- a/tvsaver/saver2v2/save_file.go +++ b/tvsaver/saver2v2/save_file.go @@ -36,7 +36,7 @@ func renderFile2_2(f *spdx.File2_2, w io.Writer) error { fmt.Fprintf(w, "LicenseInfoInFile: %s\n", s) } if f.LicenseComments != "" { - fmt.Fprintf(w, "LicenseComments: %s\n", f.LicenseComments) + fmt.Fprintf(w, "LicenseComments: %s\n", textify(f.LicenseComments)) } if f.FileCopyrightText != "" { fmt.Fprintf(w, "FileCopyrightText: %s\n", textify(f.FileCopyrightText)) @@ -51,10 +51,10 @@ func renderFile2_2(f *spdx.File2_2, w io.Writer) error { } } if f.FileComment != "" { - fmt.Fprintf(w, "FileComment: %s\n", f.FileComment) + fmt.Fprintf(w, "FileComment: %s\n", textify(f.FileComment)) } if f.FileNotice != "" { - fmt.Fprintf(w, "FileNotice: %s\n", f.FileNotice) + fmt.Fprintf(w, "FileNotice: %s\n", textify(f.FileNotice)) } for _, s := range f.FileContributor { fmt.Fprintf(w, "FileContributor: %s\n", s) diff --git a/tvsaver/saver2v2/save_file_test.go b/tvsaver/saver2v2/save_file_test.go index 159074d..76ba839 100644 --- a/tvsaver/saver2v2/save_file_test.go +++ b/tvsaver/saver2v2/save_file_test.go @@ -65,6 +65,8 @@ func TestSaver2_2FileSavesText(t *testing.T) { }, FileAttributionTexts: []string{ "attributions", + `multi-line +attribution`, }, FileDependencies: []string{ "f-1.txt", @@ -98,6 +100,8 @@ FileNotice: This file may be used under either Apache-2.0 or Apache-1.1. FileContributor: John Doe jdoe@example.com FileContributor: EvilCorp FileAttributionText: attributions +FileAttributionText: multi-line +attribution FileDependency: f-1.txt FileDependency: g.txt @@ -277,3 +281,56 @@ Copyright (c) John Doe t.Errorf("Expected %v, got %v", want.String(), got.String()) } } + +func TestSaver2_2FileWrapsCommentsAndNoticesMultiLine(t *testing.T) { + f := &spdx.File2_2{ + FileName: "/tmp/whatever.txt", + FileSPDXIdentifier: spdx.ElementID("File123"), + FileChecksums: map[spdx.ChecksumAlgorithm]spdx.Checksum{ + spdx.SHA1: spdx.Checksum{ + Algorithm: spdx.SHA1, + Value: "85ed0817af83a24ad8da68c2b5094de69833983c", + }, + }, + LicenseComments: `this is a +multi-line license comment`, + LicenseConcluded: "Apache-2.0", + LicenseInfoInFile: []string{ + "Apache-2.0", + }, + FileCopyrightText: "Copyright (c) Jane Doe", + FileComment: `this is a +multi-line file comment`, + FileNotice: `This file may be used +under either Apache-2.0 or Apache-1.1.`, + } + + // what we want to get, as a buffer of bytes + want := bytes.NewBufferString(`FileName: /tmp/whatever.txt +SPDXID: SPDXRef-File123 +FileChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983c +LicenseConcluded: Apache-2.0 +LicenseInfoInFile: Apache-2.0 +LicenseComments: this is a +multi-line license comment +FileCopyrightText: Copyright (c) Jane Doe +FileComment: this is a +multi-line file comment +FileNotice: This file may be used +under either Apache-2.0 or Apache-1.1. + +`) + + // render as buffer of bytes + var got bytes.Buffer + err := renderFile2_2(f, &got) + if err != nil { + t.Errorf("Expected nil error, got %v", err) + } + + // check that they match + c := bytes.Compare(want.Bytes(), got.Bytes()) + if c != 0 { + t.Errorf("Expected %v, got %v", want.String(), got.String()) + } +} diff --git a/tvsaver/saver2v2/save_package.go b/tvsaver/saver2v2/save_package.go index 1c74872..4929775 100644 --- a/tvsaver/saver2v2/save_package.go +++ b/tvsaver/saver2v2/save_package.go @@ -88,7 +88,7 @@ func renderPackage2_2(pkg *spdx.Package2_2, w io.Writer) error { fmt.Fprintf(w, "PackageLicenseComments: %s\n", textify(pkg.PackageLicenseComments)) } if pkg.PackageCopyrightText != "" { - fmt.Fprintf(w, "PackageCopyrightText: %s\n", pkg.PackageCopyrightText) + fmt.Fprintf(w, "PackageCopyrightText: %s\n", textify(pkg.PackageCopyrightText)) } if pkg.PackageSummary != "" { fmt.Fprintf(w, "PackageSummary: %s\n", textify(pkg.PackageSummary)) @@ -102,7 +102,7 @@ func renderPackage2_2(pkg *spdx.Package2_2, w io.Writer) error { for _, s := range pkg.PackageExternalReferences { fmt.Fprintf(w, "ExternalRef: %s %s %s\n", s.Category, s.RefType, s.Locator) if s.ExternalRefComment != "" { - fmt.Fprintf(w, "ExternalRefComment: %s\n", s.ExternalRefComment) + fmt.Fprintf(w, "ExternalRefComment: %s\n", textify(s.ExternalRefComment)) } } for _, s := range pkg.PackageAttributionTexts { diff --git a/tvsaver/saver2v2/save_package_test.go b/tvsaver/saver2v2/save_package_test.go index be16e85..72d1de2 100644 --- a/tvsaver/saver2v2/save_package_test.go +++ b/tvsaver/saver2v2/save_package_test.go @@ -29,7 +29,8 @@ func TestSaver2_2PackageSavesTextCombo1(t *testing.T) { Category: "PACKAGE-MANAGER", RefType: "npm", Locator: "p1@0.1.0", - // no ExternalRefComment for this one + ExternalRefComment: `this is a +multi-line external ref comment`, } // NOTE, this is an entirely made up SWH persistent ID @@ -124,6 +125,8 @@ PackageComment: this is a comment comment ExternalRef: SECURITY cpe22Type cpe:/a:john_doe_inc:p1:0.1.0 ExternalRefComment: this is an external ref comment #1 ExternalRef: PACKAGE-MANAGER npm p1@0.1.0 +ExternalRefComment: this is a +multi-line external ref comment ExternalRef: PERSISTENT-ID swh swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2 ExternalRef: OTHER anything anything-without-spaces-can-go-here PackageAttributionText: Include this notice in all advertising materials @@ -471,3 +474,47 @@ FileCopyrightText: Copyright (c) John Doe t.Errorf("Expected %v, got %v", want.String(), got.String()) } } + +func TestSaver2_2PackageWrapsMultiLine(t *testing.T) { + pkg := &spdx.Package2_2{ + PackageName: "p1", + PackageSPDXIdentifier: spdx.ElementID("p1"), + PackageDownloadLocation: "http://example.com/p1/p1-0.1.0-master.tar.gz", + FilesAnalyzed: false, + IsFilesAnalyzedTagPresent: true, + PackageLicenseConcluded: "GPL-2.0-or-later", + PackageLicenseInfoFromFiles: []string{ + "Apache-1.1", + "Apache-2.0", + "GPL-2.0-or-later", + }, + PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later", + PackageCopyrightText: `Copyright (c) John Doe, Inc. +Copyright Jane Doe`, + } + + // what we want to get, as a buffer of bytes + want := bytes.NewBufferString(`PackageName: p1 +SPDXID: SPDXRef-p1 +PackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz +FilesAnalyzed: false +PackageLicenseConcluded: GPL-2.0-or-later +PackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later +PackageCopyrightText: Copyright (c) John Doe, Inc. +Copyright Jane Doe + +`) + + // render as buffer of bytes + var got bytes.Buffer + err := renderPackage2_2(pkg, &got) + if err != nil { + t.Errorf("Expected nil error, got %v", err) + } + + // check that they match + c := bytes.Compare(want.Bytes(), got.Bytes()) + if c != 0 { + t.Errorf("Expected %v, got %v", want.String(), got.String()) + } +} diff --git a/tvsaver/saver2v2/save_relationship.go b/tvsaver/saver2v2/save_relationship.go index cff5a4a..4bd12dd 100644 --- a/tvsaver/saver2v2/save_relationship.go +++ b/tvsaver/saver2v2/save_relationship.go @@ -16,7 +16,7 @@ func renderRelationship2_2(rln *spdx.Relationship2_2, w io.Writer) error { fmt.Fprintf(w, "Relationship: %s %s %s\n", rlnAStr, rln.Relationship, rlnBStr) } if rln.RelationshipComment != "" { - fmt.Fprintf(w, "RelationshipComment: %s\n", rln.RelationshipComment) + fmt.Fprintf(w, "RelationshipComment: %s\n", textify(rln.RelationshipComment)) } return nil diff --git a/tvsaver/saver2v2/save_relationship_test.go b/tvsaver/saver2v2/save_relationship_test.go index ab98184..ebb3e37 100644 --- a/tvsaver/saver2v2/save_relationship_test.go +++ b/tvsaver/saver2v2/save_relationship_test.go @@ -112,3 +112,33 @@ func TestSaver2_2RelationshipCanHaveNOASSERTIONOnRight(t *testing.T) { t.Errorf("Expected %v, got %v", want.String(), got.String()) } } + +func TestSaver2_2RelationshipWrapsCommentMultiLine(t *testing.T) { + rln := &spdx.Relationship2_2{ + RefA: spdx.MakeDocElementID("", "DOCUMENT"), + RefB: spdx.MakeDocElementID("", "2"), + Relationship: "DESCRIBES", + RelationshipComment: `this is a +multi-line comment`, + } + + // what we want to get, as a buffer of bytes + // no trailing blank newline + want := bytes.NewBufferString(`Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-2 +RelationshipComment: this is a +multi-line comment +`) + + // render as buffer of bytes + var got bytes.Buffer + err := renderRelationship2_2(rln, &got) + if err != nil { + t.Errorf("Expected nil error, got %v", err) + } + + // check that they match + c := bytes.Compare(want.Bytes(), got.Bytes()) + if c != 0 { + t.Errorf("Expected %v, got %v", want.String(), got.String()) + } +} diff --git a/tvsaver/saver2v2/save_review.go b/tvsaver/saver2v2/save_review.go index 5e2da6e..48004e4 100644 --- a/tvsaver/saver2v2/save_review.go +++ b/tvsaver/saver2v2/save_review.go @@ -17,7 +17,7 @@ func renderReview2_2(rev *spdx.Review2_2, w io.Writer) error { fmt.Fprintf(w, "ReviewDate: %s\n", rev.ReviewDate) } if rev.ReviewComment != "" { - fmt.Fprintf(w, "ReviewComment: %s\n", rev.ReviewComment) + fmt.Fprintf(w, "ReviewComment: %s\n", textify(rev.ReviewComment)) } fmt.Fprintf(w, "\n") diff --git a/tvsaver/saver2v2/save_review_test.go b/tvsaver/saver2v2/save_review_test.go index 15fa28d..25fe469 100644 --- a/tvsaver/saver2v2/save_review_test.go +++ b/tvsaver/saver2v2/save_review_test.go @@ -65,3 +65,34 @@ ReviewDate: 2018-10-14T10:28:00Z t.Errorf("Expected %v, got %v", want.String(), got.String()) } } + +func TestSaver2_2ReviewWrapsMultiLine(t *testing.T) { + rev := &spdx.Review2_2{ + Reviewer: "John Doe", + ReviewerType: "Person", + ReviewDate: "2018-10-14T10:28:00Z", + ReviewComment: `this is a +multi-line review comment`, + } + + // what we want to get, as a buffer of bytes + want := bytes.NewBufferString(`Reviewer: Person: John Doe +ReviewDate: 2018-10-14T10:28:00Z +ReviewComment: this is a +multi-line review comment + +`) + + // render as buffer of bytes + var got bytes.Buffer + err := renderReview2_2(rev, &got) + if err != nil { + t.Errorf("Expected nil error, got %v", err) + } + + // check that they match + c := bytes.Compare(want.Bytes(), got.Bytes()) + if c != 0 { + t.Errorf("Expected %v, got %v", want.String(), got.String()) + } +} -- cgit v1.2.3