From 0b31d70ce904572d3fe600a69828d70fa8439202 Mon Sep 17 00:00:00 2001 From: Dmitrii Krasnov Date: Fri, 8 Dec 2023 14:56:49 +0100 Subject: [PATCH] [Gradle IT] Added Integration Test for checking native ic args #KT-63742 --- .../native/NativeIncrementalCompilationIT.kt | 57 +++++++++++++++++++ .../kotlin/gradle/testbase/testDsl.kt | 6 +- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt index de71c610940..324211b9d70 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt @@ -30,6 +30,63 @@ class NativeIncrementalCompilationIT : KGPBaseTest() { ) ) + @DisplayName("KT-63742: Check that kotlinNativeLink task passes all required args for cache orchestration and ic") + @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_4) // DefaultResolvedComponentResult is supported after 7.4 only + @GradleTest + fun checkArgumentsForIncrementalCache(gradleVersion: GradleVersion) { + nativeProject("native-incremental-simple", gradleVersion) { + + val compilerCacheOrchestrationArgs = arrayOf( + "-Xauto-cache-from=${getGradleUserHome()}", + "-Xbackend-threads=4" + ) + + val incrementalCacheArgs = arrayOf( + "-Xenable-incremental-compilation", + "-Xic-cache-dir=${projectPath.resolve("build").resolve("kotlin-native-ic-cache").toFile().canonicalPath}" + ) + + // disabled incremental cache parameter + val withoutIncrementalCacheBuildOptions = defaultBuildOptions.copy( + nativeOptions = defaultBuildOptions.nativeOptions.copy( + incremental = false + ) + ) + build("linkDebugExecutableHost", buildOptions = withoutIncrementalCacheBuildOptions) { + extractNativeTasksCommandLineArgumentsFromOutput(":linkDebugExecutableHost") { + assertCommandLineArgumentsContain(*compilerCacheOrchestrationArgs) + assertCommandLineArgumentsDoNotContain(*incrementalCacheArgs) + } + } + + + // enabled incremental cache parameter + val withIncrementalCacheBuildOptions = defaultBuildOptions.copy( + nativeOptions = defaultBuildOptions.nativeOptions.copy( + incremental = true + ) + ) + build("clean", "linkDebugExecutableHost", buildOptions = withIncrementalCacheBuildOptions) { + extractNativeTasksCommandLineArgumentsFromOutput(":linkDebugExecutableHost") { + assertCommandLineArgumentsContain(*(compilerCacheOrchestrationArgs + incrementalCacheArgs)) + } + } + + // enabled incremental cache and configuration cache parameters + val withIncrementalCacheAndConfigurationCacheBuildOptions = defaultBuildOptions.copy( + configurationCache = true, + nativeOptions = defaultBuildOptions.nativeOptions.copy( + incremental = true + ) + ) + build("clean", "linkDebugExecutableHost", buildOptions = withIncrementalCacheAndConfigurationCacheBuildOptions) { + extractNativeTasksCommandLineArgumentsFromOutput(":linkDebugExecutableHost") { + assertCommandLineArgumentsContain(*(compilerCacheOrchestrationArgs + incrementalCacheArgs)) + } + } + } + } + @DisplayName("Smoke test") @GradleTest fun checkIncrementalCacheIsCreated(gradleVersion: GradleVersion) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt index dc218a0ffb6..abf7f485408 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt @@ -222,6 +222,10 @@ fun TestProject.buildAndFail( } +fun getGradleUserHome(): File { + return testKitDir.toAbsolutePath().toFile().canonicalFile +} + private fun BuildResult.additionalAssertions(buildOptions: BuildOptions) { if (buildOptions.warningMode != WarningMode.Fail) { assertDeprecationWarningsArePresent(buildOptions.warningMode) @@ -251,7 +255,7 @@ internal inline fun TestProject.getModels( val connector = GradleConnector .newConnector() - .useGradleUserHomeDir(testKitDir.toAbsolutePath().toFile()) + .useGradleUserHomeDir(getGradleUserHome()) .useGradleVersion(gradleVersion.version) .forProjectDirectory(projectPath.toAbsolutePath().toFile())