From 52c6713fffe55f33a35925dd763c3171fec4e89d Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Thu, 23 Sep 2021 12:12:01 +0200 Subject: [PATCH] [Gradle] Implement CInteropIdeaSyncIT to cover ^KT-48882 --- .../gradle/native/CInteropIdeaSyncIT.kt | 66 +++++++++++++++++++ .../cinterop-failing/build.gradle.kts | 25 +++++++ .../cinterop-failing/gradle.properties | 3 + .../cinterop-failing/settings.gradle.kts | 10 +++ .../nativeInterop/cinterop/sampleInterop.def | 0 .../nativeInterop/cinterop/sampleInterop.h | 2 + .../cinterop/sampleInteropNoise.h | 1 + .../src/nativeMain/kotlin/NativeMain.kt | 7 ++ 8 files changed, 114 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CInteropIdeaSyncIT.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/settings.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInterop.def create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInterop.h create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInteropNoise.h create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeMain/kotlin/NativeMain.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CInteropIdeaSyncIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CInteropIdeaSyncIT.kt new file mode 100644 index 00000000000..625c37fda33 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CInteropIdeaSyncIT.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2010-2021 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.native + +import org.jetbrains.kotlin.gradle.BaseGradleIT +import kotlin.test.Test + +class CInteropIdeaSyncIT : BaseGradleIT() { + + private val ideaSyncBuildOptions = defaultBuildOptions().copy( + freeCommandLineArgs = listOf("-Didea.sync.active=true") + ) + + @Test + fun `test failing cinterop warning`() { + val ideaSyncWarningMessage = "Warning: Failed to generate cinterop for :cinteropSampleInteropNative" + val interopTaskName = ":cinteropSampleInteropNative" + + with(Project("cinterop-failing")) { + /* Task still fails on 'normal' builds */ + build("commonize") { + assertTasksFailed(interopTaskName) + } + + /* Task failure is just a warning during import */ + build("commonize", options = ideaSyncBuildOptions) { + assertSuccessful() + assertTasksExecuted(interopTaskName) + assertContains(ideaSyncWarningMessage) + } + + /* Task is not considered up-to-date after lenient failure */ + build("commonize", options = ideaSyncBuildOptions) { + assertSuccessful() + assertTasksExecuted(interopTaskName) + assertContains(ideaSyncWarningMessage) + } + + /* Remove noise that causes failure */ + projectDir.resolve("src/nativeInterop/cinterop/sampleInteropNoise.h").writeText("") + + build("commonize", options = ideaSyncBuildOptions) { + assertSuccessful() + assertTasksExecuted(interopTaskName) + assertNotContains(ideaSyncWarningMessage) + } + + /* Task is considered up-to-date after first successful run */ + build("commonize", options = ideaSyncBuildOptions) { + assertSuccessful() + assertTasksUpToDate(interopTaskName) + assertNotContains(ideaSyncWarningMessage) + } + + /* Task is still considered up-to-date after successful run in idea sync */ + build("commonize") { + assertSuccessful() + assertTasksUpToDate(interopTaskName) + assertNotContains(ideaSyncWarningMessage) + } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/build.gradle.kts new file mode 100644 index 00000000000..0716543cbb9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/build.gradle.kts @@ -0,0 +1,25 @@ +import org.jetbrains.kotlin.konan.target.HostManager + +plugins { + kotlin("multiplatform") +} + +repositories { + mavenCentral() + mavenLocal() +} + + +kotlin { + val nativeTarget = when { + HostManager.hostIsMac -> macosX64("native") + HostManager.hostIsMingw -> mingwX64("native") + HostManager.hostIsLinux -> linuxX64("native") + else -> error("Unexpected host: ${HostManager.host}") + } + + nativeTarget.compilations["main"].cinterops.create("sampleInterop") { + header(file("src/nativeInterop/cinterop/sampleInterop.h")) + header(file("src/nativeInterop/cinterop/sampleInteropNoise.h")) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/gradle.properties new file mode 100644 index 00000000000..0dc17385bc4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/gradle.properties @@ -0,0 +1,3 @@ +kotlin.mpp.enableGranularSourceSetsMetadata=true +kotlin.mpp.enableCInteropCommonization=true +kotlin.native.enableDependencyPropagation=false diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/settings.gradle.kts new file mode 100644 index 00000000000..ecdece6ecfe --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/settings.gradle.kts @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + } + val kotlin_version: String by settings + plugins { + kotlin("multiplatform").version(kotlin_version) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInterop.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInterop.def new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInterop.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInterop.h new file mode 100644 index 00000000000..bd8e07948b9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInterop.h @@ -0,0 +1,2 @@ +void sampleInterop() { +}; \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInteropNoise.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInteropNoise.h new file mode 100644 index 00000000000..3332f60f3ff --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeInterop/cinterop/sampleInteropNoise.h @@ -0,0 +1 @@ +This is not a valid header file. \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeMain/kotlin/NativeMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeMain/kotlin/NativeMain.kt new file mode 100644 index 00000000000..818cbf1319e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-failing/src/nativeMain/kotlin/NativeMain.kt @@ -0,0 +1,7 @@ +@file:Suppress("unused") + +import sampleInterop.sampleInterop + +object NativeMain { + fun x() = sampleInterop() +} \ No newline at end of file