// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later package parser2v3 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_3_getChecksumFromNode(t *testing.T) { var parser *rdfParser2_3 var err error // TestCase 1: invalid checksum algorithm parser, _ = parserFromBodyContent(` 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 `) 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(` 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 `) 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(` 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 `) 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_3_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) } }