From e7d8804bdf577e48bbe7e8bfc3b42a7289271f8d Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Fri, 24 Sep 2021 09:56:52 +0200 Subject: [PATCH] [Gradle] [MPP] Implement integration test to cover ^KT-48856 --- .../jetbrains/kotlin/gradle/CommonizerIT.kt | 22 +++++++++- .../build.gradle.kts | 40 +++++++++++++++++++ .../gradle.properties | 6 +++ .../settings.gradle.kts | 10 +++++ .../nativeInterop/cinterop/sampleInterop.def | 0 .../nativeInterop/cinterop/sampleInterop.h | 2 + .../kotlin/NativeIntermediateTest.kt | 7 ++++ .../src/platformMain/kotlin/NativeMain.kt | 7 ++++ 8 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/settings.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/nativeInterop/cinterop/sampleInterop.def create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/nativeInterop/cinterop/sampleInterop.h create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/nativeTest/kotlin/NativeIntermediateTest.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/platformMain/kotlin/NativeMain.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt index 9ebed0e8620..a7be582be56 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt @@ -386,6 +386,27 @@ class CommonizerIT : BaseGradleIT() { } } + @Test + fun `test KT-48856 single native target dependency propagation - test source set - cinterop`() { + fun CompiledProject.containsCinteropDependency(): Boolean { + val nativeMainContainsCInteropDependencyRegex = Regex(""".*Dependency:.*cinterop-sampleInterop.*""") + return output.lineSequence().any { line -> + line.matches(nativeMainContainsCInteropDependencyRegex) + } + } + + with(Project("commonize-kt-48856-singleNativeTargetPropagation-testSourceSet")) { + build("listNativeTestDependencies") { + assertSuccessful() + assertTrue(containsCinteropDependency(), "Expected sourceSet 'nativeTest' to list cinterop dependency") + } + + build("assemble") { + assertSuccessful() + } + } + } + @Test fun `test KT-46856 filename too long - all native targets configured`() { with(Project("commonize-kt-46856-all-targets")) { @@ -663,4 +684,3 @@ private object CommonizableTargets { else -> fail("Unsupported os: ${os.name}") } } - diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/build.gradle.kts new file mode 100644 index 00000000000..a6a9c0eb0b4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/build.gradle.kts @@ -0,0 +1,40 @@ +import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet +import org.jetbrains.kotlin.konan.target.HostManager + +plugins { + kotlin("multiplatform") +} + +repositories { + mavenCentral() + mavenLocal() +} + +kotlin { + val platformTarget = when { + HostManager.hostIsMac -> macosX64("platform") + HostManager.hostIsMingw -> mingwX64("platform") + HostManager.hostIsLinux -> linuxX64("platform") + else -> error("Unexpected host: ${HostManager.host}") + } + + platformTarget.compilations["main"].cinterops.create("sampleInterop") { + header(file("src/nativeInterop/cinterop/sampleInterop.h")) + } + + val platformTest by sourceSets.getting + val nativeTest = sourceSets.create("nativeTest") + platformTest.dependsOn(nativeTest) + + tasks.create("listNativeTestDependencies") { + nativeTest as DefaultKotlinSourceSet + val nativeTestMetadataConfiguration = configurations[nativeTest.intransitiveMetadataConfigurationName] + dependsOn(nativeTestMetadataConfiguration) + + doFirst { + nativeTestMetadataConfiguration.files.forEach { dependencyFile -> + logger.quiet("Dependency: ${dependencyFile.path}") + } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/gradle.properties new file mode 100644 index 00000000000..e860ba620b9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/gradle.properties @@ -0,0 +1,6 @@ +kotlin.code.style=official +kotlin.js.generate.executable.default=false +kotlin.mpp.enableGranularSourceSetsMetadata=true +kotlin.mpp.enableCInteropCommonization=true +kotlin.native.enableDependencyPropagation=false +kotlin.mpp.enableIntransitiveMetadataConfiguration=true diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/settings.gradle.kts new file mode 100644 index 00000000000..ecdece6ecfe --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/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/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/nativeInterop/cinterop/sampleInterop.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/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/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/nativeInterop/cinterop/sampleInterop.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/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/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/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/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/nativeTest/kotlin/NativeIntermediateTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/nativeTest/kotlin/NativeIntermediateTest.kt new file mode 100644 index 00000000000..3347c8a82e0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/nativeTest/kotlin/NativeIntermediateTest.kt @@ -0,0 +1,7 @@ +@file:Suppress("unused") + +import sampleInterop.sampleInterop + +object NativeIntermediateTest { + fun x() = sampleInterop() +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/platformMain/kotlin/NativeMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/platformMain/kotlin/NativeMain.kt new file mode 100644 index 00000000000..818cbf1319e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48856-singleNativeTargetPropagation-testSourceSet/src/platformMain/kotlin/NativeMain.kt @@ -0,0 +1,7 @@ +@file:Suppress("unused") + +import sampleInterop.sampleInterop + +object NativeMain { + fun x() = sampleInterop() +} \ No newline at end of file