From a28884b1c321112916ea3222eb1511956822fa66 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Wed, 26 Jan 2022 12:12:02 +0300 Subject: [PATCH] [Gradle] Propagate offline mode to Native cinterop ^KT-49247 --- .../kotlin/gradle/native/GeneralNativeIT.kt | 45 +++++++++++++++++++ .../compilerRunner/nativeToolRunners.kt | 7 +++ 2 files changed, 52 insertions(+) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt index 5804f5ba6db..5eb1060bdaa 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt @@ -1158,6 +1158,51 @@ class GeneralNativeIT : BaseGradleIT() { } } + @Test + fun `check offline mode is propagated to the cinterop`() = with(transformNativeTestProjectWithPluginDsl("native-cinterop")) { + val buildOptions = defaultBuildOptions() + val cinteropTask = ":projectLibrary:cinteropAnotherNumberHost" + + build(cinteropTask, options = buildOptions) { + assertSuccessful() + } + + // Check that --offline works when all the dependencies are already downloaded: + val buildOptionsOffline = buildOptions.copy(freeCommandLineArgs = buildOptions.freeCommandLineArgs + "--offline") + + build("clean", cinteropTask, options = buildOptionsOffline) { + assertSuccessful() + withNativeCommandLineArguments(cinteropTask, toolName = "cinterop") { + assertTrue(it.containsSequentially("-Xoverride-konan-properties", "airplaneMode=true")) + } + } + + // Check that --offline fails when there are no downloaded dependencies: + val customKonanDataDir = tempDir.newFolder("konanOffline") + val buildOptionsOfflineWithCustomKonanDataDir = buildOptionsOffline.copy( + customEnvironmentVariables = buildOptionsOffline.customEnvironmentVariables + + ("KONAN_DATA_DIR" to customKonanDataDir.absolutePath) + ) + + build("clean", cinteropTask, options = buildOptionsOfflineWithCustomKonanDataDir) { + assertFailed() + } + + checkNoDependenciesDownloaded(customKonanDataDir) + + // Check that the compiler is not extracted if it is not cached: + assertTrue(customKonanDataDir.deleteRecursively()) + build( + "clean", cinteropTask, "-Pkotlin.native.version=1.6.20-M1-9999", + options = buildOptionsOfflineWithCustomKonanDataDir + ) { + assertFailed() + assertTasksNotExecuted(listOf(cinteropTask)) + } + + assertFalse(customKonanDataDir.exists()) + } + companion object { fun List.containsSequentially(vararg elements: String): Boolean { check(elements.isNotEmpty()) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt index 87ef98d9a87..7aef2477c0c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt @@ -146,6 +146,13 @@ internal class KotlinNativeCInteropRunner private constructor(project: Project) fun runWithContext(action: () -> Unit) } + override val defaultArguments: List + get() = mutableListOf().apply { + if (project.gradle.startParameter.isOffline) { + addAll(listOf("-Xoverride-konan-properties", "airplaneMode=true")) + } + } + companion object { fun ExecutionContext.run(args: List) { val runner = KotlinNativeCInteropRunner(project)