blob: 7e20b5cdea885309716cfd9f91e7686371f8110c [file] [log] [blame] [edit]
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
package parser2v2
import (
"reflect"
"testing"
)
func Test_getLicenseStringFromURI(t *testing.T) {
// TestCase 1: NONE license
input := SPDX_NONE_CAPS
output := getLicenseStringFromURI(input)
expectedOutput := "NONE"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", expectedOutput, output)
}
// TestCase 2: NOASSERTION license
input = SPDX_NOASSERTION_SMALL
output = getLicenseStringFromURI(input)
expectedOutput = "NOASSERTION"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", expectedOutput, output)
}
// TestCase 3: Other license
input = NS_SPDX + "LicenseRef-1"
output = getLicenseStringFromURI(input)
expectedOutput = "LicenseRef-1"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", expectedOutput, output)
}
}
func Test_rdfParser2_2_getChecksumFromNode(t *testing.T) {
var parser *rdfParser2_2
var err error
// TestCase 1: invalid checksum algorithm
parser, _ = parserFromBodyContent(`
<spdx:Checksum>
<spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue>
<spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha999"/>
</spdx:Checksum>
`)
checksumNode := parser.gordfParserObj.Triples[0].Subject
_, _, err = parser.getChecksumFromNode(checksumNode)
if err == nil {
t.Errorf("expected an error saying invalid checksum algorithm")
}
// TestCase 2: invalid predicate
parser, _ = parserFromBodyContent(`
<spdx:Checksum>
<spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue>
<spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1"/>
<spdx:invalidPredicate />
</spdx:Checksum>
`)
checksumNode = parser.gordfParserObj.Triples[0].Subject
_, _, err = parser.getChecksumFromNode(checksumNode)
if err == nil {
t.Errorf("expected an error saying invalid predicate")
}
// TestCase 3: valid input
parser, _ = parserFromBodyContent(`
<spdx:Checksum>
<spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue>
<spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1"/>
</spdx:Checksum>
`)
checksumNode = parser.gordfParserObj.Triples[0].Subject
algorithm, value, err := parser.getChecksumFromNode(checksumNode)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if algorithm != "SHA1" {
t.Errorf("expected checksum algorithm to be sha1, found %s", algorithm)
}
expectedValue := "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
if value != expectedValue {
t.Errorf("expected checksumValue to be %s, found %s", expectedValue, value)
}
}
func Test_rdfParser2_2_getAlgorithmFromURI(t *testing.T) {
var algorithmURI string
var err error
// TestCase 1: checksumAlgorithm uri doesn't start with checksumAlgorithm_
algorithmURI = NS_SPDX + "sha1"
_, err = getAlgorithmFromURI(algorithmURI)
if err == nil {
t.Errorf("should've raised an error for algorithmURI that doesn't start with checksumAlgorithm_")
}
// TestCase 2: unknown checksum algorithm
algorithmURI = NS_SPDX + "checksumAlgorithm_sha999"
_, err = getAlgorithmFromURI(algorithmURI)
if err == nil {
t.Errorf("should've raised an error for invalid algorithm")
}
// TestCase 3: valid input
algorithmURI = NS_SPDX + "checksumAlgorithm_sha256"
algorithm, err := getAlgorithmFromURI(algorithmURI)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if algorithm != "SHA256" {
t.Errorf("expected: SHA256, found: %s", algorithm)
}
}
func Test_mapLicensesToStrings(t *testing.T) {
// nothing much to test here.
// just a dummy dry run.
licenses := []AnyLicenseInfo{
SpecialLicense{
value: NONE,
},
SpecialLicense{
value: NOASSERTION,
},
}
licenseStrings := mapLicensesToStrings(licenses)
expectedLicenseStrings := []string{"NONE", "NOASSERTION"}
if !reflect.DeepEqual(licenseStrings, expectedLicenseStrings) {
t.Errorf("expected: %+v\nfound %+v", expectedLicenseStrings, licenseStrings)
}
}
func TestConjunctiveLicenseSet_ToLicenseString(t *testing.T) {
var lic ConjunctiveLicenseSet
var output, expectedOutput string
// TestCase 1: no license in the set
lic = ConjunctiveLicenseSet{
members: nil,
}
output = lic.ToLicenseString()
expectedOutput = ""
if output != expectedOutput {
t.Errorf("expected: %s, found %s", output, expectedOutput)
}
// TestCase 2: single license in the set
lic = ConjunctiveLicenseSet{
members: []AnyLicenseInfo{
SpecialLicense{value: NOASSERTION},
},
}
output = lic.ToLicenseString()
expectedOutput = "NOASSERTION"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", output, expectedOutput)
}
// TestCase 3: more than one license in the set.
lic = ConjunctiveLicenseSet{
members: []AnyLicenseInfo{
SpecialLicense{value: NOASSERTION},
SpecialLicense{value: NONE},
},
}
output = lic.ToLicenseString()
expectedOutput = "NOASSERTION AND NONE"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", output, expectedOutput)
}
// TestCase 4: nested conjunctive license.
lic = ConjunctiveLicenseSet{
members: []AnyLicenseInfo{
SpecialLicense{value: NOASSERTION},
ConjunctiveLicenseSet{
members: []AnyLicenseInfo{
SpecialLicense{value: "LicenseRef-1"},
SpecialLicense{value: NONE},
},
},
},
}
output = lic.ToLicenseString()
expectedOutput = "NOASSERTION AND LicenseRef-1 AND NONE"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", output, expectedOutput)
}
}
func TestDisjunctiveLicenseSet_ToLicenseString(t *testing.T) {
var lic DisjunctiveLicenseSet
var output, expectedOutput string
// TestCase 1: no license in the set
lic = DisjunctiveLicenseSet{
members: nil,
}
output = lic.ToLicenseString()
expectedOutput = ""
if output != expectedOutput {
t.Errorf("expected: %s, found %s", output, expectedOutput)
}
// TestCase 2: single license in the set
lic = DisjunctiveLicenseSet{
members: []AnyLicenseInfo{
SpecialLicense{value: NOASSERTION},
},
}
output = lic.ToLicenseString()
expectedOutput = "NOASSERTION"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", output, expectedOutput)
}
// TestCase 3: more than one license in the set.
lic = DisjunctiveLicenseSet{
members: []AnyLicenseInfo{
SpecialLicense{value: NOASSERTION},
SpecialLicense{value: NONE},
},
}
output = lic.ToLicenseString()
expectedOutput = "NOASSERTION OR NONE"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", output, expectedOutput)
}
// TestCase 4: nested conjunctive license.
lic = DisjunctiveLicenseSet{
members: []AnyLicenseInfo{
SpecialLicense{value: NOASSERTION},
DisjunctiveLicenseSet{
members: []AnyLicenseInfo{
SpecialLicense{value: "LicenseRef-1"},
SpecialLicense{value: NONE},
},
},
},
}
output = lic.ToLicenseString()
expectedOutput = "NOASSERTION OR LicenseRef-1 OR NONE"
if output != expectedOutput {
t.Errorf("expected: %s, found %s", output, expectedOutput)
}
}
func TestExtractedLicensingInfo_ToLicenseString(t *testing.T) {
// nothing to test (just a dry run)
extractedLicense := ExtractedLicensingInfo{
SimpleLicensingInfo: SimpleLicensingInfo{
licenseID: "license",
},
extractedText: "extracted Text",
}
expectedOutput := "license"
output := extractedLicense.ToLicenseString()
if output != expectedOutput {
t.Errorf("expected: %s, found: %s", expectedOutput, output)
}
}
func TestOrLaterOperator_ToLicenseString(t *testing.T) {
// nothing to test (just a dry run)
orLater := OrLaterOperator{
member: SimpleLicensingInfo{
licenseID: "license",
},
}
expectedOutput := "license"
output := orLater.ToLicenseString()
if output != expectedOutput {
t.Errorf("expected: %s, found: %s", expectedOutput, output)
}
}
func TestLicense_ToLicenseString(t *testing.T) {
// nothing to test (just a dry run)
license := License{
SimpleLicensingInfo: SimpleLicensingInfo{
licenseID: "license",
},
}
expectedOutput := "license"
output := license.ToLicenseString()
if output != expectedOutput {
t.Errorf("expected: %s, found: %s", expectedOutput, output)
}
}
func TestListedLicense_ToLicenseString(t *testing.T) {
// nothing to test (just a dry run)
ll := ListedLicense{License{
SimpleLicensingInfo: SimpleLicensingInfo{
licenseID: "license",
},
},
}
expectedOutput := "license"
output := ll.ToLicenseString()
if output != expectedOutput {
t.Errorf("expected: %s, found: %s", expectedOutput, output)
}
}
func TestWithExceptionOperator_ToLicenseString(t *testing.T) {
// nothing to test (just a dry run)
withException := WithExceptionOperator{
member: SimpleLicensingInfo{
licenseID: "license",
},
licenseException: LicenseException{},
}
expectedOutput := "license"
output := withException.ToLicenseString()
if output != expectedOutput {
t.Errorf("expected: %s, found: %s", expectedOutput, output)
}
}
func TestSpecialLicense_ToLicenseString(t *testing.T) {
// nothing to test (just a dry run)
specialLicense := SpecialLicense{
value: "license",
}
expectedOutput := "license"
output := specialLicense.ToLicenseString()
if output != expectedOutput {
t.Errorf("expected: %s, found: %s", expectedOutput, output)
}
}
func TestSimpleLicensingInfo_ToLicenseString(t *testing.T) {
// nothing to test (just a dry run)
sli := SimpleLicensingInfo{
licenseID: "license",
}
expectedOutput := "license"
output := sli.ToLicenseString()
if output != expectedOutput {
t.Errorf("expected: %s, found: %s", expectedOutput, output)
}
}