From 3dd27b9b1f32ca147bd3d68a67ed35e9d85e559b Mon Sep 17 00:00:00 2001 From: "konstantin.tskhovrebov" Date: Fri, 26 Nov 2021 16:45:26 +0100 Subject: [PATCH] Add integration tests for new K/N library DSL. --- .../kotlin/gradle/NativeLibraryDslIT.kt | 90 +++++++++++++++++++ .../new-kn-library-dsl/build.gradle.kts | 6 ++ .../new-kn-library-dsl/gradle.properties | 3 + .../new-kn-library-dsl/lib/build.gradle.kts | 10 +++ .../commonMain/kotlin/org/my/sam/Platform.kt | 5 ++ .../new-kn-library-dsl/settings.gradle.kts | 18 ++++ .../shared/build.gradle.kts | 32 +++++++ .../kotlin/org/sample/application/Platform.kt | 5 ++ 8 files changed, 169 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NativeLibraryDslIT.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/lib/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/lib/src/commonMain/kotlin/org/my/sam/Platform.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/settings.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/shared/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/shared/src/commonMain/kotlin/org/sample/application/Platform.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NativeLibraryDslIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NativeLibraryDslIT.kt new file mode 100644 index 00000000000..9afc3b258d6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NativeLibraryDslIT.kt @@ -0,0 +1,90 @@ +/* + * 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 + +import org.jetbrains.kotlin.konan.target.HostManager +import org.junit.Assume +import kotlin.test.Test + +class NativeLibraryDslIT : BaseGradleIT() { + override val defaultGradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT + + @Test + fun `check registered gradle tasks`() { + with(Project("new-kn-library-dsl")) { + build(":shared:tasks") { + assertSuccessful() + assertTasksRegistered( + ":shared:assembleMylibDebugSharedLibraryLinuxX64", + ":shared:assembleMyslibDebugSharedLibraryLinuxX64", + ":shared:assembleMylibReleaseSharedLibraryLinuxX64", + ":shared:assembleMylibSharedLibrary", + ":shared:assembleMyslibSharedLibrary" + ) + assertTasksNotRegistered( + ":shared:assembleMyslibReleaseSharedLibraryLinuxX64" + ) + } + } + } + + @Test + fun `link shared library from two gradle modules`() { + with(Project("new-kn-library-dsl")) { + build(":shared:assembleMyslibDebugSharedLibraryLinuxX64") { + assertSuccessful() + assertTasksExecuted( + ":lib:compileKotlinLinuxX64", + ":shared:compileKotlinLinuxX64", + ":shared:assembleMyslibDebugSharedLibraryLinuxX64" + ) + assertFileExists("/shared/build/out/dynamic/linux_x64/debug/libmyslib.so") + assertFileExists("/shared/build/out/dynamic/linux_x64/debug/libmyslib_api.h") + } + } + } + + @Test + fun `link shared library from single gradle module`() { + with(Project("new-kn-library-dsl")) { + build(":shared:assembleMylibDebugSharedLibraryLinuxX64") { + assertSuccessful() + assertTasksExecuted( + ":shared:compileKotlinLinuxX64", + ":shared:assembleMylibDebugSharedLibraryLinuxX64" + ) + assertTasksNotExecuted( + ":lib:compileKotlinLinuxX64" + ) + assertFileExists("/shared/build/out/dynamic/linux_x64/debug/libmylib.so") + assertFileExists("/shared/build/out/dynamic/linux_x64/debug/libmylib_api.h") + } + } + } + + @Test + fun `link release XCFramework from two gradle modules`() { + Assume.assumeTrue(HostManager.hostIsMac) + with(Project("new-kn-library-dsl")) { + build(":shared:assembleSharedReleaseXCFramework") { + assertSuccessful() + assertTasksExecuted( + ":shared:compileKotlinIosX64", + ":shared:compileKotlinIosArm64", + ":shared:compileKotlinIosSimulatorArm64", + ":lib:compileKotlinIosX64", + ":lib:compileKotlinIosArm64", + ":lib:compileKotlinIosSimulatorArm64", + ":shared:assembleSharedReleaseXCFramework" + ) + assertTasksNotExecuted( + ":shared:assembleSharedDebugXCFramework" + ) + assertFileExists("/shared/build/out/xcframework/release/shared.xcframework") + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/build.gradle.kts new file mode 100644 index 00000000000..085d555643f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/build.gradle.kts @@ -0,0 +1,6 @@ +allprojects { + repositories { + mavenLocal() + mavenCentral() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/gradle.properties new file mode 100644 index 00000000000..a1f906e0a60 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/gradle.properties @@ -0,0 +1,3 @@ +kotlin.mpp.enableGranularSourceSetsMetadata=true +kotlin.native.enableDependencyPropagation=false +kotlin.mpp.enableCInteropCommonization=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/lib/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/lib/build.gradle.kts new file mode 100644 index 00000000000..ffe541f40e7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/lib/build.gradle.kts @@ -0,0 +1,10 @@ +plugins { + kotlin("multiplatform") +} + +kotlin { + linuxX64() + iosX64() + iosArm64() + iosSimulatorArm64() +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/lib/src/commonMain/kotlin/org/my/sam/Platform.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/lib/src/commonMain/kotlin/org/my/sam/Platform.kt new file mode 100644 index 00000000000..b43f95488da --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/lib/src/commonMain/kotlin/org/my/sam/Platform.kt @@ -0,0 +1,5 @@ +package org.my.sam + +class Greeting { + fun greeting() = "Hello, lib!" +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/settings.gradle.kts new file mode 100644 index 00000000000..3b614cad5d7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/settings.gradle.kts @@ -0,0 +1,18 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + mavenCentral() + } + resolutionStrategy { + val kotlin_version: String by settings + eachPlugin { + when (requested.id.id) { + "org.jetbrains.kotlin.multiplatform" -> useVersion(kotlin_version) + } + } + } +} + +include(":shared") +include(":lib") \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/shared/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/shared/build.gradle.kts new file mode 100644 index 00000000000..6a354546919 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/shared/build.gradle.kts @@ -0,0 +1,32 @@ +import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType +import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.* +import org.jetbrains.kotlin.konan.target.KonanTarget.* + +plugins { + kotlin("multiplatform") +} + +kotlin { + linuxX64() + iosX64() + iosArm64() + iosSimulatorArm64() +} + +kotlinArtifact("mylib", Library) { + target = LINUX_X64 +} + +kotlinArtifact("myslib", Library) { + target = LINUX_X64 + modes = setOf(NativeBuildType.DEBUG) + addModule(project(":lib")) +} + +kotlinArtifact(XCFramework) { + targets = setOf(IOS_X64, IOS_ARM64, IOS_SIMULATOR_ARM64) + setModules( + project(":shared"), + project(":lib") + ) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/shared/src/commonMain/kotlin/org/sample/application/Platform.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/shared/src/commonMain/kotlin/org/sample/application/Platform.kt new file mode 100644 index 00000000000..da2586c36ac --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-kn-library-dsl/shared/src/commonMain/kotlin/org/sample/application/Platform.kt @@ -0,0 +1,5 @@ +package org.sample.application + +class Greeting { + fun greeting() = "Hello, new DSL!" +} \ No newline at end of file