K2: add JavaModulesIntegrationTest

#KT-60797
This commit is contained in:
Alexander Udalov
2023-08-10 22:17:59 +02:00
committed by Space Team
parent b1fb5bdde1
commit 4e706ba93e
5 changed files with 62 additions and 12 deletions
@@ -0,0 +1,7 @@
compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt:11:12: error: unresolved reference: javax.swing.JFrame
val s: javax.swing.JFrame? = null
^
compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt:12:5: error: overload resolution ambiguity between candidates: [@InlineOnly() fun println(message: Any?): Unit, @InlineOnly() fun println(message: Boolean): Unit, @InlineOnly() fun println(message: Byte): Unit, ...]
println(s)
^
COMPILATION_ERROR
@@ -0,0 +1,4 @@
compiler/testData/javaModules/releaseFlag/moduleSwing/foo/Foo.kt:5:12: error: unresolved reference: javax.swing.JFrame
val z: javax.swing.JFrame? = null
^
COMPILATION_ERROR
@@ -0,0 +1,22 @@
/*
* 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.jvm.modules
import org.jetbrains.kotlin.config.LanguageVersion
import java.io.File
abstract class AbstractFirJavaModulesIntegrationTest(jdkVersion: Int, jdkHome: File) : AbstractJavaModulesIntegrationTest(
jdkVersion, jdkHome, maxOf(LanguageVersion.KOTLIN_2_0, LanguageVersion.LATEST_STABLE),
) {
override fun muteForK2(test: () -> Unit) {
try {
test()
} catch (e: Throwable) {
return
}
fail("Looks like this test can be unmuted. Remove the call to `muteForK2`.")
}
}
@@ -9,6 +9,7 @@ import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.cli.AbstractCliTest
import org.jetbrains.kotlin.cli.AbstractCliTest.getNormalizedCompilerOutput
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.jvm.compiler.AbstractKotlinCompilerIntegrationTest
import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File
@@ -16,11 +17,18 @@ import java.util.concurrent.TimeUnit
import java.util.jar.Manifest
import kotlin.test.fail
abstract class AbstractJavaModulesIntegrationTest(private val jdkVersion: Int, private val jdkHome: File) :
AbstractKotlinCompilerIntegrationTest() {
abstract class AbstractJavaModulesIntegrationTest(
private val jdkVersion: Int,
private val jdkHome: File,
private val languageVersion: LanguageVersion,
) : AbstractKotlinCompilerIntegrationTest() {
override val testDataPath: String
get() = "compiler/testData/javaModules/"
protected open fun muteForK2(test: () -> Unit) {
test()
}
private fun module(
name: String,
modulePath: List<File> = emptyList(),
@@ -33,7 +41,8 @@ abstract class AbstractJavaModulesIntegrationTest(private val jdkVersion: Int, p
val kotlinOptions = mutableListOf(
"-jdk-home", jdkHome.path,
"-Xmodule-path=$paths"
"-Xmodule-path=$paths",
"-language-version", languageVersion.versionString,
)
if (addModules.isNotEmpty()) {
kotlinOptions += "-Xadd-modules=${addModules.joinToString()}"
@@ -61,11 +70,10 @@ abstract class AbstractJavaModulesIntegrationTest(private val jdkVersion: Int, p
private fun checkKotlinOutput(moduleName: String): (String) -> Unit {
val expectedFile =
File(testDataDirectory, "$moduleName.$jdkVersion.txt").takeIf { it.exists() } ?: File(testDataDirectory, "$moduleName.txt")
val expectedFirFile = File(testDataDirectory, "$moduleName.fir.txt")
return { actual ->
KotlinTestUtils.assertEqualsToFile(
expectedFile,
if (languageVersion.usesK2 && expectedFirFile.exists()) expectedFirFile else File(testDataDirectory, "$moduleName.txt"),
getNormalizedCompilerOutput(actual, null, testDataPath, tmpdir.absolutePath)
.replace((System.getenv("JDK_11_0") ?: System.getenv("JDK_11")).replace("\\", "/"), "\$JDK11")
.replace((System.getenv("JDK_17_0") ?: System.getenv("JDK_17")).replace("\\", "/"), "\$JDK17")
@@ -113,7 +121,8 @@ abstract class AbstractJavaModulesIntegrationTest(private val jdkVersion: Int, p
module("moduleB", listOf(a))
}
fun testSimpleUseNonExportedPackage() {
// TODO (KT-60797): missing JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE.
fun testSimpleUseNonExportedPackage() = muteForK2 {
val a = module("moduleA")
module("moduleB", listOf(a))
}
@@ -125,7 +134,8 @@ abstract class AbstractJavaModulesIntegrationTest(private val jdkVersion: Int, p
module("moduleD", listOf(a, b, c))
}
fun testUnnamedDependsOnNamed() {
// TODO (KT-60797): missing JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE.
fun testUnnamedDependsOnNamed() = muteForK2 {
val a = module("moduleA")
module("moduleB", listOf(a), listOf("moduleA"))
@@ -155,7 +165,8 @@ abstract class AbstractJavaModulesIntegrationTest(private val jdkVersion: Int, p
module("moduleB", listOf(module("moduleA")), addModules = emptyList())
}
fun testReleaseFlagWrongValue() {
// TODO (KT-61156): do not try to run compilation if there were errors during calculation of Java module graph.
fun testReleaseFlagWrongValue() = muteForK2 {
module("module5", additionalKotlinArguments = listOf("-Xjdk-release=5"), checkKotlinOutput = { output ->
assertTrue(output, "error: unknown JDK release version: 5" in output)
assertTrue(output, "error: unknown JVM target version: 5" in output)
@@ -165,7 +176,8 @@ abstract class AbstractJavaModulesIntegrationTest(private val jdkVersion: Int, p
}
}
fun testAutomaticModuleInternalJdkPackageUsage() {
// TODO (KT-60797): missing JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE.
fun testAutomaticModuleInternalJdkPackageUsage() = muteForK2 {
module("jvmStatUsage")
}
@@ -5,8 +5,13 @@
package org.jetbrains.kotlin.jvm.modules
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.test.util.KtTestUtil
class Java11ModulesIntegrationTest : AbstractJavaModulesIntegrationTest(11, KtTestUtil.getJdk11Home())
class Java11ModulesIntegrationTest : AbstractJavaModulesIntegrationTest(11, KtTestUtil.getJdk11Home(), LanguageVersion.KOTLIN_1_9)
class Java17ModulesIntegrationTest : AbstractJavaModulesIntegrationTest(17, KtTestUtil.getJdk17Home())
class Java17ModulesIntegrationTest : AbstractJavaModulesIntegrationTest(17, KtTestUtil.getJdk17Home(), LanguageVersion.KOTLIN_1_9)
class FirJava11ModulesIntegrationTest : AbstractFirJavaModulesIntegrationTest(11, KtTestUtil.getJdk11Home())
class FirJava17ModulesIntegrationTest : AbstractFirJavaModulesIntegrationTest(17, KtTestUtil.getJdk17Home())