From 81fded3c8bda5149f6018eeea069c016600e71d5 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Fri, 2 Feb 2024 22:30:09 +0100 Subject: [PATCH] [Gradle] Migrate KotlinToolingMetadataIT to new test DSL ^KT-65528 In Progress --- .../kotlin/gradle/KotlinToolingMetadataIT.kt | 156 +++++++++--------- 1 file changed, 82 insertions(+), 74 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinToolingMetadataIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinToolingMetadataIT.kt index 4ed93546e9b..2e3543df839 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinToolingMetadataIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinToolingMetadataIT.kt @@ -5,102 +5,110 @@ package org.jetbrains.kotlin.gradle +import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType +import org.jetbrains.kotlin.gradle.testbase.* import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask +import org.jetbrains.kotlin.gradle.util.replaceText import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.tooling.KotlinToolingMetadata import org.jetbrains.kotlin.tooling.parseJsonOrThrow -import org.junit.Test +import org.junit.jupiter.api.DisplayName +import kotlin.io.path.appendText +import kotlin.io.path.readText import kotlin.test.assertEquals -class KotlinToolingMetadataMppIT : BaseGradleIT() { - override val defaultGradleVersion: GradleVersionRequired = GradleVersionRequired.FOR_MPP_SUPPORT - - private val defaultKotlinToolingMetadataJsonPath - get() = "build/kotlinToolingMetadata/kotlin-tooling-metadata.json" +@MppGradlePluginTests +@DisplayName("Multiplatform metadata for tooling") +class KotlinToolingMetadataMppIT : KGPBaseTest() { + private val TestProject.defaultKotlinToolingMetadataJsonPath + get() = projectPath.resolve("build/kotlinToolingMetadata/kotlin-tooling-metadata.json") private val buildKotlinToolingMetadataTaskName get() = BuildKotlinToolingMetadataTask.defaultTaskName - @Test - fun `new-mpp-published`() = with(transformProjectWithPluginsDsl("new-mpp-published")) { + @GradleTest + @DisplayName("Check published metadata contains right data") + fun checkPublishedMetadata( + gradleVersion: GradleVersion + ) { + project("new-mpp-published", gradleVersion) { - build("publish") { - assertSuccessful() - assertTasksExecuted(":$buildKotlinToolingMetadataTaskName") - /* Check metadata file in build dir */ - assertFileExists(defaultKotlinToolingMetadataJsonPath) - val metadataJson = projectDir.resolve(defaultKotlinToolingMetadataJsonPath).readText() - val metadata = KotlinToolingMetadata.parseJsonOrThrow(metadataJson) - assertEquals( - listOfNotNull( - KotlinPlatformType.common.name, - KotlinPlatformType.jvm.name, - KotlinPlatformType.js.name, - KotlinPlatformType.native.name, - KotlinPlatformType.wasm.name, - ).sorted(), - metadata.projectTargets.map { it.platformType }.sorted() - ) + build("publish") { + assertTasksExecuted(":$buildKotlinToolingMetadataTaskName") + /* Check metadata file in build dir */ + assertFileExists(defaultKotlinToolingMetadataJsonPath) + val metadataJson = defaultKotlinToolingMetadataJsonPath.readText() + val metadata = KotlinToolingMetadata.parseJsonOrThrow(metadataJson) + assertEquals( + listOfNotNull( + KotlinPlatformType.common.name, + KotlinPlatformType.jvm.name, + KotlinPlatformType.js.name, + KotlinPlatformType.native.name, + KotlinPlatformType.wasm.name, + ).sorted(), + metadata.projectTargets.map { it.platformType }.sorted() + ) - /* Check metadata file in published repository */ - val publishedMetadataJson = projectDir.parentFile.resolve( - "repo/com/example/bar/my-lib-bar/1.0/my-lib-bar-1.0-kotlin-tooling-metadata.json" - ).readText() + /* Check metadata file in published repository */ + val publishedMetadataJson = projectPath.parent.resolve( + "repo/com/example/bar/my-lib-bar/1.0/my-lib-bar-1.0-kotlin-tooling-metadata.json" + ).readText() - assertEquals( - metadataJson, publishedMetadataJson, - "Expected published kotlin-tooling-metadata.json to contain same content as in buildDir" - ) - } + assertEquals( + metadataJson, publishedMetadataJson, + "Expected published kotlin-tooling-metadata.json to contain same content as in buildDir" + ) + } - /* Checking UP-TO-DATE behaviour */ - build("publish") { - assertSuccessful() - // Nothing changed. Should be up-to-date - assertTasksUpToDate(":$buildKotlinToolingMetadataTaskName") - } + /* Checking UP-TO-DATE behaviour */ + build("publish") { + // Nothing changed. Should be up to date + assertTasksUpToDate(":$buildKotlinToolingMetadataTaskName") + } - // Adding macos target - val buildFile = projectDir.resolve("build.gradle.kts") - buildFile.writeText( - buildFile.readText().replace( - "linuxX64()", "linuxX64()\nmacosX64()" - ) - ) + // Adding macos target + buildGradleKts.replaceText("linuxX64()", "linuxX64()\nmacosX64()") - build("publish") { - assertSuccessful() - assertTasksExecuted(":$buildKotlinToolingMetadataTaskName") - val metadata = KotlinToolingMetadata.parseJsonOrThrow(projectDir.resolve(defaultKotlinToolingMetadataJsonPath).readText()) - assertEquals( - listOf(KonanTarget.LINUX_X64.name, KonanTarget.MACOS_X64.name).sorted(), - metadata.projectTargets.mapNotNull { it.extras.native?.konanTarget }.sorted() - ) - } + build("publish") { + assertTasksExecuted(":$buildKotlinToolingMetadataTaskName") + val metadata = KotlinToolingMetadata.parseJsonOrThrow(defaultKotlinToolingMetadataJsonPath.readText()) + assertEquals( + listOf(KonanTarget.LINUX_X64.name, KonanTarget.MACOS_X64.name).sorted(), + metadata.projectTargets.mapNotNull { it.extras.native?.konanTarget }.sorted() + ) + } - } - - @Test - fun `new-mpp-published with KotlinToolingMetadataArtifact disabled`() = with(transformProjectWithPluginsDsl("new-mpp-published")) { - projectDir.resolve("gradle.properties").appendText("\nkotlin.mpp.enableKotlinToolingMetadataArtifact=false") - build("publish") { - assertSuccessful() - assertNoSuchFile(defaultKotlinToolingMetadataJsonPath) - assertTasksNotRealized( - ":$buildKotlinToolingMetadataTaskName" - ) } } - @Test - fun `kotlin-js-browser-project`() = with(transformProjectWithPluginsDsl("kotlin-js-browser-project")) { - build(BuildKotlinToolingMetadataTask.defaultTaskName) { - assertSuccessful() - assertTasksExecuted(":app:$buildKotlinToolingMetadataTaskName") - assertTasksExecuted(":base:$buildKotlinToolingMetadataTaskName") - assertTasksExecuted(":lib:$buildKotlinToolingMetadataTaskName") + @GradleTest + @DisplayName("KotlinToolingMetadata should be not published when disabled") + fun checkPublishingWithKotlinToolingMetadataArtifactDisabled( + gradleVersion: GradleVersion, + ) { + project("new-mpp-published", gradleVersion) { + gradleProperties.appendText("\nkotlin.mpp.enableKotlinToolingMetadataArtifact=false") + build("publish") { + assertFileNotExists(defaultKotlinToolingMetadataJsonPath) + assertTasksAreNotInTaskGraph(":$buildKotlinToolingMetadataTaskName") + } + } + } + + @GradleTest + @DisplayName("KotlinToolingMetadata tasks are avaialbe in Kotlin JS browser project") + fun tasksAreAvailableInKotlinJsBrowser( + gradleVersion: GradleVersion + ) { + project("kotlin-js-browser-project", gradleVersion) { + build(buildKotlinToolingMetadataTaskName) { + assertTasksExecuted(":app:$buildKotlinToolingMetadataTaskName") + assertTasksExecuted(":base:$buildKotlinToolingMetadataTaskName") + assertTasksExecuted(":lib:$buildKotlinToolingMetadataTaskName") + } } } }