[Gradle] Fix CompilerOptionsIT.combinesOptInFromLanguageSettingsNative

KTIJ-24976
This commit is contained in:
Sebastian Sellmair
2023-03-29 10:11:42 +02:00
committed by Space Team
parent 2c8491cf27
commit 9f2ee09ddb
2 changed files with 42 additions and 20 deletions
@@ -10,9 +10,11 @@ import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
import org.jetbrains.kotlin.gradle.testbase.* import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.gradle.util.parseCompilerArguments
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.fail import org.junit.jupiter.api.fail
import kotlin.io.path.appendText import kotlin.io.path.appendText
import kotlin.test.assertEquals
import kotlin.test.fail import kotlin.test.fail
internal class CompilerOptionsIT : KGPBaseTest() { internal class CompilerOptionsIT : KGPBaseTest() {
@@ -249,24 +251,20 @@ internal class CompilerOptionsIT : KGPBaseTest() {
build("compileNativeMainKotlinMetadata") { build("compileNativeMainKotlinMetadata") {
assertTasksExecuted(":compileNativeMainKotlinMetadata") assertTasksExecuted(":compileNativeMainKotlinMetadata")
assert( val arguments = parseCompilerArguments<K2NativeCompilerArguments>()
output.contains("-opt-in=another.custom.UnderOptIn") && assertEquals(
output.contains("-opt-in=my.custom.OptInAnnotation") setOf("another.custom.UnderOptIn", "my.custom.OptInAnnotation"), arguments.optIn?.toSet(),
) { "Arguments optIn does not match '-opt-in=another.custom.UnderOptIn, -opt-in=my.custom.OptInAnnotation'"
printBuildOutput() )
"Output does not contain '-opt-in=another.custom.UnderOptIn, -opt-in=my.custom.OptInAnnotation'!"
}
} }
build("compileKotlinLinux64") { build("compileKotlinLinux64") {
assertTasksExecuted(":compileKotlinLinux64") assertTasksExecuted(":compileKotlinLinux64")
assert( val arguments = parseCompilerArguments<K2NativeCompilerArguments>()
output.contains("-opt-in=another.custom.UnderOptIn") && assertEquals(
output.contains("-opt-in=my.custom.OptInAnnotation") setOf("another.custom.UnderOptIn", "my.custom.OptInAnnotation"), arguments.optIn?.toSet(),
) { "Arguments optIn does not match '-opt-in=another.custom.UnderOptIn, -opt-in=my.custom.OptInAnnotation'"
printBuildOutput() )
"Output does not contain '-opt-in=another.custom.UnderOptIn, -opt-in=my.custom.OptInAnnotation'!"
}
} }
} }
} }
@@ -290,12 +288,7 @@ internal class CompilerOptionsIT : KGPBaseTest() {
build("compileKotlinHost", forceOutput = true) { build("compileKotlinHost", forceOutput = true) {
val expectedOptIn = listOf("kotlin.RequiresOptIn", "my.CustomOptIn") val expectedOptIn = listOf("kotlin.RequiresOptIn", "my.CustomOptIn")
val argumentsString = output val arguments = parseCompilerArguments<K2NativeCompilerArguments>()
.substringAfter("Arguments = [")
.substringBefore("]")
val rawArguments = argumentsString.lines().map { it.trim() }
val arguments = parseCommandLineArguments<K2NativeCompilerArguments>(rawArguments)
if (arguments.optIn?.toList() != listOf("kotlin.RequiresOptIn", "my.CustomOptIn")) { if (arguments.optIn?.toList() != listOf("kotlin.RequiresOptIn", "my.CustomOptIn")) {
fail( fail(
"compiler arguments does not contain expected optIns'${expectedOptIn.joinToString()}': ${arguments.optIn}" "compiler arguments does not contain expected optIns'${expectedOptIn.joinToString()}': ${arguments.optIn}"
@@ -0,0 +1,29 @@
/*
* Copyright 2010-2023 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.util
import org.gradle.testkit.runner.BuildResult
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
import kotlin.reflect.KClass
inline fun <reified T : CommonCompilerArguments> BuildResult.parseCompilerArguments(): T {
return parseCompilerArguments(T::class)
}
fun <T : CommonCompilerArguments> BuildResult.parseCompilerArguments(type: KClass<T>): T {
val arguments = findCommandLineArguments(output).lines().map { it.trim() }
return parseCommandLineArguments(type, arguments)
}
fun findCommandLineArguments(buildOutput: String): String {
val delimiter = "Arguments = ["
require(delimiter in buildOutput)
return buildOutput
.substringAfter("Arguments = [")
.substringBefore("]")
}