[Gradle] Migrate KotlinToolingMetadataIT to new test DSL

^KT-65528 In Progress
This commit is contained in:
Yahor Berdnikau
2024-02-02 22:30:09 +01:00
committed by Space Team
parent 72d92cd9b2
commit 81fded3c8b
@@ -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")
}
}
}
}