From 5973951f718d5d0c224714f0d61be912d2185bf5 Mon Sep 17 00:00:00 2001 From: Evgenii Mazhukin Date: Mon, 20 Nov 2023 17:17:27 +0000 Subject: [PATCH] [IC] Smoke tests for KMP IC, part 1 Assert reasonable compile avoidance when basic changes are made in a multiplatform project ^Relates to KT-56963 Merge-request: KT-MR-13032 Merged-by: Evgenii Mazhukin --- .../kotlin/gradle/mpp/KmpIncrementalITBase.kt | 64 ++++++++++ .../smoke/BasicIncrementalCompilationIT.kt | 112 +++++++++++++++++ .../BasicTestIncrementalCompilationIT.kt | 115 ++++++++++++++++++ .../ExpectActualIncrementalCompilationIT.kt | 26 ++-- .../MultiModuleIncrementalCompilationIT.kt | 71 +++++++++++ .../app/build.gradle.kts | 28 +++++ .../app/src/commonMain/kotlin/CommonUtils.kt | 1 + .../app/src/commonMain/kotlin/ExpectDetail.kt | 3 + .../src/commonMain/kotlin/PlainPublicClass.kt | 3 + .../app/src/commonTest/kotlin/TrivialTest.kt | 10 ++ .../app/src/jsMain/kotlin/ActualDetail.kt | 3 + .../src/jsMain/kotlin/PlainPublicClassJs.kt | 3 + .../src/jsMain/kotlin/useLibJsPlatformUtil.kt | 1 + .../app/src/jvmMain/kotlin/ActualDetail.kt | 3 + .../src/jvmMain/kotlin/PlainPublicClassJvm.kt | 3 + .../jvmMain/kotlin/useLibJvmPlatformUtil.kt | 1 + .../app/src/nativeMain/kotlin/ActualDetail.kt | 3 + .../kotlin/PlainPublicClassNative.kt | 3 + .../kotlin/useLibNativePlatformUtil.kt | 1 + .../build.gradle.kts | 6 + .../lib/build.gradle.kts | 23 ++++ .../lib/src/commonMain/kotlin/CommonUtil.kt | 3 + .../src/commonMain/kotlin/ExpectCalcFun.kt | 1 + .../lib/src/commonMain/kotlin/Value.kt | 1 + .../lib/src/jsMain/kotlin/ActualCalcFun.kt | 3 + .../src/jsMain/kotlin/libJsPlatformUtil.kt | 1 + .../lib/src/jsTest/kotlin/AdvancedTest.kt | 15 +++ .../lib/src/jvmMain/kotlin/ActualCalcFun.kt | 3 + .../src/jvmMain/kotlin/libJvmPlatformUtil.kt | 1 + .../lib/src/jvmTest/kotlin/AdvancedTest.kt | 15 +++ .../src/nativeMain/kotlin/ActualCalcFun.kt | 3 + .../kotlin/libNativePlatformUtil.kt | 1 + .../lib/src/nativeTest/kotlin/AdvancedTest.kt | 15 +++ .../settings.gradle.kts | 2 + 34 files changed, 530 insertions(+), 17 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/KmpIncrementalITBase.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/BasicIncrementalCompilationIT.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/BasicTestIncrementalCompilationIT.kt rename libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/{ => smoke}/ExpectActualIncrementalCompilationIT.kt (84%) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/MultiModuleIncrementalCompilationIT.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/CommonUtils.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/ExpectDetail.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/PlainPublicClass.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonTest/kotlin/TrivialTest.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/ActualDetail.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/PlainPublicClassJs.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/useLibJsPlatformUtil.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/ActualDetail.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/PlainPublicClassJvm.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/useLibJvmPlatformUtil.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/ActualDetail.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/PlainPublicClassNative.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/useLibNativePlatformUtil.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/CommonUtil.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/ExpectCalcFun.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/Value.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsMain/kotlin/ActualCalcFun.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsMain/kotlin/libJsPlatformUtil.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsTest/kotlin/AdvancedTest.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmMain/kotlin/ActualCalcFun.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmMain/kotlin/libJvmPlatformUtil.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmTest/kotlin/AdvancedTest.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeMain/kotlin/ActualCalcFun.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeMain/kotlin/libNativePlatformUtil.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeTest/kotlin/AdvancedTest.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/settings.gradle.kts diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/KmpIncrementalITBase.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/KmpIncrementalITBase.kt new file mode 100644 index 00000000000..3839dbbb546 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/KmpIncrementalITBase.kt @@ -0,0 +1,64 @@ +/* + * 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. + */ + +package org.jetbrains.kotlin.gradle.mpp + +import org.gradle.api.logging.LogLevel +import org.gradle.testkit.runner.BuildResult +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.testbase.* +import org.jetbrains.kotlin.gradle.testbase.relativizeTo +import java.nio.file.Path +import kotlin.io.path.appendText + +abstract class KmpIncrementalITBase : KGPBaseTest() { + + override val defaultBuildOptions: BuildOptions + get() = super.defaultBuildOptions.copyEnsuringK2() + + protected open val gradleTask = "assemble" + protected open val projectName = "generic-kmp-app-plus-lib-with-tests" + protected open val mainCompileTasks = setOf( + ":app:compileKotlinJvm", + ":app:compileKotlinJs", + ":app:compileKotlinNative", + ":lib:compileKotlinJvm", + ":lib:compileKotlinJs", + ":lib:compileKotlinNative", + ) + + protected open fun withProject(gradleVersion: GradleVersion, test: TestProject.() -> Unit): Unit { + nativeProject( + projectName, + gradleVersion, + configureSubProjects = true, + test = test + ) + } + + protected open fun TestProject.touchAndGet(subproject: String, srcDir: String, name: String): Path { + val path = subProject(subproject).kotlinSourcesDir(srcDir).resolve(name) + path.appendText("private val nothingMuch = 24") + return path + } + + protected open fun BuildResult.assertSuccessOrUTD(allTasks: Set, executedTasks: Set) { + assertTasksExecuted(executedTasks) + assertTasksUpToDate(allTasks - executedTasks) + } + + protected open fun TestProject.testCase(incrementalPath: Path? = null, executedTasks: Set, assertions: BuildResult.() -> Unit = {}) { + build(gradleTask, buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) { + assertSuccessOrUTD( + allTasks = mainCompileTasks, + executedTasks = executedTasks + ) + incrementalPath?.let { + assertIncrementalCompilation(listOf(it).relativizeTo(projectPath)) + } + assertions() + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/BasicIncrementalCompilationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/BasicIncrementalCompilationIT.kt new file mode 100644 index 00000000000..3c36ad435ec --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/BasicIncrementalCompilationIT.kt @@ -0,0 +1,112 @@ +/* + * 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. + */ + +package org.jetbrains.kotlin.gradle.mpp.smoke + +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.mpp.KmpIncrementalITBase +import org.jetbrains.kotlin.gradle.testbase.* +import org.junit.jupiter.api.DisplayName + +@DisplayName("Basic incremental scenarios with KMP - K2") +@MppGradlePluginTests +open class BasicIncrementalCompilationIT : KmpIncrementalITBase() { + + @DisplayName("Base test case - local change, local recompilation") + @GradleTest + fun testStrictlyLocalChange(gradleVersion: GradleVersion): Unit = withProject(gradleVersion) { + build("assemble") + + /** + * Step 1: touch app:common, no abi change + */ + + testCase( + incrementalPath = touchAndGet("app", "commonMain", "PlainPublicClass.kt"), + executedTasks = setOf( + ":app:compileKotlinJvm", + ":app:compileKotlinJs", + ":app:compileKotlinNative" + ) + ) + + /** + * Step 2: touch app:jvm, no abi change + */ + + val appJvmClassKt = touchAndGet("app", "jvmMain", "PlainPublicClassJvm.kt") + testCase( + incrementalPath = null, //TODO: it just doesn't print "Incremental compilation completed", why? (KT-63476) + executedTasks = setOf(":app:compileKotlinJvm") + ) { + assertCompiledKotlinSources(listOf(appJvmClassKt).relativizeTo(projectPath), output) + } + + /** + * Step 3: touch app:js, no abi change + */ + + testCase( + incrementalPath = touchAndGet("app", "jsMain", "PlainPublicClassJs.kt"), + executedTasks = setOf(":app:compileKotlinJs"), + ) + + /** + * Step 4: touch app:native, no abi change + */ + + touchAndGet("app", "nativeMain", "PlainPublicClassNative.kt") + testCase( + incrementalPath = null, // no native incremental compilation - see KT-62824 + executedTasks = setOf(":app:compileKotlinNative"), + ) + + /** + * Step 5: touch lib:common, no abi change + */ + + testCase( + incrementalPath = touchAndGet("lib", "commonMain", "CommonUtil.kt"), + executedTasks = mainCompileTasks // TODO: KT-62642 - bad compile avoidance here + ) + + /** + * Step 6: touch lib:jvm, no abi change + */ + + val libJvmUtilKt = touchAndGet("lib", "jvmMain", "libJvmPlatformUtil.kt") + testCase( + incrementalPath = null, //TODO: it just doesn't print "Incremental compilation completed", why? (KT-63476) + executedTasks = setOf(":app:compileKotlinJvm", ":lib:compileKotlinJvm"), + ) { + assertCompiledKotlinSources(listOf(libJvmUtilKt).relativizeTo(projectPath), output) + } + + /** + * Step 7: touch lib:js, no abi change + */ + + testCase( + incrementalPath = touchAndGet("lib", "jsMain", "libJsPlatformUtil.kt"), + executedTasks = setOf(":app:compileKotlinJs", ":lib:compileKotlinJs"), + ) + + /** + * Step 8: touch lib:native, no abi change + */ + + touchAndGet("lib", "nativeMain", "libNativePlatformUtil.kt") + testCase( + incrementalPath = null, + executedTasks = setOf(":app:compileKotlinNative", ":lib:compileKotlinNative"), + ) + } +} + +@DisplayName("Basic incremental scenarios with Kotlin Multiplatform - K1") +class BasicIncrementalCompilationK1IT : BasicIncrementalCompilationIT() { + override val defaultBuildOptions: BuildOptions + get() = super.defaultBuildOptions.copyEnsuringK1() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/BasicTestIncrementalCompilationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/BasicTestIncrementalCompilationIT.kt new file mode 100644 index 00000000000..0f9a3ef3bed --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/BasicTestIncrementalCompilationIT.kt @@ -0,0 +1,115 @@ +/* + * 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. + */ + +package org.jetbrains.kotlin.gradle.mpp.smoke + +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.mpp.KmpIncrementalITBase +import org.jetbrains.kotlin.gradle.testbase.* +import org.junit.jupiter.api.DisplayName + +@DisplayName("Basic incremental scenarios with tests in KMP - K2") +@MppGradlePluginTests +open class BasicTestIncrementalCompilationIT : KmpIncrementalITBase() { + override val mainCompileTasks: Set + get() = setOf( + ":app:compileTestKotlinJvm", + ":lib:compileTestKotlinJvm", + + ":app:compileTestKotlinNative", + ":lib:compileTestKotlinNative", + + ":app:compileTestKotlinJs", + ":lib:compileTestKotlinJs", + + ":app:jsTest", + ":lib:jsTest", + + ":app:jvmTest", + ":lib:jvmTest", + + ":app:nativeTest", + ":lib:nativeTest", + ) + override val gradleTask: String + get() = "build" + + @DisplayName("KMP tests are rebuilt when affected") + @GradleTest + fun testAffectingTestDependencies(gradleVersion: GradleVersion): Unit = withProject(gradleVersion) { + build("build") + + /** + * Step 1 - touch lib/common, affect all tests in app and lib + */ + + testCase( + incrementalPath = touchAndGet("lib", "commonMain", "CommonUtil.kt"), + executedTasks = mainCompileTasks, + ) + + /** + * Step 2 - touch app/common, affect all tests in app + */ + + testCase( + incrementalPath = touchAndGet("app", "commonMain", "PlainPublicClass.kt"), + executedTasks = setOf( + ":app:compileTestKotlinJvm", + ":app:compileTestKotlinNative", + ":app:compileTestKotlinJs", + ":app:jsTest", + ":app:jvmTest", + ":app:nativeTest", + ), + ) + + /** + * Step 3 - touch app/jvm, affect jvm tests in app + */ + + val touchedAppJvm = touchAndGet("app", "jvmMain", "PlainPublicClassJvm.kt") + testCase( + incrementalPath = null, + executedTasks = setOf( + ":app:compileTestKotlinJvm", + ":app:jvmTest", + ), + ) { + assertCompiledKotlinSources(listOf(touchedAppJvm).relativizeTo(projectPath), output) //KT-63476 + } + + /** + * Step 4 - touch app/js, affect js tests in app + */ + + testCase( + incrementalPath = touchAndGet("app", "jsMain", "PlainPublicClassJs.kt"), + executedTasks = setOf( + ":app:compileTestKotlinJs", + ":app:jsTest", + ), + ) + + /** + * Step 5 - touch app/native, affect native tests in app + */ + + touchAndGet("app", "nativeMain", "PlainPublicClassNative.kt") + testCase( + incrementalPath = null, + executedTasks = setOf( + ":app:compileTestKotlinNative", + ":app:nativeTest", + ), + ) + } +} + +@DisplayName("Basic incremental scenarios with tests in KMP - K1") +class BasicTestIncrementalCompilationK1IT : BasicTestIncrementalCompilationIT() { + override val defaultBuildOptions: BuildOptions + get() = super.defaultBuildOptions.copyEnsuringK1() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/ExpectActualIncrementalCompilationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/ExpectActualIncrementalCompilationIT.kt similarity index 84% rename from libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/ExpectActualIncrementalCompilationIT.kt rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/ExpectActualIncrementalCompilationIT.kt index a9062becb68..723408e8c4f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/ExpectActualIncrementalCompilationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/ExpectActualIncrementalCompilationIT.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.gradle.mpp +package org.jetbrains.kotlin.gradle.mpp.smoke import org.gradle.api.logging.LogLevel import org.gradle.util.GradleVersion @@ -12,28 +12,20 @@ import org.jetbrains.kotlin.gradle.util.replaceFirst import org.junit.jupiter.api.DisplayName import kotlin.io.path.appendText +/** + * + * Touch file with expect fun, target IC adds actual to the build set + * Variants: expect class + * Touch file with actual fun, target IC adds expect to the build set + * Variants: expect class + * + */ @DisplayName("Incremental scenarios with expect/actual - K2") @MppGradlePluginTests open class ExpectActualIncrementalCompilationIT : KGPBaseTest() { override val defaultBuildOptions: BuildOptions get() = super.defaultBuildOptions.copyEnsuringK2() - @DisplayName("Base test case - local change, local recompilation") - @GradleTest - fun testStrictlyLocalChange(gradleVersion: GradleVersion) { - nativeProject("expect-actual-fun-or-class-ic", gradleVersion) { - build("assemble") - - val valueKtPath = kotlinSourcesDir("commonMain").resolve("Value.kt") - valueKtPath.appendText("val irrelevant = 2") - - build("assemble", buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) { - assertTasksExecuted(":compileKotlinJvm", ":compileKotlinJs", ":compileKotlinNative") - assertIncrementalCompilation(listOf(valueKtPath).relativizeTo(projectPath)) - } - } - } - @DisplayName("File with actual declaration needs recompiling") @GradleTest fun testRecompilationOfActualFun(gradleVersion: GradleVersion) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/MultiModuleIncrementalCompilationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/MultiModuleIncrementalCompilationIT.kt new file mode 100644 index 00000000000..bf6ae1622b7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/smoke/MultiModuleIncrementalCompilationIT.kt @@ -0,0 +1,71 @@ +/* + * 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. + */ + +package org.jetbrains.kotlin.gradle.mpp.smoke + +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.testbase.BuildOptions +import org.jetbrains.kotlin.gradle.testbase.GradleTest +import org.jetbrains.kotlin.gradle.testbase.KGPBaseTest +import org.jetbrains.kotlin.gradle.testbase.MppGradlePluginTests +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.DisplayName + +@Disabled("KT-56963") +@DisplayName("Basic multi-module incremental scenarios with KMP - K2") +@MppGradlePluginTests +open class MultiModuleIncrementalCompilationIT : KGPBaseTest() { + override val defaultBuildOptions: BuildOptions + get() = super.defaultBuildOptions.copyEnsuringK2() + + @DisplayName("Verify IC builds on change in lib/commonMain") + @GradleTest + fun testTouchLibCommon(gradleVersion: GradleVersion) { + /** + * [Cross-Module] touch libCommon, affect appCommon, appJs + * Variants: 1. code-compatible ABI breakage (change deduced return type), 2. no ABI breakage, 3. error + fix + */ + + } + + @DisplayName("Verify IC builds on change in lib/platformMain") + @GradleTest + fun testTouchLibPlatform(gradleVersion: GradleVersion) { + /** + * [C-M] touch lbJs, affect appJs + * Variants: 1. code-compatible ABI breakage (change deduced return type), 2. no ABI breakage, 3. error + fix + */ + + } + + @DisplayName("Verify IC builds on change in app/commonMain") + @GradleTest + fun testTouchAppCommon(gradleVersion: GradleVersion) { + /** + * [C-M] touch appCommon, rebuild appJs + * Variants: 1. code-compatible ABI breakage (change deduced return type), 2. no ABI breakage, 3. error + fix + */ + + //TODO KT-56963 : confirm and create issues for these source-compatible changes + //utilKtPath.replaceFirst("fun multiplyByTwo(n: Int): Int", "fun multiplyByTwo(n: T): T") - breaks native + //utilKtPath.replaceFirst("fun multiplyByTwo(n: Int): Int", "fun multiplyByTwo(n: Int, unused: Int = 42): Int") - breaks js + } + + @DisplayName("Verify IC builds on change in app/platformMain") + @GradleTest + fun testTouchAppPlatform(gradleVersion: GradleVersion) { + /** + * [C-M] touch appJs, rebuild appJs + * Variants: 1. code-compatible ABI breakage (change deduced return type), 2. no ABI breakage, 3. error + fix + */ + + } +} + +@DisplayName("Incremental scenarios with expect/actual - K1") +class MultiModuleIncrementalCompilationK1IT : MultiModuleIncrementalCompilationIT() { + override val defaultBuildOptions: BuildOptions + get() = super.defaultBuildOptions.copyEnsuringK1() +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/build.gradle.kts new file mode 100644 index 00000000000..daefdcf0c9a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + kotlin("multiplatform") +} + +kotlin { + jvm() + js() + ("native") +} + +kotlin { + js { + nodejs() + } + + sourceSets { + val commonMain by getting { + dependencies { + implementation(project(":lib")) + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/CommonUtils.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/CommonUtils.kt new file mode 100644 index 00000000000..36fdc23139d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/CommonUtils.kt @@ -0,0 +1 @@ +fun sayYes() = "Yes" diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/ExpectDetail.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/ExpectDetail.kt new file mode 100644 index 00000000000..5809fa0d724 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/ExpectDetail.kt @@ -0,0 +1,3 @@ +expect class Detail { + val key: String +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/PlainPublicClass.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/PlainPublicClass.kt new file mode 100644 index 00000000000..9df0e1e8db6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonMain/kotlin/PlainPublicClass.kt @@ -0,0 +1,3 @@ +class PlainPublicClass { + fun bar() = 234 +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonTest/kotlin/TrivialTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonTest/kotlin/TrivialTest.kt new file mode 100644 index 00000000000..f4d413ea0ed --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/commonTest/kotlin/TrivialTest.kt @@ -0,0 +1,10 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class TrivialTest { + + @Test + fun sayYesSaysYes() { + assertEquals("Yes", sayYes()) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/ActualDetail.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/ActualDetail.kt new file mode 100644 index 00000000000..9586e6114c0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/ActualDetail.kt @@ -0,0 +1,3 @@ +actual class Detail { + actual val key: String = "42" +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/PlainPublicClassJs.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/PlainPublicClassJs.kt new file mode 100644 index 00000000000..121fc14341b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/PlainPublicClassJs.kt @@ -0,0 +1,3 @@ +class PlainPublicClassJs { + fun foo() = 234 +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/useLibJsPlatformUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/useLibJsPlatformUtil.kt new file mode 100644 index 00000000000..987812ba493 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jsMain/kotlin/useLibJsPlatformUtil.kt @@ -0,0 +1 @@ +fun useLibJsPlatformUtil() = libJsPlatformUtil() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/ActualDetail.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/ActualDetail.kt new file mode 100644 index 00000000000..9f817ee162b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/ActualDetail.kt @@ -0,0 +1,3 @@ +actual class Detail { + actual val key: String = "422" +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/PlainPublicClassJvm.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/PlainPublicClassJvm.kt new file mode 100644 index 00000000000..3f7446f8702 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/PlainPublicClassJvm.kt @@ -0,0 +1,3 @@ +class PlainPublicClassJvm { + fun doBar() = 2 +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/useLibJvmPlatformUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/useLibJvmPlatformUtil.kt new file mode 100644 index 00000000000..0d3a313c8eb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/jvmMain/kotlin/useLibJvmPlatformUtil.kt @@ -0,0 +1 @@ +fun useLibJvmPlatformUtil() = libJvmPlatformUtil() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/ActualDetail.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/ActualDetail.kt new file mode 100644 index 00000000000..65dff1401b0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/ActualDetail.kt @@ -0,0 +1,3 @@ +actual class Detail { + actual val key: String = "definitely not ios" +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/PlainPublicClassNative.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/PlainPublicClassNative.kt new file mode 100644 index 00000000000..8c1e686f210 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/PlainPublicClassNative.kt @@ -0,0 +1,3 @@ +class PlainPublicClassNative { + fun queueSomething() = Unit +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/useLibNativePlatformUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/useLibNativePlatformUtil.kt new file mode 100644 index 00000000000..7cdf211e8f5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/app/src/nativeMain/kotlin/useLibNativePlatformUtil.kt @@ -0,0 +1 @@ +fun useLibNativePlatformUtil() = libNativePlatformUtil() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/build.gradle.kts new file mode 100644 index 00000000000..5948671485a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/build.gradle.kts @@ -0,0 +1,6 @@ +allprojects { + repositories { + mavenLocal() + mavenCentral() + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/build.gradle.kts new file mode 100644 index 00000000000..0dcf1d95705 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + kotlin("multiplatform") +} + +kotlin { + jvm() + js() + ("native") +} + +kotlin { + js { + nodejs() + } + + sourceSets { + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/CommonUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/CommonUtil.kt new file mode 100644 index 00000000000..852680038f4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/CommonUtil.kt @@ -0,0 +1,3 @@ +fun multiplyByTwo(n: Int): Int { + return n * 2 +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/ExpectCalcFun.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/ExpectCalcFun.kt new file mode 100644 index 00000000000..af6ffb2e11e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/ExpectCalcFun.kt @@ -0,0 +1 @@ +expect fun calc(expression: String): Double \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/Value.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/Value.kt new file mode 100644 index 00000000000..8ddbd759468 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/commonMain/kotlin/Value.kt @@ -0,0 +1 @@ +private val bar = 12 diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsMain/kotlin/ActualCalcFun.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsMain/kotlin/ActualCalcFun.kt new file mode 100644 index 00000000000..9d2d2cc97cb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsMain/kotlin/ActualCalcFun.kt @@ -0,0 +1,3 @@ +actual fun calc(expression: String): Double { + return Double.NaN +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsMain/kotlin/libJsPlatformUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsMain/kotlin/libJsPlatformUtil.kt new file mode 100644 index 00000000000..e9521970494 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsMain/kotlin/libJsPlatformUtil.kt @@ -0,0 +1 @@ +fun libJsPlatformUtil(): Int = 0 diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsTest/kotlin/AdvancedTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsTest/kotlin/AdvancedTest.kt new file mode 100644 index 00000000000..0ceb2045350 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jsTest/kotlin/AdvancedTest.kt @@ -0,0 +1,15 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class AdvancedTest { + + @Test + fun jsUtilReturns0() { + assertEquals(0, libJsPlatformUtil()) + } + + @Test + fun commonUtilTest() { + assertEquals(2, multiplyByTwo(1)) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmMain/kotlin/ActualCalcFun.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmMain/kotlin/ActualCalcFun.kt new file mode 100644 index 00000000000..041660fa463 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmMain/kotlin/ActualCalcFun.kt @@ -0,0 +1,3 @@ +actual fun calc(expression: String): Double { + return expression.toDoubleOrNull()?.let { it * 2 } ?: 0.0 +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmMain/kotlin/libJvmPlatformUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmMain/kotlin/libJvmPlatformUtil.kt new file mode 100644 index 00000000000..d4b45bba526 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmMain/kotlin/libJvmPlatformUtil.kt @@ -0,0 +1 @@ +fun libJvmPlatformUtil(): Int = 400 diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmTest/kotlin/AdvancedTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmTest/kotlin/AdvancedTest.kt new file mode 100644 index 00000000000..91f552a8a0e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/jvmTest/kotlin/AdvancedTest.kt @@ -0,0 +1,15 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class AdvancedTest { + + @Test + fun jvmUtilReturns400() { + assertEquals(400, libJvmPlatformUtil()) + } + + @Test + fun commonUtilTest() { + assertEquals(2, multiplyByTwo(1)) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeMain/kotlin/ActualCalcFun.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeMain/kotlin/ActualCalcFun.kt new file mode 100644 index 00000000000..213f7f74e99 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeMain/kotlin/ActualCalcFun.kt @@ -0,0 +1,3 @@ +actual fun calc(expression: String): Double { + return 15.0 +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeMain/kotlin/libNativePlatformUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeMain/kotlin/libNativePlatformUtil.kt new file mode 100644 index 00000000000..b582707f9a6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeMain/kotlin/libNativePlatformUtil.kt @@ -0,0 +1 @@ +fun libNativePlatformUtil(): Int = 800 diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeTest/kotlin/AdvancedTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeTest/kotlin/AdvancedTest.kt new file mode 100644 index 00000000000..613b98739a6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/lib/src/nativeTest/kotlin/AdvancedTest.kt @@ -0,0 +1,15 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class AdvancedTest { + + @Test + fun nativeUtilReturns800() { + assertEquals(800, libNativePlatformUtil()) + } + + @Test + fun commonUtilTest() { + assertEquals(2, multiplyByTwo(1)) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/settings.gradle.kts new file mode 100644 index 00000000000..0977c0a6a50 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/generic-kmp-app-plus-lib-with-tests/settings.gradle.kts @@ -0,0 +1,2 @@ +include(":app") +include(":lib")