From 8d6c4019c50a311a34c3b9dc2c8d6a976c23fe37 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Fri, 23 Jun 2023 16:42:21 +0200 Subject: [PATCH] [Gradle] Implement KotlinMultiplatformSourceSetConventionsTest ^KT-58676 Verification Pending --- ...KotlinMultiplatformSourceSetConventions.kt | 4 +- ...inMultiplatformSourceSetConventionsTest.kt | 95 +++++++++++++++++++ 2 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMultiplatformSourceSetConventionsTest.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformSourceSetConventions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformSourceSetConventions.kt index 0e89f608dc6..57fa2e61c0f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformSourceSetConventions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformSourceSetConventions.kt @@ -59,9 +59,7 @@ interface KotlinMultiplatformSourceSetConventions { fun NamedDomainObjectProvider.dependencies( handler: KotlinDependencyHandler.() -> Unit, - ) = configure { sourceSet -> - sourceSet.dependencies(handler) - } + ) = get().dependencies(handler) fun NamedDomainObjectProvider.languageSettings( configure: LanguageSettingsBuilder.() -> Unit, diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMultiplatformSourceSetConventionsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMultiplatformSourceSetConventionsTest.kt new file mode 100644 index 00000000000..b9e1d3337e7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMultiplatformSourceSetConventionsTest.kt @@ -0,0 +1,95 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +@file:Suppress("FunctionName") + +package org.jetbrains.kotlin.gradle.unitTests + +import org.gradle.kotlin.dsl.provideDelegate +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.configurationResult +import org.jetbrains.kotlin.gradle.plugin.sources.internal +import org.jetbrains.kotlin.gradle.util.assertContainsDependencies +import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP +import org.jetbrains.kotlin.gradle.util.runLifecycleAwareTest +import org.jetbrains.kotlin.tooling.core.extrasReadWriteProperty +import java.util.concurrent.atomic.AtomicBoolean +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse + +class KotlinMultiplatformSourceSetConventionsTest { + private var KotlinSourceSet.testMarker by extrasReadWriteProperty("testMarker") + + @Test + fun `test - invoke`() = buildProjectWithMPP().runLifecycleAwareTest { + + val mainConfigurationCalled = AtomicBoolean(false) + val testConfigurationCalled = AtomicBoolean(false) + + multiplatformExtension.apply { + jvm() + + sourceSets.jvmMain { + testMarker = "jvmMain" + assertFalse(mainConfigurationCalled.getAndSet(true)) + } + + sourceSets.jvmTest { + testMarker = "jvmTest" + assertFalse(testConfigurationCalled.getAndSet(true)) + } + + configurationResult.await() + assertEquals("jvmMain", sourceSets.jvmMain.get().testMarker) + assertEquals("jvmTest", sourceSets.jvmTest.get().testMarker) + } + } + + @Test + fun `test - languageSettings`() = buildProjectWithMPP().runLifecycleAwareTest { + multiplatformExtension.apply { + jvm() + + sourceSets.jvmMain.languageSettings { + this.optIn("jvmMain.optIn") + } + + sourceSets.jvmTest.languageSettings { + this.optIn("jvmTest.optIn") + } + + assertEquals(setOf("jvmMain.optIn"), sourceSets.jvmMain.get().languageSettings.optInAnnotationsInUse) + assertEquals(setOf("jvmTest.optIn"), sourceSets.jvmTest.get().languageSettings.optInAnnotationsInUse) + } + } + + @Test + fun `test - dependencies`() = buildProjectWithMPP().runLifecycleAwareTest { + multiplatformExtension.apply { + jvm() + + sourceSets.jvmMain.dependencies { + implementation("my:jvmMain:library") + } + + sourceSets.jvmTest.dependencies { + implementation("my:jvmTest:library") + } + + assertContainsDependencies( + sourceSets.jvmMain.get().implementationConfigurationName, + "my:jvmMain:library" + ) + + assertContainsDependencies( + sourceSets.jvmTest.get().implementationConfigurationName, + "my:jvmTest:library" + ) + } + } + +} \ No newline at end of file