[Gradle] Add tests for KT-62921
This commit is contained in:
committed by
Space Team
parent
f507b19bd3
commit
238d5504d2
+110
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 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.gradle.testkit.runner.BuildResult
|
||||||
|
import org.gradle.util.GradleVersion
|
||||||
|
import org.jetbrains.kotlin.gradle.internals.KOTLIN_BUILD_TOOLS_API_CLASSPATH_CONFIGURATION_NAME
|
||||||
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
|
import org.junit.jupiter.api.DisplayName
|
||||||
|
|
||||||
|
@DisplayName("Tests for compiler version choosing via the Build Tools API")
|
||||||
|
@JvmGradlePluginTests
|
||||||
|
class CompilerVersionChooseIT : KGPBaseTest() {
|
||||||
|
override val defaultBuildOptions = super.defaultBuildOptions.copy(runViaBuildToolsApi = true)
|
||||||
|
|
||||||
|
@GradleTest
|
||||||
|
@DisplayName("Verify default compiler dependencies")
|
||||||
|
fun defaultClasspath(gradleVersion: GradleVersion) {
|
||||||
|
prepareProject(gradleVersion) {
|
||||||
|
build(printClasspathTaskName) {
|
||||||
|
assertCompilerVersion(buildOptions.kotlinVersion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GradleTest
|
||||||
|
@DisplayName("Compiler version may be specified via the kotlin extension")
|
||||||
|
fun compilerVersionMayBeChanged(gradleVersion: GradleVersion) {
|
||||||
|
prepareProject(gradleVersion) {
|
||||||
|
chooseCompilerVersion(TestVersions.Kotlin.STABLE_RELEASE)
|
||||||
|
build(printClasspathTaskName) {
|
||||||
|
assertCompilerVersion(TestVersions.Kotlin.STABLE_RELEASE)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GradleTest
|
||||||
|
@DisplayName("Compiler version may be specified via the kotlin extension multiple times")
|
||||||
|
fun compilerVersionMayBeChangedMultipleTimes(gradleVersion: GradleVersion) {
|
||||||
|
prepareProject(gradleVersion) {
|
||||||
|
chooseCompilerVersion(buildOptions.kotlinVersion)
|
||||||
|
chooseCompilerVersion(TestVersions.Kotlin.STABLE_RELEASE)
|
||||||
|
build(printClasspathTaskName) {
|
||||||
|
assertCompilerVersion(TestVersions.Kotlin.STABLE_RELEASE)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GradleTest
|
||||||
|
@DisplayName("Manual adding dependencies to the classpath configuration does not change kotlin version")
|
||||||
|
fun manualAdding(gradleVersion: GradleVersion) {
|
||||||
|
prepareProject(gradleVersion) {
|
||||||
|
buildGradle.append(
|
||||||
|
//language=Gradle
|
||||||
|
"""
|
||||||
|
dependencies {
|
||||||
|
$KOTLIN_BUILD_TOOLS_API_CLASSPATH_CONFIGURATION_NAME("org.jetbrains.kotlin:kotlin-compiler-embeddable:${TestVersions.Kotlin.STABLE_RELEASE}")
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
build(printClasspathTaskName) {
|
||||||
|
assertCompilerVersion(buildOptions.kotlinVersion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val printClasspathTaskName = "printBuildToolsApiClasspath"
|
||||||
|
|
||||||
|
private fun BuildResult.assertCompilerVersion(version: String) {
|
||||||
|
val compilerDependencies = extractClasspathFromLogs()
|
||||||
|
.filter { "kotlin-compiler-embeddable" in it }
|
||||||
|
.toList()
|
||||||
|
assert(compilerDependencies.isNotEmpty()) {
|
||||||
|
"Expected dependencies to contain `kotlin-compiler-embeddable`"
|
||||||
|
}
|
||||||
|
val nonMatchingVersionDependencies = compilerDependencies
|
||||||
|
.filter { !it.endsWith("$version.jar") }
|
||||||
|
assert(nonMatchingVersionDependencies.isEmpty()) {
|
||||||
|
"Kotlin dependencies expected to be of version '$version', the following dependencies do not pass the check: $nonMatchingVersionDependencies"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val classpathLogLinePrefix = "kotlin classpath: "
|
||||||
|
|
||||||
|
private fun BuildResult.extractClasspathFromLogs() = output.lineSequence()
|
||||||
|
.filter { it.startsWith(classpathLogLinePrefix) }
|
||||||
|
.map { it.replaceFirst(classpathLogLinePrefix, "") }
|
||||||
|
|
||||||
|
private fun prepareProject(gradleVersion: GradleVersion, test: TestProject.() -> Unit = {}) {
|
||||||
|
project("simpleProject", gradleVersion) {
|
||||||
|
buildGradle.append(
|
||||||
|
//language=Gradle
|
||||||
|
"""
|
||||||
|
tasks.register("$printClasspathTaskName") {
|
||||||
|
FileCollection classpath = configurations.$KOTLIN_BUILD_TOOLS_API_CLASSPATH_CONFIGURATION_NAME
|
||||||
|
doFirst {
|
||||||
|
classpath.forEach {
|
||||||
|
println("$classpathLogLinePrefix" + it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
test()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.internals
|
package org.jetbrains.kotlin.gradle.internals
|
||||||
|
|
||||||
import org.jetbrains.kotlin.compilerRunner.asFinishLogMessage
|
import org.jetbrains.kotlin.compilerRunner.asFinishLogMessage
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.BUILD_TOOLS_API_CLASSPATH_CONFIGURATION_NAME
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_INTERNAL_DIAGNOSTICS_USE_PARSABLE_FORMATTING
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_INTERNAL_DIAGNOSTICS_USE_PARSABLE_FORMATTING
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_INTERNAL_DIAGNOSTICS_SHOW_STACKTRACE
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_INTERNAL_DIAGNOSTICS_SHOW_STACKTRACE
|
||||||
@@ -35,3 +36,4 @@ val KOTLIN_INTERNAL_DIAGNOSTICS_USE_PARSABLE_FORMATTING = KOTLIN_INTERNAL_DIAGNO
|
|||||||
val KOTLIN_INTERNAL_DIAGNOSTICS_SHOW_STACKTRACE = KOTLIN_INTERNAL_DIAGNOSTICS_SHOW_STACKTRACE
|
val KOTLIN_INTERNAL_DIAGNOSTICS_SHOW_STACKTRACE = KOTLIN_INTERNAL_DIAGNOSTICS_SHOW_STACKTRACE
|
||||||
val KOTLIN_DIAGNOSTIC_STACKTRACE_START = DIAGNOSTIC_STACKTRACE_START
|
val KOTLIN_DIAGNOSTIC_STACKTRACE_START = DIAGNOSTIC_STACKTRACE_START
|
||||||
val KOTLIN_DIAGNOSTIC_STACKTRACE_END_SEPARATOR = DIAGNOSTIC_STACKTRACE_END_SEPARATOR
|
val KOTLIN_DIAGNOSTIC_STACKTRACE_END_SEPARATOR = DIAGNOSTIC_STACKTRACE_END_SEPARATOR
|
||||||
|
val KOTLIN_BUILD_TOOLS_API_CLASSPATH_CONFIGURATION_NAME = BUILD_TOOLS_API_CLASSPATH_CONFIGURATION_NAME
|
||||||
|
|||||||
Reference in New Issue
Block a user