mirror of
https://github.com/anchore/syft.git
synced 2026-11-03 07:56:36 +01:00
Remove internal string set (#2219)
* remove internal string set Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * incorporate changes from #2227 Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * beef up the pkg.License.Merg() doc string Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> --------- Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
This commit is contained in:
+134
-5
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
"github.com/anchore/syft/syft/artifact"
|
||||
"github.com/anchore/syft/syft/file"
|
||||
"github.com/anchore/syft/syft/license"
|
||||
)
|
||||
|
||||
func Test_Hash(t *testing.T) {
|
||||
@@ -18,11 +19,8 @@ func Test_Hash(t *testing.T) {
|
||||
loc2 := file.NewLocation("place!")
|
||||
loc2.FileSystemID = "fs2" // important! there is a different file system ID
|
||||
|
||||
lic1 := NewLicenseFromLocations("MIT", loc1)
|
||||
lic2 := NewLicenseFromLocations("MIT", loc2)
|
||||
|
||||
lic1.URLs.Add("foo")
|
||||
lic2.URLs.Add("bar") // we also want to check the URLs are ignored
|
||||
lic1 := NewLicenseFromFields("MIT", "foo", &loc1)
|
||||
lic2 := NewLicenseFromFields("MIT", "bar", &loc2)
|
||||
|
||||
hash1, err := artifact.IDByHash(lic1)
|
||||
require.NoError(t, err)
|
||||
@@ -97,3 +95,134 @@ func Test_Sort(t *testing.T) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func TestLicense_Merge(t *testing.T) {
|
||||
locA := file.NewLocation("a")
|
||||
locB := file.NewLocation("b")
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
subject License
|
||||
other License
|
||||
want License
|
||||
wantErr require.ErrorAssertionFunc
|
||||
}{
|
||||
{
|
||||
name: "valid merge",
|
||||
subject: License{
|
||||
Value: "MIT",
|
||||
SPDXExpression: "MIT",
|
||||
Type: license.Declared,
|
||||
URLs: []string{
|
||||
"b", "a",
|
||||
},
|
||||
Locations: file.NewLocationSet(locA),
|
||||
},
|
||||
other: License{
|
||||
Value: "MIT",
|
||||
SPDXExpression: "MIT",
|
||||
Type: license.Declared,
|
||||
URLs: []string{
|
||||
"c", "d",
|
||||
},
|
||||
Locations: file.NewLocationSet(locB),
|
||||
},
|
||||
want: License{
|
||||
Value: "MIT",
|
||||
SPDXExpression: "MIT",
|
||||
Type: license.Declared,
|
||||
URLs: []string{
|
||||
"a", "b", "c", "d",
|
||||
},
|
||||
Locations: file.NewLocationSet(locA, locB),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "mismatched value",
|
||||
subject: License{
|
||||
Value: "DIFFERENT!!",
|
||||
SPDXExpression: "MIT",
|
||||
Type: license.Declared,
|
||||
URLs: []string{
|
||||
"b", "a",
|
||||
},
|
||||
Locations: file.NewLocationSet(locA),
|
||||
},
|
||||
other: License{
|
||||
Value: "MIT",
|
||||
SPDXExpression: "MIT",
|
||||
Type: license.Declared,
|
||||
URLs: []string{
|
||||
"c", "d",
|
||||
},
|
||||
Locations: file.NewLocationSet(locB),
|
||||
},
|
||||
wantErr: require.Error,
|
||||
},
|
||||
{
|
||||
name: "mismatched spdx expression",
|
||||
subject: License{
|
||||
Value: "MIT",
|
||||
SPDXExpression: "DIFFERENT!!",
|
||||
Type: license.Declared,
|
||||
URLs: []string{
|
||||
"b", "a",
|
||||
},
|
||||
Locations: file.NewLocationSet(locA),
|
||||
},
|
||||
other: License{
|
||||
Value: "MIT",
|
||||
SPDXExpression: "MIT",
|
||||
Type: license.Declared,
|
||||
URLs: []string{
|
||||
"c", "d",
|
||||
},
|
||||
Locations: file.NewLocationSet(locB),
|
||||
},
|
||||
wantErr: require.Error,
|
||||
},
|
||||
{
|
||||
name: "mismatched type",
|
||||
subject: License{
|
||||
Value: "MIT",
|
||||
SPDXExpression: "MIT",
|
||||
Type: license.Concluded,
|
||||
URLs: []string{
|
||||
"b", "a",
|
||||
},
|
||||
Locations: file.NewLocationSet(locA),
|
||||
},
|
||||
other: License{
|
||||
Value: "MIT",
|
||||
SPDXExpression: "MIT",
|
||||
Type: license.Declared,
|
||||
URLs: []string{
|
||||
"c", "d",
|
||||
},
|
||||
Locations: file.NewLocationSet(locB),
|
||||
},
|
||||
wantErr: require.Error,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if tt.wantErr == nil {
|
||||
tt.wantErr = require.NoError
|
||||
}
|
||||
|
||||
subjectLocationLen := len(tt.subject.Locations.ToSlice())
|
||||
subjectURLLen := len(tt.subject.URLs)
|
||||
|
||||
got, err := tt.subject.Merge(tt.other)
|
||||
tt.wantErr(t, err)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
require.NotNilf(t, got, "expected a non-nil license")
|
||||
assert.Equal(t, tt.want, *got)
|
||||
// prove we don't modify the subject
|
||||
assert.Equal(t, subjectLocationLen, len(tt.subject.Locations.ToSlice()))
|
||||
assert.Equal(t, subjectURLLen, len(tt.subject.URLs))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user