Add a separate test configurations for JDK 21 dependent test

After it's released, there would be no need in them, but right now
they are unavailable through the toolchain, so we can't require it.
See KT-58765 for tracking

But there should be a dedicated Build configuration with JDK_21_0 env
properly set.

^KT-58716 Fixed
This commit is contained in:
Denis.Zharkov
2023-05-17 18:17:40 +02:00
committed by Space Team
parent 4705207263
commit 67d51eb7ee
17 changed files with 332 additions and 17 deletions
+24 -4
View File
@@ -59,14 +59,34 @@ if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
}
}
fun Test.configureTest(configureJUnit: JUnitPlatformOptions.() -> Unit = {}) {
dependsOn(":dist")
workingDir = rootDir
useJUnitPlatform {
configureJUnit()
}
useJsIrBoxTests(version = version, buildDir = "$buildDir/")
}
projectTest(
jUnitMode = JUnitMode.JUnit5,
defineJDKEnvVariables = listOf(JdkMajorVersion.JDK_1_8, JdkMajorVersion.JDK_11_0, JdkMajorVersion.JDK_17_0)
) {
dependsOn(":dist")
workingDir = rootDir
useJUnitPlatform()
useJsIrBoxTests(version = version, buildDir = "$buildDir/")
configureTest {
excludeTags("Jdk21Test")
}
}
// Separate configuration is only necessary while JDK 21 is not released, so cannot be obtained via toolchain.
// See KT-58765 for tracking
projectTest(
"jdk21Tests",
jUnitMode = JUnitMode.JUnit5,
) {
configureTest {
includeTags("Jdk21Test")
}
}
testsJar()
@@ -0,0 +1,32 @@
/*
* 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.test.runners;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.test.generators.GenerateCompilerTestsKt}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("compiler/testData/diagnostics/testsWithJdk21")
@TestDataPath("$PROJECT_ROOT")
public class FirLightTreeJdk21DiagnosticTestGenerated extends AbstractFirLightTreeJdk21DiagnosticTest {
@Test
public void testAllFilesPresentInTestsWithJdk21() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
}
@Test
@TestMetadata("newListMethods.kt")
public void testNewListMethods() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJdk21/newListMethods.kt");
}
}
@@ -0,0 +1,32 @@
/*
* 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.test.runners;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.test.generators.GenerateCompilerTestsKt}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("compiler/testData/diagnostics/testsWithJdk21")
@TestDataPath("$PROJECT_ROOT")
public class FirPsiJdk21DiagnosticTestGenerated extends AbstractFirPsiJdk21DiagnosticTest {
@Test
public void testAllFilesPresentInTestsWithJdk21() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
}
@Test
@TestMetadata("newListMethods.kt")
public void testNewListMethods() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJdk21/newListMethods.kt");
}
}
@@ -32,6 +32,9 @@ enum class TestJdkKind(val requiresSeparateProcess: Boolean = false) {
// JDK found at $JDK_17_0
FULL_JDK_17(requiresSeparateProcess = true),
// JDK found at $JDK_21_0
FULL_JDK_21(requiresSeparateProcess = true),
// JDK found at java.home
FULL_JDK,
ANDROID_API,
@@ -159,6 +159,10 @@ public class KtTestUtil {
return getJdkHome("JDK_17_0", "JDK_17");
}
public static File getJdk21Home() {
return getJdkHome("JDK_21_0", "JDK_21");
}
@NotNull
public static String getTestDataPathBase() {
return getHomeDirectory() + "/compiler/testData";
@@ -0,0 +1,46 @@
// ISSUE: KT-58371
// WITH_STDLIB
class A<T> : ArrayList<T>() {
override fun addFirst(t: T) {
super.addFirst(t)
}
override fun addLast(t: T) {
super.addLast(t)
}
override fun getFirst(): T = super.getFirst()
override fun getLast(): T = super.getLast()
override fun removeFirst(): T = super.removeFirst()
override fun removeLast(): T = super.removeLast()
<!NOTHING_TO_OVERRIDE!>override<!> fun reversed(): List<T> = super.<!UNRESOLVED_REFERENCE!>reversed<!>()
}
fun foo(x: MutableList<String>, y: ArrayList<String>, z: A<String>) {
x.<!UNRESOLVED_REFERENCE!>addFirst<!>("")
x.<!UNRESOLVED_REFERENCE!>addLast<!>("")
x.<!UNRESOLVED_REFERENCE!>getFirst<!>()
x.<!UNRESOLVED_REFERENCE!>getLast<!>()
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeFirst; typeCall: extension function")!>removeFirst()<!>
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeLast; typeCall: extension function")!>removeLast()<!>
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
y.addFirst("")
y.addLast("")
y.getFirst()
y.getLast()
y.<!DEBUG_INFO_CALL("fqName: java.util.ArrayList.removeFirst; typeCall: function")!>removeFirst()<!>
y.<!DEBUG_INFO_CALL("fqName: java.util.ArrayList.removeLast; typeCall: function")!>removeLast()<!>
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
z.addFirst("")
z.addLast("")
z.getFirst()
z.getLast()
z.<!DEBUG_INFO_CALL("fqName: A.removeFirst; typeCall: function")!>removeFirst()<!>
z.<!DEBUG_INFO_CALL("fqName: A.removeLast; typeCall: function")!>removeLast()<!>
z.<!DEBUG_INFO_CALL("fqName: A.reversed; typeCall: function")!>reversed()<!>
}
@@ -0,0 +1,46 @@
// ISSUE: KT-58371
// WITH_STDLIB
class A<T> : ArrayList<T>() {
override fun addFirst(t: T) {
super.addFirst(t)
}
override fun addLast(t: T) {
super.addLast(t)
}
override fun getFirst(): T = super.getFirst()
override fun getLast(): T = super.getLast()
override fun removeFirst(): T = super.removeFirst()
override fun removeLast(): T = super.removeLast()
override fun reversed(): List<T> = super.reversed()
}
fun foo(x: MutableList<String>, y: ArrayList<String>, z: A<String>) {
x.<!UNRESOLVED_REFERENCE!>addFirst<!>("")
x.<!UNRESOLVED_REFERENCE!>addLast<!>("")
x.<!UNRESOLVED_REFERENCE!>getFirst<!>()
x.<!UNRESOLVED_REFERENCE!>getLast<!>()
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeFirst; typeCall: extension function")!>removeFirst()<!>
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeLast; typeCall: extension function")!>removeLast()<!>
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
y.<!UNRESOLVED_REFERENCE!>addFirst<!>("")
y.<!UNRESOLVED_REFERENCE!>addLast<!>("")
y.<!UNRESOLVED_REFERENCE!>getFirst<!>()
y.<!UNRESOLVED_REFERENCE!>getLast<!>()
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeFirst; typeCall: extension function")!>removeFirst()<!>
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeLast; typeCall: extension function")!>removeLast()<!>
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
z.<!UNRESOLVED_REFERENCE!>addFirst<!>("")
z.<!UNRESOLVED_REFERENCE!>addLast<!>("")
z.<!UNRESOLVED_REFERENCE!>getFirst<!>()
z.<!UNRESOLVED_REFERENCE!>getLast<!>()
z.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeFirst; typeCall: extension function")!>removeFirst()<!>
z.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeLast; typeCall: extension function")!>removeLast()<!>
z.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
}
+22 -5
View File
@@ -1,5 +1,3 @@
import org.jetbrains.kotlin.ideaExt.idea
plugins {
kotlin("jvm")
id("jps-compatible")
@@ -50,15 +48,34 @@ sourceSets {
}
}
fun Test.configureTest(configureJUnit: JUnitPlatformOptions.() -> Unit = {}) {
dependsOn(":dist")
workingDir = rootDir
useJUnitPlatform {
configureJUnit()
}
}
projectTest(
jUnitMode = JUnitMode.JUnit5,
defineJDKEnvVariables = listOf(
JdkMajorVersion.JDK_11_0 // e.g. org.jetbrains.kotlin.test.runners.ForeignAnnotationsCompiledJavaTestGenerated.Java11Tests
)
) {
dependsOn(":dist")
workingDir = rootDir
useJUnitPlatform()
configureTest {
excludeTags("Jdk21Test")
}
}
// Separate configuration is only necessary while JDK 21 is not released, so cannot be obtained via toolchain.
// See KT-58765 for tracking
projectTest(
"jdk21Tests",
jUnitMode = JUnitMode.JUnit5,
) {
configureTest {
includeTags("Jdk21Test")
}
}
testsJar()
@@ -0,0 +1,32 @@
/*
* 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.test.runners;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.test.generators.GenerateCompilerTestsKt}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("compiler/testData/diagnostics/testsWithJdk21")
@TestDataPath("$PROJECT_ROOT")
public class Jdk21DiagnosticTestGenerated extends AbstractJdk21DiagnosticTest {
@Test
public void testAllFilesPresentInTestsWithJdk21() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
}
@Test
@TestMetadata("newListMethods.kt")
public void testNewListMethods() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJdk21/newListMethods.kt");
}
}
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.test.backend.handlers
import junit.framework.TestCase
import org.jetbrains.kotlin.backend.common.CodegenUtil.getMemberDeclarationsToGenerate
import org.jetbrains.kotlin.codegen.*
import org.jetbrains.kotlin.codegen.ClassFileFactory
import org.jetbrains.kotlin.codegen.CodegenTestUtil
import org.jetbrains.kotlin.codegen.GeneratedClassLoader
import org.jetbrains.kotlin.codegen.extractUrls
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil.getFileClassInfoNoResolve
import org.jetbrains.kotlin.psi.KtFile
@@ -181,6 +184,7 @@ open class JvmBoxRunner(testServices: TestServices) : JvmBinaryArtifactHandler(t
TestJdkKind.FULL_JDK -> KtTestUtil.getJdk8Home()
TestJdkKind.FULL_JDK_11 -> KtTestUtil.getJdk11Home()
TestJdkKind.FULL_JDK_17 -> KtTestUtil.getJdk17Home()
TestJdkKind.FULL_JDK_21 -> KtTestUtil.getJdk21Home()
else -> error("Unsupported JDK kind: $jdkKind")
}
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.builders.configureFirHandlersStep
import org.jetbrains.kotlin.test.builders.firHandlersStep
import org.jetbrains.kotlin.test.builders.irHandlersStep
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_DUMP
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.WITH_EXTENDED_CHECKERS
@@ -31,17 +32,15 @@ import org.jetbrains.kotlin.test.frontend.fir.handlers.*
import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendFacade
import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.services.JsLibraryProvider
import org.jetbrains.kotlin.test.services.TestService
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator
import org.jetbrains.kotlin.test.services.fir.FirOldFrontendMetaConfigurator
import org.jetbrains.kotlin.test.services.service
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
import org.jetbrains.kotlin.test.FirParser
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.services.JsLibraryProvider
import org.jetbrains.kotlin.test.services.TestService
import org.jetbrains.kotlin.test.services.TestServices
abstract class AbstractFirDiagnosticTestBase(val parser: FirParser) : AbstractKotlinCompilerTest() {
override fun TestConfigurationBuilder.configuration() {
@@ -51,6 +50,26 @@ abstract class AbstractFirDiagnosticTestBase(val parser: FirParser) : AbstractKo
}
}
@Jdk21Test
abstract class AbstractFirPsiJdk21DiagnosticTest : AbstractFirDiagnosticTestBase(FirParser.Psi) {
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
builder.defaultDirectives {
JDK_KIND with TestJdkKind.FULL_JDK_21
}
}
}
@Jdk21Test
abstract class AbstractFirLightTreeJdk21DiagnosticTest : AbstractFirDiagnosticTestBase(FirParser.LightTree) {
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
builder.defaultDirectives {
JDK_KIND with TestJdkKind.FULL_JDK_21
}
}
}
abstract class AbstractFirPsiDiagnosticTest : AbstractFirDiagnosticTestBase(FirParser.Psi)
abstract class AbstractFirLightTreeDiagnosticsTest : AbstractFirDiagnosticTestBase(FirParser.LightTree) {
override fun configure(builder: TestConfigurationBuilder) {
@@ -0,0 +1,23 @@
/*
* 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.test.runners
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
@Jdk21Test
abstract class AbstractJdk21DiagnosticTest : AbstractDiagnosticTest() {
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
builder.defaultDirectives {
JvmEnvironmentConfigurationDirectives.JDK_KIND with TestJdkKind.FULL_JDK_21
+ConfigurationDirectives.WITH_STDLIB
+JvmEnvironmentConfigurationDirectives.WITH_REFLECT
}
}
}
@@ -0,0 +1,15 @@
/*
* 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.test.runners
import org.junit.jupiter.api.Tag
/**
* This tag is only necessary while JDK 21 is not released, so cannot be obtained via toolchain.
* See KT-58765 for tracking
*/
@Tag("Jdk21Test")
annotation class Jdk21Test
@@ -135,6 +135,7 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
TestJdkKind.FULL_JDK_6 -> File(System.getenv("JDK_16") ?: error("Environment variable JDK_16 is not set"))
TestJdkKind.FULL_JDK_11 -> KtTestUtil.getJdk11Home()
TestJdkKind.FULL_JDK_17 -> KtTestUtil.getJdk17Home()
TestJdkKind.FULL_JDK_21 -> KtTestUtil.getJdk21Home()
TestJdkKind.FULL_JDK -> if (JavaVersion.current() >= JavaVersion.compose(9)) File(System.getProperty("java.home")) else null
TestJdkKind.ANDROID_API -> null
}
@@ -146,6 +147,7 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
TestJdkKind.FULL_JDK_6 -> null
TestJdkKind.FULL_JDK_11 -> null
TestJdkKind.FULL_JDK_17 -> null
TestJdkKind.FULL_JDK_21 -> null
TestJdkKind.FULL_JDK -> null
}
}
@@ -197,6 +199,7 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
TestJdkKind.FULL_JDK_6 -> {}
TestJdkKind.FULL_JDK_11 -> {}
TestJdkKind.FULL_JDK_17 -> {}
TestJdkKind.FULL_JDK_21 -> {}
TestJdkKind.FULL_JDK -> {}
}
@@ -197,6 +197,9 @@ public class KotlinTestUtils {
else if (jdkKind == TestJdkKind.FULL_JDK_17) {
configuration.put(JVMConfigurationKeys.JDK_HOME, KtTestUtil.getJdk17Home());
}
else if (jdkKind == TestJdkKind.FULL_JDK_21) {
configuration.put(JVMConfigurationKeys.JDK_HOME, KtTestUtil.getJdk21Home());
}
else if (JavaVersion.current().compareTo(JavaVersion.compose(9)) >= 0) {
configuration.put(JVMConfigurationKeys.JDK_HOME, new File(System.getProperty("java.home")));
}
@@ -10,8 +10,11 @@ import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.runners.*
import org.jetbrains.kotlin.test.runners.codegen.*
import org.jetbrains.kotlin.test.runners.ir.*
import org.jetbrains.kotlin.test.runners.ir.interpreter.*
import org.jetbrains.kotlin.test.runners.ir.AbstractClassicJvmIrTextTest
import org.jetbrains.kotlin.test.runners.ir.AbstractFirLightTreeJvmIrTextTest
import org.jetbrains.kotlin.test.runners.ir.AbstractFirPsiJvmIrTextTest
import org.jetbrains.kotlin.test.runners.ir.interpreter.AbstractJvmIrInterpreterAfterFirPsi2IrTest
import org.jetbrains.kotlin.test.runners.ir.interpreter.AbstractJvmIrInterpreterAfterPsi2IrTest
import org.jetbrains.kotlin.test.utils.CUSTOM_TEST_DATA_EXTENSION_PATTERN
import org.jetbrains.kotlin.visualizer.fir.AbstractFirVisualizerTest
import org.jetbrains.kotlin.visualizer.psi.AbstractPsiVisualizerTest
@@ -26,6 +29,10 @@ fun generateJUnit5CompilerTests(args: Array<String>) {
model("diagnostics/testsWithStdLib", excludedPattern = excludedCustomTestdataPattern)
}
testClass<AbstractJdk21DiagnosticTest> {
model("diagnostics/testsWithJdk21", excludedPattern = excludedCustomTestdataPattern)
}
testClass<AbstractDiagnosticUsingJavacTest> {
model("diagnostics/tests/javac", pattern = "^(.*)\\.kts?$", excludedPattern = excludedCustomTestdataPattern)
}
@@ -209,6 +216,14 @@ fun generateJUnit5CompilerTests(args: Array<String>) {
model("diagnostics/testsWithStdLib", excludedPattern = excludedCustomTestdataPattern)
}
testClass<AbstractFirPsiJdk21DiagnosticTest> {
model("diagnostics/testsWithJdk21", excludedPattern = excludedCustomTestdataPattern)
}
testClass<AbstractFirLightTreeJdk21DiagnosticTest> {
model("diagnostics/testsWithJdk21", excludedPattern = excludedCustomTestdataPattern)
}
testClass<AbstractFirPsiWithActualizerDiagnosticsTest>(suiteTestClassName = "FirOldFrontendMPPDiagnosticsWithPsiTestGenerated") {
model("diagnostics/tests/multiplatform", pattern = "^(.*)\\.kts?$", excludedPattern = excludedCustomTestdataPattern)
}
@@ -75,6 +75,7 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment()
}
}
// TODO: Get rid of it once JDK 21 is released (KT-58765 for tracking)
private val LATE_JDK_SIGNATURES = mapOf(
"java/util/List" to setOf(
// From JDK 21