diff --git a/utils/spdx/src/test/kotlin/SpdxExpressionTest.kt b/utils/spdx/src/test/kotlin/SpdxExpressionTest.kt index 4d9ebd53a4a85..c164af78cd597 100644 --- a/utils/spdx/src/test/kotlin/SpdxExpressionTest.kt +++ b/utils/spdx/src/test/kotlin/SpdxExpressionTest.kt @@ -643,6 +643,18 @@ class SpdxExpressionTest : WordSpec({ result shouldBe "a AND (c OR d) AND a".toSpdx() } + + "given expressions should match semantically equivalent license expressions" { + val expression = "a OR b".toSpdx() + + val choices = listOf( + SpdxLicenseChoice("b OR a".toSpdx(), "a".toSpdx()) + ) + + val result = expression.applyChoices(choices) + + result shouldBe "a".toSpdx() + } } "equals()" should { diff --git a/utils/spdx/src/test/kotlin/SpdxLicenseChoiceTest.kt b/utils/spdx/src/test/kotlin/SpdxLicenseChoiceTest.kt new file mode 100644 index 0000000000000..f6720bd9e367f --- /dev/null +++ b/utils/spdx/src/test/kotlin/SpdxLicenseChoiceTest.kt @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2024 The ORT Project Authors (see ) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * License-Filename: LICENSE + */ + +package org.ossreviewtoolkit.utils.spdx + +import io.kotest.assertions.assertSoftly +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.core.spec.style.WordSpec +import io.kotest.matchers.Matcher +import io.kotest.matchers.be +import io.kotest.matchers.collections.containExactly +import io.kotest.matchers.collections.containExactlyInAnyOrder +import io.kotest.matchers.neverNullMatcher +import io.kotest.matchers.should +import io.kotest.matchers.shouldBe +import io.kotest.matchers.shouldNotBe + +import org.ossreviewtoolkit.model.fromYaml +import org.ossreviewtoolkit.model.toYaml +import org.ossreviewtoolkit.utils.spdx.SpdxExpression.Strictness +import org.ossreviewtoolkit.utils.spdx.SpdxLicense.* +import org.ossreviewtoolkit.utils.spdx.SpdxLicenseException.* + +class SpdxLicenseChoiceTest : WordSpec({ + "A given expression" should { + "be matched semantically" { + val MIT = "MIT".toSpdx() + + SpdxLicenseChoice( + given = "GPL-3.0-only OR MIT".toSpdx(), + choice = MIT + ) + + SpdxLicenseChoice( + given = "GPL-3.0-only OR MIT".toSpdx(), + choice = MIT + ) + } + } +})