[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,33 +5,41 @@
package org.jetbrains.kotlin.gradle package org.jetbrains.kotlin.gradle
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType 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.tooling.BuildKotlinToolingMetadataTask
import org.jetbrains.kotlin.gradle.util.replaceText
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.tooling.KotlinToolingMetadata import org.jetbrains.kotlin.tooling.KotlinToolingMetadata
import org.jetbrains.kotlin.tooling.parseJsonOrThrow 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 import kotlin.test.assertEquals
class KotlinToolingMetadataMppIT : BaseGradleIT() { @MppGradlePluginTests
override val defaultGradleVersion: GradleVersionRequired = GradleVersionRequired.FOR_MPP_SUPPORT @DisplayName("Multiplatform metadata for tooling")
class KotlinToolingMetadataMppIT : KGPBaseTest() {
private val defaultKotlinToolingMetadataJsonPath private val TestProject.defaultKotlinToolingMetadataJsonPath
get() = "build/kotlinToolingMetadata/kotlin-tooling-metadata.json" get() = projectPath.resolve("build/kotlinToolingMetadata/kotlin-tooling-metadata.json")
private val buildKotlinToolingMetadataTaskName private val buildKotlinToolingMetadataTaskName
get() = BuildKotlinToolingMetadataTask.defaultTaskName get() = BuildKotlinToolingMetadataTask.defaultTaskName
@Test @GradleTest
fun `new-mpp-published`() = with(transformProjectWithPluginsDsl("new-mpp-published")) { @DisplayName("Check published metadata contains right data")
fun checkPublishedMetadata(
gradleVersion: GradleVersion
) {
project("new-mpp-published", gradleVersion) {
build("publish") { build("publish") {
assertSuccessful()
assertTasksExecuted(":$buildKotlinToolingMetadataTaskName") assertTasksExecuted(":$buildKotlinToolingMetadataTaskName")
/* Check metadata file in build dir */ /* Check metadata file in build dir */
assertFileExists(defaultKotlinToolingMetadataJsonPath) assertFileExists(defaultKotlinToolingMetadataJsonPath)
val metadataJson = projectDir.resolve(defaultKotlinToolingMetadataJsonPath).readText() val metadataJson = defaultKotlinToolingMetadataJsonPath.readText()
val metadata = KotlinToolingMetadata.parseJsonOrThrow(metadataJson) val metadata = KotlinToolingMetadata.parseJsonOrThrow(metadataJson)
assertEquals( assertEquals(
listOfNotNull( listOfNotNull(
@@ -45,7 +53,7 @@ class KotlinToolingMetadataMppIT : BaseGradleIT() {
) )
/* Check metadata file in published repository */ /* Check metadata file in published repository */
val publishedMetadataJson = projectDir.parentFile.resolve( val publishedMetadataJson = projectPath.parent.resolve(
"repo/com/example/bar/my-lib-bar/1.0/my-lib-bar-1.0-kotlin-tooling-metadata.json" "repo/com/example/bar/my-lib-bar/1.0/my-lib-bar-1.0-kotlin-tooling-metadata.json"
).readText() ).readText()
@@ -57,23 +65,16 @@ class KotlinToolingMetadataMppIT : BaseGradleIT() {
/* Checking UP-TO-DATE behaviour */ /* Checking UP-TO-DATE behaviour */
build("publish") { build("publish") {
assertSuccessful() // Nothing changed. Should be up to date
// Nothing changed. Should be up-to-date
assertTasksUpToDate(":$buildKotlinToolingMetadataTaskName") assertTasksUpToDate(":$buildKotlinToolingMetadataTaskName")
} }
// Adding macos target // Adding macos target
val buildFile = projectDir.resolve("build.gradle.kts") buildGradleKts.replaceText("linuxX64()", "linuxX64()\nmacosX64()")
buildFile.writeText(
buildFile.readText().replace(
"linuxX64()", "linuxX64()\nmacosX64()"
)
)
build("publish") { build("publish") {
assertSuccessful()
assertTasksExecuted(":$buildKotlinToolingMetadataTaskName") assertTasksExecuted(":$buildKotlinToolingMetadataTaskName")
val metadata = KotlinToolingMetadata.parseJsonOrThrow(projectDir.resolve(defaultKotlinToolingMetadataJsonPath).readText()) val metadata = KotlinToolingMetadata.parseJsonOrThrow(defaultKotlinToolingMetadataJsonPath.readText())
assertEquals( assertEquals(
listOf(KonanTarget.LINUX_X64.name, KonanTarget.MACOS_X64.name).sorted(), listOf(KonanTarget.LINUX_X64.name, KonanTarget.MACOS_X64.name).sorted(),
metadata.projectTargets.mapNotNull { it.extras.native?.konanTarget }.sorted() metadata.projectTargets.mapNotNull { it.extras.native?.konanTarget }.sorted()
@@ -81,26 +82,33 @@ class KotlinToolingMetadataMppIT : BaseGradleIT() {
} }
} }
}
@Test @GradleTest
fun `new-mpp-published with KotlinToolingMetadataArtifact disabled`() = with(transformProjectWithPluginsDsl("new-mpp-published")) { @DisplayName("KotlinToolingMetadata should be not published when disabled")
projectDir.resolve("gradle.properties").appendText("\nkotlin.mpp.enableKotlinToolingMetadataArtifact=false") fun checkPublishingWithKotlinToolingMetadataArtifactDisabled(
gradleVersion: GradleVersion,
) {
project("new-mpp-published", gradleVersion) {
gradleProperties.appendText("\nkotlin.mpp.enableKotlinToolingMetadataArtifact=false")
build("publish") { build("publish") {
assertSuccessful() assertFileNotExists(defaultKotlinToolingMetadataJsonPath)
assertNoSuchFile(defaultKotlinToolingMetadataJsonPath) assertTasksAreNotInTaskGraph(":$buildKotlinToolingMetadataTaskName")
assertTasksNotRealized( }
":$buildKotlinToolingMetadataTaskName"
)
} }
} }
@Test @GradleTest
fun `kotlin-js-browser-project`() = with(transformProjectWithPluginsDsl("kotlin-js-browser-project")) { @DisplayName("KotlinToolingMetadata tasks are avaialbe in Kotlin JS browser project")
build(BuildKotlinToolingMetadataTask.defaultTaskName) { fun tasksAreAvailableInKotlinJsBrowser(
assertSuccessful() gradleVersion: GradleVersion
) {
project("kotlin-js-browser-project", gradleVersion) {
build(buildKotlinToolingMetadataTaskName) {
assertTasksExecuted(":app:$buildKotlinToolingMetadataTaskName") assertTasksExecuted(":app:$buildKotlinToolingMetadataTaskName")
assertTasksExecuted(":base:$buildKotlinToolingMetadataTaskName") assertTasksExecuted(":base:$buildKotlinToolingMetadataTaskName")
assertTasksExecuted(":lib:$buildKotlinToolingMetadataTaskName") assertTasksExecuted(":lib:$buildKotlinToolingMetadataTaskName")
} }
} }
} }
}