[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 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 = defaultKotlinToolingMetadataJsonPath.readText()
val metadataJson = projectDir.resolve(defaultKotlinToolingMetadataJsonPath).readText() val metadata = KotlinToolingMetadata.parseJsonOrThrow(metadataJson)
val metadata = KotlinToolingMetadata.parseJsonOrThrow(metadataJson) assertEquals(
assertEquals( listOfNotNull(
listOfNotNull( KotlinPlatformType.common.name,
KotlinPlatformType.common.name, KotlinPlatformType.jvm.name,
KotlinPlatformType.jvm.name, KotlinPlatformType.js.name,
KotlinPlatformType.js.name, KotlinPlatformType.native.name,
KotlinPlatformType.native.name, KotlinPlatformType.wasm.name,
KotlinPlatformType.wasm.name, ).sorted(),
).sorted(), metadata.projectTargets.map { it.platformType }.sorted()
metadata.projectTargets.map { it.platformType }.sorted() )
)
/* 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()
assertEquals( assertEquals(
metadataJson, publishedMetadataJson, metadataJson, publishedMetadataJson,
"Expected published kotlin-tooling-metadata.json to contain same content as in buildDir" "Expected published kotlin-tooling-metadata.json to contain same content as in buildDir"
) )
} }
/* 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(defaultKotlinToolingMetadataJsonPath.readText())
val metadata = KotlinToolingMetadata.parseJsonOrThrow(projectDir.resolve(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() )
) }
}
}
@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 @GradleTest
fun `kotlin-js-browser-project`() = with(transformProjectWithPluginsDsl("kotlin-js-browser-project")) { @DisplayName("KotlinToolingMetadata should be not published when disabled")
build(BuildKotlinToolingMetadataTask.defaultTaskName) { fun checkPublishingWithKotlinToolingMetadataArtifactDisabled(
assertSuccessful() gradleVersion: GradleVersion,
assertTasksExecuted(":app:$buildKotlinToolingMetadataTaskName") ) {
assertTasksExecuted(":base:$buildKotlinToolingMetadataTaskName") project("new-mpp-published", gradleVersion) {
assertTasksExecuted(":lib:$buildKotlinToolingMetadataTaskName") 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")
}
} }
} }
} }