Test binaries DSL without a testData fixture
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JvmBinariesDslIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JvmBinariesDslIT.kt
index 2195481..86f5fcd 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JvmBinariesDslIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JvmBinariesDslIT.kt
@@ -11,6 +11,7 @@
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.testbase.*
+import org.jetbrains.kotlin.gradle.uklibs.applyMultiplatform
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.condition.OS
import java.io.File
@@ -147,6 +148,65 @@
}
}
+ @DisplayName("Custom test binary distribution is runnable without testData")
+ @GradleTest
+ fun customTestBinaryDistributionIsRunnable_withoutTestData(gradleVersion: GradleVersion) {
+ val output = File.createTempFile("test-output", ".txt")
+ val testSourceName = "JvmTest"
+ val project = project("empty", gradleVersion) {
+ addKgpToBuildScriptCompilationClasspath()
+ buildScriptInjection {
+ project.applyMultiplatform {
+ jvm {
+ binaries {
+ executable(KotlinCompilation.TEST_COMPILATION_NAME) {
+ mainClass.set("${testSourceName}Kt")
+ }
+ }
+ }
+ sourceSets.commonMain.configure {
+ it.compileSource(
+ """
+ fun commonMain() = java.io.FileWriter("${output.path}", true).use {
+ it.write("commonMain ")
+ }
+ """.trimIndent()
+ )
+ }
+ sourceSets.jvmMain.configure {
+ it.compileSource(
+ """
+ fun jvmMain() = java.io.FileWriter("${output.path}", true).use {
+ it.write("jvmMain")
+ }
+ """.trimIndent()
+ )
+ }
+ sourceSets.jvmTest.configure {
+ it.compileSource(
+ """
+ fun main() {
+ commonMain()
+ jvmMain()
+ }
+ """.trimIndent(),
+ testSourceName,
+ )
+ }
+ }
+ }
+ }
+
+ project.build(":installJvmTestDist")
+ assertScriptExecutionIsSuccessful(
+ project.projectPath.resolve("build/install/empty-jvmTest/bin/empty")
+ )
+ assertEquals(
+ "commonMain jvmMain",
+ output.readText(),
+ )
+ }
+
@DisplayName("Custom test binary distribution is runnable")
@GradleTest
fun customTestBinaryDistributionIsRunnable(gradleVersion: GradleVersion) {
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testGenerateSourceSets.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testGenerateSourceSets.kt
index d75df57..c3dce29 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testGenerateSourceSets.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testGenerateSourceSets.kt
@@ -18,14 +18,16 @@
fun KotlinSourceSet.compileSource(
@Language("kotlin")
sourceContent: String,
+ sourceName: String? = null,
) {
val identifier = "${name}_${project.generateIdentifier()}"
val identifierPath = project.layout.buildDirectory.dir("generatedSourceDir_${identifier}")
+ val generatedSourceName = (sourceName ?: "generatedSource_${identifier}") + ".kt"
kotlin.srcDir(
project.tasks.create("generateSourceIn_${identifier}") { task ->
task.outputs.dir(identifierPath)
task.doLast {
- identifierPath.get().asFile.resolve("generatedSource_${identifier}.kt").writeText(sourceContent)
+ identifierPath.get().asFile.resolve(generatedSourceName).writeText(sourceContent)
}
}
)