315 lines
6.3 KiB
Go
315 lines
6.3 KiB
Go
|
|
package common
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
"reflect"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func Test_DocElementIDEncoding(t *testing.T) {
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
value DocElementID
|
||
|
|
expected string
|
||
|
|
err bool
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "ElementRefID",
|
||
|
|
value: DocElementID{
|
||
|
|
ElementRefID: "some-id",
|
||
|
|
},
|
||
|
|
expected: "SPDXRef-some-id",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "DocumentRefID:ElementRefID",
|
||
|
|
value: DocElementID{
|
||
|
|
DocumentRefID: "a-doc",
|
||
|
|
ElementRefID: "some-id",
|
||
|
|
},
|
||
|
|
expected: "DocumentRef-a-doc:SPDXRef-some-id",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "DocumentRefID no ElementRefID",
|
||
|
|
value: DocElementID{
|
||
|
|
DocumentRefID: "a-doc",
|
||
|
|
},
|
||
|
|
err: true,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "SpecialID",
|
||
|
|
value: DocElementID{
|
||
|
|
SpecialID: "special-id",
|
||
|
|
},
|
||
|
|
expected: "special-id",
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, test := range tests {
|
||
|
|
t.Run(test.name, func(t *testing.T) {
|
||
|
|
result, err := json.Marshal(test.value)
|
||
|
|
switch {
|
||
|
|
case !test.err && err != nil:
|
||
|
|
t.Fatalf("unexpected error: %v", err)
|
||
|
|
case test.err && err == nil:
|
||
|
|
t.Fatalf("expected error but got none")
|
||
|
|
case test.err:
|
||
|
|
return
|
||
|
|
}
|
||
|
|
s := string(result)
|
||
|
|
if !strings.HasPrefix(s, `"`) || !strings.HasSuffix(s, `"`) {
|
||
|
|
t.Fatalf("string was not returned: %s", s)
|
||
|
|
}
|
||
|
|
s = strings.Trim(s, `"`)
|
||
|
|
if test.expected != s {
|
||
|
|
t.Fatalf("%s != %s", test.expected, s)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_DocElementIDDecoding(t *testing.T) {
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
value string
|
||
|
|
expected DocElementID
|
||
|
|
err bool
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "ElementRefID",
|
||
|
|
value: "SPDXRef-some-id",
|
||
|
|
expected: DocElementID{
|
||
|
|
ElementRefID: "some-id",
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "DocumentRefID:ElementRefID",
|
||
|
|
value: "DocumentRef-a-doc:SPDXRef-some-id",
|
||
|
|
expected: DocElementID{
|
||
|
|
DocumentRefID: "a-doc",
|
||
|
|
ElementRefID: "some-id",
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "DocumentRefID no ElementRefID",
|
||
|
|
value: "DocumentRef-a-doc",
|
||
|
|
expected: DocElementID{
|
||
|
|
DocumentRefID: "a-doc",
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "DocumentRefID invalid ElementRefID",
|
||
|
|
value: "DocumentRef-a-doc:invalid",
|
||
|
|
err: true,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "invalid format",
|
||
|
|
value: "some-id-without-spdxref",
|
||
|
|
err: true,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "SpecialID NONE",
|
||
|
|
value: "NONE",
|
||
|
|
expected: DocElementID{
|
||
|
|
SpecialID: "NONE",
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "SpecialID NOASSERTION",
|
||
|
|
value: "NOASSERTION",
|
||
|
|
expected: DocElementID{
|
||
|
|
SpecialID: "NOASSERTION",
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, test := range tests {
|
||
|
|
t.Run(test.name, func(t *testing.T) {
|
||
|
|
out := DocElementID{}
|
||
|
|
s := fmt.Sprintf(`"%s"`, test.value)
|
||
|
|
err := json.Unmarshal([]byte(s), &out)
|
||
|
|
switch {
|
||
|
|
case !test.err && err != nil:
|
||
|
|
t.Fatalf("unexpected error: %v", err)
|
||
|
|
case test.err && err == nil:
|
||
|
|
t.Fatalf("expected error but got none")
|
||
|
|
case test.err:
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if !reflect.DeepEqual(test.expected, out) {
|
||
|
|
t.Fatalf("unexpected value: %v != %v", test.expected, out)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_ElementIDEncoding(t *testing.T) {
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
value ElementID
|
||
|
|
expected string
|
||
|
|
err bool
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "appends spdxref",
|
||
|
|
value: ElementID("some-id"),
|
||
|
|
expected: "SPDXRef-some-id",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "appends spdxref",
|
||
|
|
value: ElementID("SPDXRef-some-id"),
|
||
|
|
expected: "SPDXRef-some-id",
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, test := range tests {
|
||
|
|
t.Run(test.name, func(t *testing.T) {
|
||
|
|
result, err := json.Marshal(test.value)
|
||
|
|
switch {
|
||
|
|
case !test.err && err != nil:
|
||
|
|
t.Fatalf("unexpected error: %v", err)
|
||
|
|
case test.err && err == nil:
|
||
|
|
t.Fatalf("expected error but got none")
|
||
|
|
case test.err:
|
||
|
|
return
|
||
|
|
}
|
||
|
|
s := string(result)
|
||
|
|
if !strings.HasPrefix(s, `"`) || !strings.HasSuffix(s, `"`) {
|
||
|
|
t.Fatalf("string was not returned: %s", s)
|
||
|
|
}
|
||
|
|
s = strings.Trim(s, `"`)
|
||
|
|
if test.expected != s {
|
||
|
|
t.Fatalf("%s != %s", test.expected, s)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_ElementIDDecoding(t *testing.T) {
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
value string
|
||
|
|
expected ElementID
|
||
|
|
err bool
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "valid id",
|
||
|
|
value: "SPDXRef-some-id",
|
||
|
|
expected: ElementID("some-id"),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "invalid format",
|
||
|
|
value: "some-id-without-spdxref",
|
||
|
|
err: true,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, test := range tests {
|
||
|
|
t.Run(test.name, func(t *testing.T) {
|
||
|
|
var out ElementID
|
||
|
|
s := fmt.Sprintf(`"%s"`, test.value)
|
||
|
|
err := json.Unmarshal([]byte(s), &out)
|
||
|
|
switch {
|
||
|
|
case !test.err && err != nil:
|
||
|
|
t.Fatalf("unexpected error: %v", err)
|
||
|
|
case test.err && err == nil:
|
||
|
|
t.Fatalf("expected error but got none")
|
||
|
|
case test.err:
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if !reflect.DeepEqual(test.expected, out) {
|
||
|
|
t.Fatalf("unexpected value: %v != %v", test.expected, out)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_ElementIDStructEncoding(t *testing.T) {
|
||
|
|
type typ struct {
|
||
|
|
Id ElementID `json:"id"`
|
||
|
|
}
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
value typ
|
||
|
|
expected string
|
||
|
|
err bool
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "appends spdxref",
|
||
|
|
value: typ{
|
||
|
|
Id: ElementID("some-id"),
|
||
|
|
},
|
||
|
|
expected: `{"id":"SPDXRef-some-id"}`,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "appends spdxref",
|
||
|
|
value: typ{
|
||
|
|
Id: ElementID("SPDXRef-some-id"),
|
||
|
|
},
|
||
|
|
expected: `{"id":"SPDXRef-some-id"}`,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, test := range tests {
|
||
|
|
t.Run(test.name, func(t *testing.T) {
|
||
|
|
result, err := json.Marshal(test.value)
|
||
|
|
switch {
|
||
|
|
case !test.err && err != nil:
|
||
|
|
t.Fatalf("unexpected error: %v", err)
|
||
|
|
case test.err && err == nil:
|
||
|
|
t.Fatalf("expected error but got none")
|
||
|
|
case test.err:
|
||
|
|
return
|
||
|
|
}
|
||
|
|
s := string(result)
|
||
|
|
if test.expected != s {
|
||
|
|
t.Fatalf("%s != %s", test.expected, s)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_ElementIDStructDecoding(t *testing.T) {
|
||
|
|
type typ struct {
|
||
|
|
Id ElementID `json:"id"`
|
||
|
|
}
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
value string
|
||
|
|
expected typ
|
||
|
|
err bool
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "valid id",
|
||
|
|
expected: typ{
|
||
|
|
Id: ElementID("some-id"),
|
||
|
|
},
|
||
|
|
value: `{"id":"SPDXRef-some-id"}`,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "invalid format",
|
||
|
|
value: `{"id":"some-id"}`,
|
||
|
|
err: true,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, test := range tests {
|
||
|
|
t.Run(test.name, func(t *testing.T) {
|
||
|
|
out := typ{}
|
||
|
|
err := json.Unmarshal([]byte(test.value), &out)
|
||
|
|
switch {
|
||
|
|
case !test.err && err != nil:
|
||
|
|
t.Fatalf("unexpected error: %v", err)
|
||
|
|
case test.err && err == nil:
|
||
|
|
t.Fatalf("expected error but got none")
|
||
|
|
case test.err:
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if !reflect.DeepEqual(test.expected, out) {
|
||
|
|
t.Fatalf("unexpected value: %v != %v", test.expected, out)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|