aboutsummaryrefslogtreecommitdiff
path: root/spdxlib
diff options
context:
space:
mode:
Diffstat (limited to 'spdxlib')
-rw-r--r--spdxlib/described_elements.go21
-rw-r--r--spdxlib/described_elements_test.go196
-rw-r--r--spdxlib/documents.go17
-rw-r--r--spdxlib/documents_test.go100
-rw-r--r--spdxlib/element_ids.go5
-rw-r--r--spdxlib/element_ids_test.go7
-rw-r--r--spdxlib/relationships.go14
-rw-r--r--spdxlib/relationships_test.go72
8 files changed, 225 insertions, 207 deletions
diff --git a/spdxlib/described_elements.go b/spdxlib/described_elements.go
index 21d8e7e..61833b4 100644
--- a/spdxlib/described_elements.go
+++ b/spdxlib/described_elements.go
@@ -5,7 +5,10 @@ package spdxlib
import (
"fmt"
- "github.com/spdx/tools-golang/spdx"
+
+ "github.com/spdx/tools-golang/spdx/common"
+ "github.com/spdx/tools-golang/spdx/v2_1"
+ "github.com/spdx/tools-golang/spdx/v2_2"
)
// GetDescribedPackageIDs2_1 returns a slice of ElementIDs for all Packages
@@ -13,7 +16,7 @@ import (
// - If the document has only one Package, its ID is returned.
// - If the document has 2+ Packages, it returns the IDs of those that have
// a DESCRIBES (or DESCRIBED_BY) relationship to this DOCUMENT.
-func GetDescribedPackageIDs2_1(doc *spdx.Document2_1) ([]spdx.ElementID, error) {
+func GetDescribedPackageIDs2_1(doc *v2_1.Document) ([]common.ElementID, error) {
// if nil Packages map or zero packages in it, return empty slice
if doc.Packages == nil {
return nil, fmt.Errorf("Packages map is nil")
@@ -24,7 +27,7 @@ func GetDescribedPackageIDs2_1(doc *spdx.Document2_1) ([]spdx.ElementID, error)
if len(doc.Packages) == 1 {
// get first (only) one and return its ID
for _, pkg := range doc.Packages {
- return []spdx.ElementID{pkg.PackageSPDXIdentifier}, nil
+ return []common.ElementID{pkg.PackageSPDXIdentifier}, nil
}
}
@@ -35,8 +38,8 @@ func GetDescribedPackageIDs2_1(doc *spdx.Document2_1) ([]spdx.ElementID, error)
return nil, fmt.Errorf("multiple Packages in Document but Relationships slice is nil")
}
- eIDs, err := FilterRelationships2_1(doc, func(relationship *spdx.Relationship2_1) *spdx.ElementID {
- refDocument := spdx.MakeDocElementID("", "DOCUMENT")
+ eIDs, err := FilterRelationships2_1(doc, func(relationship *v2_1.Relationship) *common.ElementID {
+ refDocument := common.MakeDocElementID("", "DOCUMENT")
if relationship.Relationship == "DESCRIBES" && relationship.RefA == refDocument {
return &relationship.RefB.ElementRefID
@@ -64,7 +67,7 @@ func GetDescribedPackageIDs2_1(doc *spdx.Document2_1) ([]spdx.ElementID, error)
// - If the document has only one Package, its ID is returned.
// - If the document has 2+ Packages, it returns the IDs of those that have
// a DESCRIBES (or DESCRIBED_BY) relationship to this DOCUMENT.
-func GetDescribedPackageIDs2_2(doc *spdx.Document2_2) ([]spdx.ElementID, error) {
+func GetDescribedPackageIDs2_2(doc *v2_2.Document) ([]common.ElementID, error) {
// if nil Packages map or zero packages in it, return empty slice
if doc.Packages == nil {
return nil, fmt.Errorf("Packages map is nil")
@@ -75,7 +78,7 @@ func GetDescribedPackageIDs2_2(doc *spdx.Document2_2) ([]spdx.ElementID, error)
if len(doc.Packages) == 1 {
// get first (only) one and return its ID
for _, pkg := range doc.Packages {
- return []spdx.ElementID{pkg.PackageSPDXIdentifier}, nil
+ return []common.ElementID{pkg.PackageSPDXIdentifier}, nil
}
}
@@ -86,8 +89,8 @@ func GetDescribedPackageIDs2_2(doc *spdx.Document2_2) ([]spdx.ElementID, error)
return nil, fmt.Errorf("multiple Packages in Document but Relationships slice is nil")
}
- eIDs, err := FilterRelationships2_2(doc, func(relationship *spdx.Relationship2_2) *spdx.ElementID {
- refDocument := spdx.MakeDocElementID("", "DOCUMENT")
+ eIDs, err := FilterRelationships2_2(doc, func(relationship *v2_2.Relationship) *common.ElementID {
+ refDocument := common.MakeDocElementID("", "DOCUMENT")
if relationship.Relationship == "DESCRIBES" && relationship.RefA == refDocument {
return &relationship.RefB.ElementRefID
diff --git a/spdxlib/described_elements_test.go b/spdxlib/described_elements_test.go
index 4c2a1a1..8ea9cd5 100644
--- a/spdxlib/described_elements_test.go
+++ b/spdxlib/described_elements_test.go
@@ -5,46 +5,48 @@ package spdxlib
import (
"testing"
- "github.com/spdx/tools-golang/spdx"
+ "github.com/spdx/tools-golang/spdx/common"
+ "github.com/spdx/tools-golang/spdx/v2_1"
+ "github.com/spdx/tools-golang/spdx/v2_2"
)
// ===== 2.1 tests =====
func Test2_1CanGetIDsOfDescribedPackages(t *testing.T) {
// set up document and some packages and relationships
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
- Packages: []*spdx.Package2_1{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
+ Packages: []*v2_1.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
},
- Relationships: []*spdx.Relationship2_1{
- &spdx.Relationship2_1{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p1"),
+ Relationships: []*v2_1.Relationship{
+ &v2_1.Relationship{
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
},
- &spdx.Relationship2_1{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p5"),
+ &v2_1.Relationship{
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p5"),
Relationship: "DESCRIBES",
},
// inverse relationship -- should also get detected
- &spdx.Relationship2_1{
- RefA: spdx.MakeDocElementID("", "p4"),
- RefB: spdx.MakeDocElementID("", "DOCUMENT"),
+ &v2_1.Relationship{
+ RefA: common.MakeDocElementID("", "p4"),
+ RefB: common.MakeDocElementID("", "DOCUMENT"),
Relationship: "DESCRIBED_BY",
},
// different relationship
- &spdx.Relationship2_1{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ &v2_1.Relationship{
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DEPENDS_ON",
},
},
@@ -59,26 +61,26 @@ func Test2_1CanGetIDsOfDescribedPackages(t *testing.T) {
if len(describedPkgIDs) != 3 {
t.Fatalf("expected %d packages, got %d", 3, len(describedPkgIDs))
}
- if describedPkgIDs[0] != spdx.ElementID("p1") {
- t.Errorf("expected %v, got %v", spdx.ElementID("p1"), describedPkgIDs[0])
+ if describedPkgIDs[0] != common.ElementID("p1") {
+ t.Errorf("expected %v, got %v", common.ElementID("p1"), describedPkgIDs[0])
}
- if describedPkgIDs[1] != spdx.ElementID("p4") {
- t.Errorf("expected %v, got %v", spdx.ElementID("p4"), describedPkgIDs[1])
+ if describedPkgIDs[1] != common.ElementID("p4") {
+ t.Errorf("expected %v, got %v", common.ElementID("p4"), describedPkgIDs[1])
}
- if describedPkgIDs[2] != spdx.ElementID("p5") {
- t.Errorf("expected %v, got %v", spdx.ElementID("p5"), describedPkgIDs[2])
+ if describedPkgIDs[2] != common.ElementID("p5") {
+ t.Errorf("expected %v, got %v", common.ElementID("p5"), describedPkgIDs[2])
}
}
func Test2_1GetDescribedPackagesReturnsSinglePackageIfOnlyOne(t *testing.T) {
// set up document and one package, but no relationships
// b/c only one package
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
- Packages: []*spdx.Package2_1{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
+ Packages: []*v2_1.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
},
}
@@ -92,30 +94,30 @@ func Test2_1GetDescribedPackagesReturnsSinglePackageIfOnlyOne(t *testing.T) {
if len(describedPkgIDs) != 1 {
t.Fatalf("expected %d package, got %d", 1, len(describedPkgIDs))
}
- if describedPkgIDs[0] != spdx.ElementID("p1") {
- t.Errorf("expected %v, got %v", spdx.ElementID("p1"), describedPkgIDs[0])
+ if describedPkgIDs[0] != common.ElementID("p1") {
+ t.Errorf("expected %v, got %v", common.ElementID("p1"), describedPkgIDs[0])
}
}
func Test2_1FailsToGetDescribedPackagesIfMoreThanOneWithoutDescribesRelationship(t *testing.T) {
// set up document and multiple packages, but no DESCRIBES relationships
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
- Packages: []*spdx.Package2_1{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
+ Packages: []*v2_1.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
},
- Relationships: []*spdx.Relationship2_1{
+ Relationships: []*v2_1.Relationship{
// different relationship
- &spdx.Relationship2_1{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ &v2_1.Relationship{
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DEPENDS_ON",
},
},
@@ -129,12 +131,12 @@ func Test2_1FailsToGetDescribedPackagesIfMoreThanOneWithoutDescribesRelationship
func Test2_1FailsToGetDescribedPackagesIfMoreThanOneWithNilRelationships(t *testing.T) {
// set up document and multiple packages, but no relationships slice
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
- Packages: []*spdx.Package2_1{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
+ Packages: []*v2_1.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
},
@@ -148,12 +150,12 @@ func Test2_1FailsToGetDescribedPackagesIfMoreThanOneWithNilRelationships(t *test
func Test2_1FailsToGetDescribedPackagesIfZeroPackagesInMap(t *testing.T) {
// set up document but no packages
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
- Packages: []*spdx.Package2_1{},
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
+ Packages: []*v2_1.Package{},
}
_, err := GetDescribedPackageIDs2_1(doc)
@@ -164,11 +166,11 @@ func Test2_1FailsToGetDescribedPackagesIfZeroPackagesInMap(t *testing.T) {
func Test2_1FailsToGetDescribedPackagesIfNilMap(t *testing.T) {
// set up document but no packages
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
}
_, err := GetDescribedPackageIDs2_1(doc)
@@ -181,39 +183,39 @@ func Test2_1FailsToGetDescribedPackagesIfNilMap(t *testing.T) {
func Test2_2CanGetIDsOfDescribedPackages(t *testing.T) {
// set up document and some packages and relationships
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.2",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
- Packages: []*spdx.Package2_2{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
+ Packages: []*v2_2.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
},
- Relationships: []*spdx.Relationship2_2{
- &spdx.Relationship2_2{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p1"),
+ Relationships: []*v2_2.Relationship{
+ &v2_2.Relationship{
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
},
- &spdx.Relationship2_2{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p5"),
+ &v2_2.Relationship{
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p5"),
Relationship: "DESCRIBES",
},
// inverse relationship -- should also get detected
- &spdx.Relationship2_2{
- RefA: spdx.MakeDocElementID("", "p4"),
- RefB: spdx.MakeDocElementID("", "DOCUMENT"),
+ &v2_2.Relationship{
+ RefA: common.MakeDocElementID("", "p4"),
+ RefB: common.MakeDocElementID("", "DOCUMENT"),
Relationship: "DESCRIBED_BY",
},
// different relationship
- &spdx.Relationship2_2{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ &v2_2.Relationship{
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DEPENDS_ON",
},
},
@@ -228,26 +230,26 @@ func Test2_2CanGetIDsOfDescribedPackages(t *testing.T) {
if len(describedPkgIDs) != 3 {
t.Fatalf("expected %d packages, got %d", 3, len(describedPkgIDs))
}
- if describedPkgIDs[0] != spdx.ElementID("p1") {
- t.Errorf("expected %v, got %v", spdx.ElementID("p1"), describedPkgIDs[0])
+ if describedPkgIDs[0] != common.ElementID("p1") {
+ t.Errorf("expected %v, got %v", common.ElementID("p1"), describedPkgIDs[0])
}
- if describedPkgIDs[1] != spdx.ElementID("p4") {
- t.Errorf("expected %v, got %v", spdx.ElementID("p4"), describedPkgIDs[1])
+ if describedPkgIDs[1] != common.ElementID("p4") {
+ t.Errorf("expected %v, got %v", common.ElementID("p4"), describedPkgIDs[1])
}
- if describedPkgIDs[2] != spdx.ElementID("p5") {
- t.Errorf("expected %v, got %v", spdx.ElementID("p5"), describedPkgIDs[2])
+ if describedPkgIDs[2] != common.ElementID("p5") {
+ t.Errorf("expected %v, got %v", common.ElementID("p5"), describedPkgIDs[2])
}
}
func Test2_2GetDescribedPackagesReturnsSinglePackageIfOnlyOne(t *testing.T) {
// set up document and one package, but no relationships
// b/c only one package
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.2",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
- Packages: []*spdx.Package2_2{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
+ Packages: []*v2_2.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
},
}
@@ -261,30 +263,30 @@ func Test2_2GetDescribedPackagesReturnsSinglePackageIfOnlyOne(t *testing.T) {
if len(describedPkgIDs) != 1 {
t.Fatalf("expected %d package, got %d", 1, len(describedPkgIDs))
}
- if describedPkgIDs[0] != spdx.ElementID("p1") {
- t.Errorf("expected %v, got %v", spdx.ElementID("p1"), describedPkgIDs[0])
+ if describedPkgIDs[0] != common.ElementID("p1") {
+ t.Errorf("expected %v, got %v", common.ElementID("p1"), describedPkgIDs[0])
}
}
func Test2_2FailsToGetDescribedPackagesIfMoreThanOneWithoutDescribesRelationship(t *testing.T) {
// set up document and multiple packages, but no DESCRIBES relationships
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.2",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
- Packages: []*spdx.Package2_2{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
+ Packages: []*v2_2.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
},
- Relationships: []*spdx.Relationship2_2{
+ Relationships: []*v2_2.Relationship{
// different relationship
- &spdx.Relationship2_2{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ &v2_2.Relationship{
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DEPENDS_ON",
},
},
@@ -298,12 +300,12 @@ func Test2_2FailsToGetDescribedPackagesIfMoreThanOneWithoutDescribesRelationship
func Test2_2FailsToGetDescribedPackagesIfMoreThanOneWithNilRelationships(t *testing.T) {
// set up document and multiple packages, but no relationships slice
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.2",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
- Packages: []*spdx.Package2_2{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
+ Packages: []*v2_2.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
},
@@ -317,12 +319,12 @@ func Test2_2FailsToGetDescribedPackagesIfMoreThanOneWithNilRelationships(t *test
func Test2_2FailsToGetDescribedPackagesIfZeroPackagesInMap(t *testing.T) {
// set up document but no packages
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.2",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
- Packages: []*spdx.Package2_2{},
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
+ Packages: []*v2_2.Package{},
}
_, err := GetDescribedPackageIDs2_2(doc)
@@ -333,11 +335,11 @@ func Test2_2FailsToGetDescribedPackagesIfZeroPackagesInMap(t *testing.T) {
func Test2_2FailsToGetDescribedPackagesIfNilMap(t *testing.T) {
// set up document but no packages
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.2",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
}
_, err := GetDescribedPackageIDs2_2(doc)
diff --git a/spdxlib/documents.go b/spdxlib/documents.go
index 1f7122a..8560f08 100644
--- a/spdxlib/documents.go
+++ b/spdxlib/documents.go
@@ -3,15 +3,18 @@ package spdxlib
import (
"fmt"
- "github.com/spdx/tools-golang/spdx"
+
+ "github.com/spdx/tools-golang/spdx/common"
+ "github.com/spdx/tools-golang/spdx/v2_1"
+ "github.com/spdx/tools-golang/spdx/v2_2"
)
// ValidateDocument2_1 returns an error if the Document is found to be invalid, or nil if the Document is valid.
// Currently, this only verifies that all Element IDs mentioned in Relationships exist in the Document as either a
// Package or an UnpackagedFile.
-func ValidateDocument2_1(doc *spdx.Document2_1) error {
+func ValidateDocument2_1(doc *v2_1.Document) error {
// cache a map of valid package IDs for quick lookups
- validElementIDs := make(map[spdx.ElementID]bool)
+ validElementIDs := make(map[common.ElementID]bool)
for _, docPackage := range doc.Packages {
validElementIDs[docPackage.PackageSPDXIdentifier] = true
}
@@ -21,7 +24,7 @@ func ValidateDocument2_1(doc *spdx.Document2_1) error {
}
// add the Document element ID
- validElementIDs[spdx.MakeDocElementID("", "DOCUMENT").ElementRefID] = true
+ validElementIDs[common.MakeDocElementID("", "DOCUMENT").ElementRefID] = true
for _, relationship := range doc.Relationships {
if !validElementIDs[relationship.RefA.ElementRefID] {
@@ -39,9 +42,9 @@ func ValidateDocument2_1(doc *spdx.Document2_1) error {
// ValidateDocument2_2 returns an error if the Document is found to be invalid, or nil if the Document is valid.
// Currently, this only verifies that all Element IDs mentioned in Relationships exist in the Document as either a
// Package or an UnpackagedFile.
-func ValidateDocument2_2(doc *spdx.Document2_2) error {
+func ValidateDocument2_2(doc *v2_2.Document) error {
// cache a map of package IDs for quick lookups
- validElementIDs := make(map[spdx.ElementID]bool)
+ validElementIDs := make(map[common.ElementID]bool)
for _, docPackage := range doc.Packages {
validElementIDs[docPackage.PackageSPDXIdentifier] = true
}
@@ -51,7 +54,7 @@ func ValidateDocument2_2(doc *spdx.Document2_2) error {
}
// add the Document element ID
- validElementIDs[spdx.MakeDocElementID("", "DOCUMENT").ElementRefID] = true
+ validElementIDs[common.MakeDocElementID("", "DOCUMENT").ElementRefID] = true
for _, relationship := range doc.Relationships {
if !validElementIDs[relationship.RefA.ElementRefID] {
diff --git a/spdxlib/documents_test.go b/spdxlib/documents_test.go
index aa1f6c3..586cabd 100644
--- a/spdxlib/documents_test.go
+++ b/spdxlib/documents_test.go
@@ -5,46 +5,48 @@ package spdxlib
import (
"testing"
- "github.com/spdx/tools-golang/spdx"
+ "github.com/spdx/tools-golang/spdx/common"
+ "github.com/spdx/tools-golang/spdx/v2_1"
+ "github.com/spdx/tools-golang/spdx/v2_2"
)
// ===== 2.1 tests =====
func Test2_1ValidDocumentPassesValidation(t *testing.T) {
// set up document and some packages and relationships
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
- Packages: []*spdx.Package2_1{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
+ Packages: []*v2_1.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
},
- Relationships: []*spdx.Relationship2_1{
+ Relationships: []*v2_1.Relationship{
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p1"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
},
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p5"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p5"),
Relationship: "DESCRIBES",
},
// inverse relationship -- should also get detected
{
- RefA: spdx.MakeDocElementID("", "p4"),
- RefB: spdx.MakeDocElementID("", "DOCUMENT"),
+ RefA: common.MakeDocElementID("", "p4"),
+ RefB: common.MakeDocElementID("", "DOCUMENT"),
Relationship: "DESCRIBED_BY",
},
// different relationship
{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DEPENDS_ON",
},
},
@@ -58,31 +60,31 @@ func Test2_1ValidDocumentPassesValidation(t *testing.T) {
func Test2_1InvalidDocumentFailsValidation(t *testing.T) {
// set up document and some packages and relationships
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
- Packages: []*spdx.Package2_1{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
+ Packages: []*v2_1.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
},
- Relationships: []*spdx.Relationship2_1{
+ Relationships: []*v2_1.Relationship{
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p1"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
},
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DESCRIBES",
},
// invalid ID p99
{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p99"),
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p99"),
Relationship: "DEPENDS_ON",
},
},
@@ -98,39 +100,39 @@ func Test2_1InvalidDocumentFailsValidation(t *testing.T) {
func Test2_2ValidDocumentPassesValidation(t *testing.T) {
// set up document and some packages and relationships
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
- Packages: []*spdx.Package2_2{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
+ Packages: []*v2_2.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
},
- Relationships: []*spdx.Relationship2_2{
+ Relationships: []*v2_2.Relationship{
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p1"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
},
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p5"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p5"),
Relationship: "DESCRIBES",
},
// inverse relationship -- should also get detected
{
- RefA: spdx.MakeDocElementID("", "p4"),
- RefB: spdx.MakeDocElementID("", "DOCUMENT"),
+ RefA: common.MakeDocElementID("", "p4"),
+ RefB: common.MakeDocElementID("", "DOCUMENT"),
Relationship: "DESCRIBED_BY",
},
// different relationship
{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DEPENDS_ON",
},
},
@@ -144,31 +146,31 @@ func Test2_2ValidDocumentPassesValidation(t *testing.T) {
func Test2_2InvalidDocumentFailsValidation(t *testing.T) {
// set up document and some packages and relationships
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
- Packages: []*spdx.Package2_2{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
+ Packages: []*v2_2.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
},
- Relationships: []*spdx.Relationship2_2{
+ Relationships: []*v2_2.Relationship{
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p1"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
},
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p5"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p5"),
Relationship: "DESCRIBES",
},
// invalid ID p99
{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p99"),
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p99"),
Relationship: "DEPENDS_ON",
},
},
diff --git a/spdxlib/element_ids.go b/spdxlib/element_ids.go
index f0c5ee0..d505d40 100644
--- a/spdxlib/element_ids.go
+++ b/spdxlib/element_ids.go
@@ -3,12 +3,13 @@
package spdxlib
import (
- "github.com/spdx/tools-golang/spdx"
"sort"
+
+ "github.com/spdx/tools-golang/spdx/common"
)
// SortElementIDs sorts and returns the given slice of ElementIDs
-func SortElementIDs(eIDs []spdx.ElementID) []spdx.ElementID {
+func SortElementIDs(eIDs []common.ElementID) []common.ElementID {
sort.Slice(eIDs, func(i, j int) bool {
return eIDs[i] < eIDs[j]
})
diff --git a/spdxlib/element_ids_test.go b/spdxlib/element_ids_test.go
index 3642e16..83893ba 100644
--- a/spdxlib/element_ids_test.go
+++ b/spdxlib/element_ids_test.go
@@ -3,16 +3,17 @@
package spdxlib
import (
- "github.com/spdx/tools-golang/spdx"
"reflect"
"testing"
+
+ "github.com/spdx/tools-golang/spdx/common"
)
func TestSortElementIDs(t *testing.T) {
- eIDs := []spdx.ElementID{"def", "abc", "123"}
+ eIDs := []common.ElementID{"def", "abc", "123"}
eIDs = SortElementIDs(eIDs)
- if !reflect.DeepEqual(eIDs, []spdx.ElementID{"123", "abc", "def"}) {
+ if !reflect.DeepEqual(eIDs, []common.ElementID{"123", "abc", "def"}) {
t.Fatalf("expected sorted ElementIDs, got: %v", eIDs)
}
}
diff --git a/spdxlib/relationships.go b/spdxlib/relationships.go
index ecc5a19..5ff4197 100644
--- a/spdxlib/relationships.go
+++ b/spdxlib/relationships.go
@@ -2,12 +2,16 @@
package spdxlib
-import "github.com/spdx/tools-golang/spdx"
+import (
+ "github.com/spdx/tools-golang/spdx/common"
+ "github.com/spdx/tools-golang/spdx/v2_1"
+ "github.com/spdx/tools-golang/spdx/v2_2"
+)
// FilterRelationships2_1 returns a slice of Element IDs returned by the given filter closure. The closure is passed
// one relationship at a time, and it can return an ElementID or nil.
-func FilterRelationships2_1(doc *spdx.Document2_1, filter func(*spdx.Relationship2_1) *spdx.ElementID) ([]spdx.ElementID, error) {
- elementIDs := []spdx.ElementID{}
+func FilterRelationships2_1(doc *v2_1.Document, filter func(*v2_1.Relationship) *common.ElementID) ([]common.ElementID, error) {
+ elementIDs := []common.ElementID{}
for _, relationship := range doc.Relationships {
if id := filter(relationship); id != nil {
@@ -20,8 +24,8 @@ func FilterRelationships2_1(doc *spdx.Document2_1, filter func(*spdx.Relationshi
// FilterRelationships2_2 returns a slice of Element IDs returned by the given filter closure. The closure is passed
// one relationship at a time, and it can return an ElementID or nil.
-func FilterRelationships2_2(doc *spdx.Document2_2, filter func(*spdx.Relationship2_2) *spdx.ElementID) ([]spdx.ElementID, error) {
- elementIDs := []spdx.ElementID{}
+func FilterRelationships2_2(doc *v2_2.Document, filter func(*v2_2.Relationship) *common.ElementID) ([]common.ElementID, error) {
+ elementIDs := []common.ElementID{}
for _, relationship := range doc.Relationships {
if id := filter(relationship); id != nil {
diff --git a/spdxlib/relationships_test.go b/spdxlib/relationships_test.go
index e710d6e..5772887 100644
--- a/spdxlib/relationships_test.go
+++ b/spdxlib/relationships_test.go
@@ -5,56 +5,58 @@ package spdxlib
import (
"testing"
- "github.com/spdx/tools-golang/spdx"
+ "github.com/spdx/tools-golang/spdx/common"
+ "github.com/spdx/tools-golang/spdx/v2_1"
+ "github.com/spdx/tools-golang/spdx/v2_2"
)
// ===== 2.1 tests =====
func Test2_1FilterForDependencies(t *testing.T) {
// set up document and some packages and relationships
- doc := &spdx.Document2_1{
+ doc := &v2_1.Document{
SPDXVersion: "SPDX-2.1",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_1{},
- Packages: []*spdx.Package2_1{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_1.CreationInfo{},
+ Packages: []*v2_1.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
},
- Relationships: []*spdx.Relationship2_1{
+ Relationships: []*v2_1.Relationship{
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p1"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
},
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p5"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p5"),
Relationship: "DESCRIBES",
},
{
- RefA: spdx.MakeDocElementID("", "p4"),
- RefB: spdx.MakeDocElementID("", "DOCUMENT"),
+ RefA: common.MakeDocElementID("", "p4"),
+ RefB: common.MakeDocElementID("", "DOCUMENT"),
Relationship: "DESCRIBED_BY",
},
{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DEPENDS_ON",
},
{
- RefA: spdx.MakeDocElementID("", "p3"),
- RefB: spdx.MakeDocElementID("", "p4"),
+ RefA: common.MakeDocElementID("", "p3"),
+ RefB: common.MakeDocElementID("", "p4"),
Relationship: "DEPENDENCY_OF",
},
},
}
- eIDs, err := FilterRelationships2_1(doc, func(relationship *spdx.Relationship2_1) *spdx.ElementID {
- p1EID := spdx.MakeDocElementID("", "p1")
+ eIDs, err := FilterRelationships2_1(doc, func(relationship *v2_1.Relationship) *common.ElementID {
+ p1EID := common.MakeDocElementID("", "p1")
if relationship.Relationship == "DEPENDS_ON" && relationship.RefA == p1EID {
return &relationship.RefB.ElementRefID
} else if relationship.Relationship == "DEPENDENCY_OF" && relationship.RefB == p1EID {
@@ -71,7 +73,7 @@ func Test2_1FilterForDependencies(t *testing.T) {
t.Fatalf("expected 1 ElementID, got: %v", eIDs)
}
- if eIDs[0] != spdx.MakeDocElementID("", "p2").ElementRefID {
+ if eIDs[0] != common.MakeDocElementID("", "p2").ElementRefID {
t.Fatalf("received unexpected relationship: %v", eIDs[0])
}
}
@@ -80,46 +82,46 @@ func Test2_1FilterForDependencies(t *testing.T) {
func Test2_2FindsDependsOnRelationships(t *testing.T) {
// set up document and some packages and relationships
- doc := &spdx.Document2_2{
+ doc := &v2_2.Document{
SPDXVersion: "SPDX-2.2",
DataLicense: "CC0-1.0",
- SPDXIdentifier: spdx.ElementID("DOCUMENT"),
- CreationInfo: &spdx.CreationInfo2_2{},
- Packages: []*spdx.Package2_2{
+ SPDXIdentifier: common.ElementID("DOCUMENT"),
+ CreationInfo: &v2_2.CreationInfo{},
+ Packages: []*v2_2.Package{
{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
},
- Relationships: []*spdx.Relationship2_2{
+ Relationships: []*v2_2.Relationship{
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p1"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
},
{
- RefA: spdx.MakeDocElementID("", "DOCUMENT"),
- RefB: spdx.MakeDocElementID("", "p5"),
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "p5"),
Relationship: "DESCRIBES",
},
// inverse relationship -- should also get detected
{
- RefA: spdx.MakeDocElementID("", "p4"),
- RefB: spdx.MakeDocElementID("", "DOCUMENT"),
+ RefA: common.MakeDocElementID("", "p4"),
+ RefB: common.MakeDocElementID("", "DOCUMENT"),
Relationship: "DESCRIBED_BY",
},
// different relationship
{
- RefA: spdx.MakeDocElementID("", "p1"),
- RefB: spdx.MakeDocElementID("", "p2"),
+ RefA: common.MakeDocElementID("", "p1"),
+ RefB: common.MakeDocElementID("", "p2"),
Relationship: "DEPENDS_ON",
},
},
}
- eIDs, err := FilterRelationships2_2(doc, func(relationship *spdx.Relationship2_2) *spdx.ElementID {
- p1EID := spdx.MakeDocElementID("", "p1")
+ eIDs, err := FilterRelationships2_2(doc, func(relationship *v2_2.Relationship) *common.ElementID {
+ p1EID := common.MakeDocElementID("", "p1")
if relationship.Relationship == "DEPENDS_ON" && relationship.RefA == p1EID {
return &relationship.RefB.ElementRefID
} else if relationship.Relationship == "DEPENDENCY_OF" && relationship.RefB == p1EID {
@@ -136,7 +138,7 @@ func Test2_2FindsDependsOnRelationships(t *testing.T) {
t.Fatalf("expected 1 ElementID, got: %v", eIDs)
}
- if eIDs[0] != spdx.MakeDocElementID("", "p2").ElementRefID {
+ if eIDs[0] != common.MakeDocElementID("", "p2").ElementRefID {
t.Fatalf("received unexpected relationship: %v", eIDs[0])
}
}