Implement IR backend support in scripting tests, enable for some tests
This commit is contained in:
+3
-1
@@ -729,7 +729,8 @@ tasks {
|
||||
register("scriptingTest") {
|
||||
dependsOn("dist")
|
||||
dependsOn(":kotlin-script-util:test")
|
||||
dependsOn(":kotlin-scripting-compiler-embeddable:test")
|
||||
dependsOn(":kotlin-scripting-compiler:test")
|
||||
dependsOn(":kotlin-scripting-compiler:testWithIr")
|
||||
dependsOn(":kotlin-scripting-common:test")
|
||||
dependsOn(":kotlin-scripting-jvm:test")
|
||||
dependsOn(":kotlin-scripting-jvm-host-test:test")
|
||||
@@ -740,6 +741,7 @@ tasks {
|
||||
// dependsOn(":kotlin-scripting-jvm-host-test:embeddableTest")
|
||||
dependsOn(":kotlin-scripting-jsr223-test:embeddableTest")
|
||||
dependsOn(":kotlin-main-kts-test:test")
|
||||
dependsOn(":kotlin-main-kts-test:testWithIr")
|
||||
dependsOn(":kotlin-scripting-ide-services-test:test")
|
||||
dependsOn(":kotlin-scripting-ide-services-test:embeddableTest")
|
||||
dependsOn(":kotlin-scripting-js-test:test")
|
||||
|
||||
@@ -24,3 +24,9 @@ projectTest(parallel = true) {
|
||||
dependsOn(":dist")
|
||||
workingDir = rootDir
|
||||
}
|
||||
|
||||
projectTest(taskName = "testWithIr", parallel = true) {
|
||||
dependsOn(":dist")
|
||||
workingDir = rootDir
|
||||
systemProperty("kotlin.script.test.base.compiler.arguments", "-Xuse-ir")
|
||||
}
|
||||
|
||||
@@ -62,3 +62,11 @@ projectTest(parallel = true) {
|
||||
workingDir = rootDir
|
||||
systemProperty("kotlin.test.script.classpath", testSourceSet.output.classesDirs.joinToString(File.pathSeparator))
|
||||
}
|
||||
|
||||
projectTest(taskName = "testWithIr", parallel = true) {
|
||||
dependsOn(":dist")
|
||||
workingDir = rootDir
|
||||
systemProperty("kotlin.test.script.classpath", testSourceSet.output.classesDirs.joinToString(File.pathSeparator))
|
||||
systemProperty("kotlin.script.test.base.compiler.arguments", "-Xuse-ir")
|
||||
}
|
||||
|
||||
|
||||
+30
-19
@@ -163,29 +163,40 @@ private fun CompilerConfiguration.updateWithCompilerOptions(
|
||||
messageCollector: ScriptDiagnosticsMessageCollector,
|
||||
ignoredOptionsReportingState: IgnoredOptionsReportingState,
|
||||
isRefinement: Boolean
|
||||
) {
|
||||
updateWithCompilerOptions(compilerOptions) {
|
||||
validateArguments(it.errors)?.let { error ->
|
||||
messageCollector.report(CompilerMessageSeverity.ERROR, error)
|
||||
false
|
||||
} ?: run {
|
||||
messageCollector.reportArgumentParseProblems(it)
|
||||
reportArgumentsIgnoredGenerally(
|
||||
it,
|
||||
messageCollector,
|
||||
ignoredOptionsReportingState
|
||||
)
|
||||
if (isRefinement) {
|
||||
reportArgumentsIgnoredFromRefinement(
|
||||
it,
|
||||
messageCollector,
|
||||
ignoredOptionsReportingState
|
||||
)
|
||||
}
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun CompilerConfiguration.updateWithCompilerOptions(
|
||||
compilerOptions: List<String>,
|
||||
validate: (K2JVMCompilerArguments) -> Boolean = {
|
||||
validateArguments(it.errors)?.let { throw Exception("Error parsing arguments: $it") } ?: true
|
||||
}
|
||||
) {
|
||||
val compilerArguments = K2JVMCompilerArguments()
|
||||
parseCommandLineArguments(compilerOptions, compilerArguments)
|
||||
|
||||
validateArguments(compilerArguments.errors)?.let {
|
||||
messageCollector.report(CompilerMessageSeverity.ERROR, it)
|
||||
return
|
||||
}
|
||||
|
||||
messageCollector.reportArgumentParseProblems(compilerArguments)
|
||||
|
||||
reportArgumentsIgnoredGenerally(
|
||||
compilerArguments,
|
||||
messageCollector,
|
||||
ignoredOptionsReportingState
|
||||
)
|
||||
if (isRefinement) {
|
||||
reportArgumentsIgnoredFromRefinement(
|
||||
compilerArguments,
|
||||
messageCollector,
|
||||
ignoredOptionsReportingState
|
||||
)
|
||||
}
|
||||
if (!validate(compilerArguments)) return
|
||||
|
||||
processPluginsCommandLine(compilerArguments)
|
||||
|
||||
|
||||
+2
-1
@@ -11,8 +11,8 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoots
|
||||
import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
@@ -65,6 +65,7 @@ class ScriptingCompilerPluginTest : TestCase() {
|
||||
confBody: CompilerConfiguration.() -> Unit
|
||||
): KotlinCoreEnvironment {
|
||||
val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.FULL_JDK).apply {
|
||||
updateWithBaseCompilerArguments()
|
||||
put<MessageCollector>(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
|
||||
addKotlinSourceRoots(sources)
|
||||
put(JVMConfigurationKeys.OUTPUT_DIRECTORY, destDir)
|
||||
|
||||
+15
-1
@@ -9,6 +9,8 @@ import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import org.jetbrains.kotlin.cli.common.CLITool
|
||||
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.updateWithCompilerOptions
|
||||
import org.junit.Assert
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.File
|
||||
@@ -18,6 +20,11 @@ import java.nio.file.Files
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.concurrent.thread
|
||||
|
||||
const val SCRIPT_TEST_BASE_COMPILER_ARGUMENTS_PROPERTY = "kotlin.script.test.base.compiler.arguments"
|
||||
|
||||
private fun getBaseCompilerArgumentsFromProperty(): List<String>? =
|
||||
System.getProperty(SCRIPT_TEST_BASE_COMPILER_ARGUMENTS_PROPERTY)?.takeIf { it.isNotBlank() }?.split(' ')
|
||||
|
||||
// TODO: partially copypasted from LauncherReplTest, consider extracting common parts to some (new) test util module
|
||||
fun runWithKotlinc(
|
||||
scriptPath: String,
|
||||
@@ -52,6 +59,7 @@ fun runWithKotlinLauncherScript(
|
||||
add("-cp")
|
||||
add(classpath.joinToString(File.pathSeparator))
|
||||
}
|
||||
getBaseCompilerArgumentsFromProperty()?.let { addAll(it) }
|
||||
addAll(compilerArgs)
|
||||
}
|
||||
|
||||
@@ -161,10 +169,11 @@ fun runWithK2JVMCompiler(
|
||||
expectedExitCode: Int = 0,
|
||||
expectedSomeErrPatterns: List<String>? = null
|
||||
) {
|
||||
val argsWithBasefromProp = getBaseCompilerArgumentsFromProperty()?.let { (it + args).toTypedArray() } ?: args
|
||||
val (out, err, ret) = captureOutErrRet {
|
||||
CLITool.doMainNoExit(
|
||||
K2JVMCompiler(),
|
||||
args
|
||||
argsWithBasefromProp
|
||||
)
|
||||
}
|
||||
try {
|
||||
@@ -243,4 +252,9 @@ class TestDisposable : Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
fun CompilerConfiguration.updateWithBaseCompilerArguments() {
|
||||
getBaseCompilerArgumentsFromProperty()?.let {
|
||||
updateWithCompilerOptions(it)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
||||
import org.jetbrains.kotlin.script.loadScriptingPlugin
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.TestDisposable
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments
|
||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
@@ -58,6 +59,7 @@ class CollectScriptCompilationDependenciesTest : TestCase() {
|
||||
|
||||
private fun runTest(scriptFile: String, expectedDependencies: List<String>, classPath: List<File> = emptyList()) {
|
||||
val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.MOCK_JDK).apply {
|
||||
updateWithBaseCompilerArguments()
|
||||
add(
|
||||
ScriptingConfigurationKeys.SCRIPT_DEFINITIONS,
|
||||
ScriptDefinition.FromTemplate(
|
||||
|
||||
+2
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.script.loadScriptingPlugin
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.TestDisposable
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.ScriptJvmCompilerFromEnvironment
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments
|
||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
|
||||
@@ -94,6 +95,7 @@ class CompileTimeFibonacciTest : TestCase() {
|
||||
script: SourceCode
|
||||
): ResultWithDiagnostics<CompiledScript> {
|
||||
val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.FULL_JDK).apply {
|
||||
updateWithBaseCompilerArguments()
|
||||
val hostConfiguration = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration)
|
||||
add(
|
||||
ScriptingConfigurationKeys.SCRIPT_DEFINITIONS,
|
||||
|
||||
+2
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.scripting.compiler.plugin.TestDisposable
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.ScriptDiagnosticsMessageCollector
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.createCompilationContextFromEnvironment
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.getScriptKtFile
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments
|
||||
import org.jetbrains.kotlin.scripting.resolve.InvalidScriptResolverAnnotation
|
||||
import org.jetbrains.kotlin.scripting.resolve.getScriptCollectedData
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
@@ -99,6 +100,7 @@ class ConstructAnnotationTest : TestCase() {
|
||||
private fun annotations(filename: String, vararg classes: KClass<out Annotation>): ResultWithDiagnostics<List<Annotation>> {
|
||||
val file = File(testDataPath, filename)
|
||||
val compilationConfiguration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.MOCK_JDK).apply {
|
||||
updateWithBaseCompilerArguments()
|
||||
addKotlinSourceRoot(file.path)
|
||||
loadScriptingPlugin(this)
|
||||
}
|
||||
|
||||
+2
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.script.loadScriptingPlugin
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.TestDisposable
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.TestMessageCollector
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments
|
||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
@@ -67,6 +68,7 @@ class ScriptCliCompilationTest : TestCase() {
|
||||
val collector = TestMessageCollector()
|
||||
|
||||
val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.FULL_JDK).apply {
|
||||
updateWithBaseCompilerArguments()
|
||||
put(MESSAGE_COLLECTOR_KEY, collector)
|
||||
if (scriptDef != null) {
|
||||
val hostConfiguration = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration) {
|
||||
|
||||
+2
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.script.loadScriptingPlugin
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.TestMessageCollector
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.assertHasMessage
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments
|
||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
@@ -368,6 +369,7 @@ class ScriptTemplateTest : TestCase() {
|
||||
TestJdkKind.FULL_JDK,
|
||||
*additionalClasspath
|
||||
)
|
||||
configuration.updateWithBaseCompilerArguments()
|
||||
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
|
||||
configuration.add(
|
||||
ScriptingConfigurationKeys.SCRIPT_DEFINITIONS,
|
||||
|
||||
+2
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.codegen.CompilationException
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
import org.jetbrains.kotlin.script.loadScriptingPlugin
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments
|
||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
@@ -118,6 +119,7 @@ class ScriptTest : TestCase() {
|
||||
val rootDisposable = Disposer.newDisposable()
|
||||
try {
|
||||
val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.ALL, TestJdkKind.FULL_JDK)
|
||||
configuration.updateWithBaseCompilerArguments()
|
||||
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
|
||||
configuration.add(
|
||||
ScriptingConfigurationKeys.SCRIPT_DEFINITIONS,
|
||||
|
||||
Reference in New Issue
Block a user