From a1d6ebd8ea1623c014f890f8c89c8c4fee1f9eef Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Wed, 22 Jun 2022 13:36:21 +0200 Subject: [PATCH] [Gradle] Support Gradle Configuration Cache with KotlinNativeTest --- .../kotlin/gradle/ConfigurationCacheIT.kt | 15 +++++++++++---- .../lib/build.gradle.kts | 8 ++++++++ .../lib/src/commonTest/kotlin/CommonTest.kt | 10 ++++++++++ .../targets/native/tasks/KotlinNativeTest.kt | 16 ++++++++++------ 4 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-configuration-cache/lib/src/commonTest/kotlin/CommonTest.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt index 5ccfc06d9c7..f27ae996b69 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle +import org.gradle.api.logging.configuration.WarningMode import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.plugin.mpp.GenerateProjectStructureMetadata import org.jetbrains.kotlin.gradle.plugin.mpp.TransformKotlinGranularMetadata @@ -82,20 +83,22 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() { @GradleTest fun testNativeTasks(gradleVersion: GradleVersion) { project("native-configuration-cache", gradleVersion) { - //testConfigurationCacheOf("assemble", checkUpToDateOnRebuild = false) + // testConfigurationCacheOf("build", checkUpToDateOnRebuild = false) + val buildOptions = buildOptions.copy( configurationCache = true, - configurationCacheProblems = BaseGradleIT.ConfigurationCacheProblems.FAIL + configurationCacheProblems = BaseGradleIT.ConfigurationCacheProblems.FAIL, + warningMode = WarningMode.All ) // These tasks currently don't support Configuration Cache and marked as [Task::notCompatibleWithConfigurationCache] val configCacheIncompatibleTaskTypes = listOf( GenerateProjectStructureMetadata::class, - @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") + @Suppress("INVISIBLE_REFERENCE") org.jetbrains.kotlin.gradle.targets.native.internal.CInteropMetadataDependencyTransformationTask::class, TransformKotlinGranularMetadata::class ).map { it.java.name.replace(".", "\\.") } - build("assemble", buildOptions = buildOptions) { + build("build", buildOptions = buildOptions) { // Reduce the problem numbers when a Task become compatible with GCC. // When all tasks support GCC, replace these assertions with `testConfigurationCacheOf` assertOutputContains("17 problems were found storing the configuration cache, 6 of which seem unique.") @@ -105,6 +108,10 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() { .toRegex() ) } + + // TODO: Enable `warningMode = Fail` back and remove these asserts when KGP supports Gradle 8.0 + assertOutputContains("The TestReport.destinationDir property has been deprecated.") + assertOutputContains("The TestReport.reportOn(Object...) method has been deprecated.") } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-configuration-cache/lib/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-configuration-cache/lib/build.gradle.kts index 1974e34a94e..82d6defcd2f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-configuration-cache/lib/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-configuration-cache/lib/build.gradle.kts @@ -31,6 +31,14 @@ kotlin { } } } + + sourceSets { + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } } kotlinArtifacts { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-configuration-cache/lib/src/commonTest/kotlin/CommonTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-configuration-cache/lib/src/commonTest/kotlin/CommonTest.kt new file mode 100644 index 00000000000..f04a599c9df --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-configuration-cache/lib/src/commonTest/kotlin/CommonTest.kt @@ -0,0 +1,10 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class CommonTest { + + @Test + fun sampleTest() { + assertEquals("bar42", foo()) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTest.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTest.kt index 51cc49e67b6..3da4b83e454 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTest.kt @@ -74,6 +74,14 @@ abstract class KotlinNativeTest : KotlinTest() { private val trackedEnvironmentVariablesKeys = mutableSetOf() + private val hasTCProjectProperty = if (isConfigurationCacheAvailable(project.gradle)) { + project.providers.gradleProperty(TC_PROJECT_PROPERTY).forUseAtConfigurationTime().isPresent + } else { + project.hasProperty(TC_PROJECT_PROPERTY) + } + + private val konanVersion = project.konanVersion + @Suppress("unused") @get:Input val trackedEnvironment @@ -136,18 +144,14 @@ abstract class KotlinNativeTest : KotlinTest() { prependSuiteName = targetName != null, treatFailedTestOutputAsStacktrace = false, stackTraceParser = ::parseKotlinNativeStackTraceAsJvm, - escapeTCMessagesInLog = if (isConfigurationCacheAvailable(project.gradle)) { - project.providers.gradleProperty(TC_PROJECT_PROPERTY).forUseAtConfigurationTime().isPresent - } else { - project.hasProperty(TC_PROJECT_PROPERTY) - } + escapeTCMessagesInLog = hasTCProjectProperty ) // The KotlinTest expects that the exit code is zero even if some tests failed. // In this case it can check exit code and distinguish test failures from crashes. // But K/N allows forcing a zero exit code only since 1.3 (which was included in Kotlin 1.3.40). // Thus we check the exit code only for newer versions. - val checkExitCode = project.konanVersion.isAtLeast(1, 3, 0) + val checkExitCode = konanVersion.isAtLeast(1, 3, 0) val cliArgs = testCommand.cliArgs("TEAMCITY", checkExitCode, includePatterns, excludePatterns, args)