From deb2d6d0244b1aa2555f7bd4d2f16eb423b699ff Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Thu, 17 Nov 2022 12:26:00 +0100 Subject: [PATCH] K2 Scripting: enable K2 tests in some test projects --- build.gradle.kts | 6 +++ .../scripting/jvm-host-test/build.gradle.kts | 6 +++ .../jvmhost/test/ScriptingHostTest.kt | 2 +- .../kotlin-main-kts-test/build.gradle.kts | 10 ++++- .../scripting-compiler/build.gradle.kts | 8 ++++ .../scripting/compiler/plugin/testUtil.kt | 2 +- .../compiler/test/ScriptCompilerTest.kt | 43 ++++++++++++++++++- 7 files changed, 72 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f3f59f1fddb..bc23f8ba34b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -671,6 +671,12 @@ tasks { dependsOn(":kotlin-scripting-ide-services-test:embeddableTest") } + register("scriptingK2Test") { + dependsOn(":kotlin-scripting-compiler:testWithK2") + dependsOn(":kotlin-scripting-jvm-host-test:testWithK2") + dependsOn(":kotlin-main-kts-test:testWithK2") + } + register("scriptingTest") { dependsOn("scriptingJvmTest") } diff --git a/libraries/scripting/jvm-host-test/build.gradle.kts b/libraries/scripting/jvm-host-test/build.gradle.kts index 1273bf177f9..10aa019a66d 100644 --- a/libraries/scripting/jvm-host-test/build.gradle.kts +++ b/libraries/scripting/jvm-host-test/build.gradle.kts @@ -59,3 +59,9 @@ projectTest(taskName = "testWithIr", parallel = true) { workingDir = rootDir systemProperty("kotlin.script.base.compiler.arguments", "-Xuse-ir") } + +projectTest(taskName = "testWithK2", parallel = true) { + dependsOn(":dist") + workingDir = rootDir + systemProperty("kotlin.script.base.compiler.arguments", "-Xuse-k2") +} diff --git a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt index 2f4b3b6c5de..480d0a58891 100644 --- a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt +++ b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt @@ -255,7 +255,7 @@ class ScriptingHostTest : TestCase() { } assertTrue(comp0 is ResultWithDiagnostics.Failure) val errors = comp0.reports.filter { it.severity == ScriptDiagnostic.Severity.ERROR } - assertTrue( errors.any { it.message == "Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?" }) + assertTrue( errors.any { it.message.contains( "Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type ") }) // runtime fun evalWith(evalConfig: ScriptEvaluationConfiguration) = diff --git a/libraries/tools/kotlin-main-kts-test/build.gradle.kts b/libraries/tools/kotlin-main-kts-test/build.gradle.kts index 74b8fb58d36..fe1c8c697f8 100644 --- a/libraries/tools/kotlin-main-kts-test/build.gradle.kts +++ b/libraries/tools/kotlin-main-kts-test/build.gradle.kts @@ -23,11 +23,17 @@ sourceSets { projectTest(parallel = true) { dependsOn(":dist") workingDir = rootDir - systemProperty("kotlin.script.test.base.compiler.arguments", "-Xuse-old-backend") + systemProperty("kotlin.script.base.compiler.arguments", "-Xuse-old-backend") } projectTest(taskName = "testWithIr", parallel = true) { dependsOn(":dist") workingDir = rootDir - systemProperty("kotlin.script.test.base.compiler.arguments", "-Xuse-ir") + systemProperty("kotlin.script.base.compiler.arguments", "-Xuse-ir") +} + +projectTest(taskName = "testWithK2", parallel = true) { + dependsOn(":dist") + workingDir = rootDir + systemProperty("kotlin.script.base.compiler.arguments", "-Xuse-k2") } diff --git a/plugins/scripting/scripting-compiler/build.gradle.kts b/plugins/scripting/scripting-compiler/build.gradle.kts index 7551a86a5cb..20c010705a2 100644 --- a/plugins/scripting/scripting-compiler/build.gradle.kts +++ b/plugins/scripting/scripting-compiler/build.gradle.kts @@ -73,3 +73,11 @@ projectTest(taskName = "testWithIr", parallel = true) { systemProperty("kotlin.script.test.base.compiler.arguments", "-Xuse-ir") } +projectTest(taskName = "testWithK2", 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-k2") + systemProperty("kotlin.script.base.compiler.arguments", "-Xuse-k2") +} + diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt index 2921360b257..2003fecf15b 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt @@ -22,7 +22,7 @@ import kotlin.concurrent.thread const val SCRIPT_TEST_BASE_COMPILER_ARGUMENTS_PROPERTY = "kotlin.script.test.base.compiler.arguments" -private fun getBaseCompilerArgumentsFromProperty(): List? = +internal fun getBaseCompilerArgumentsFromProperty(): List? = 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 diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptCompilerTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptCompilerTest.kt index 36e56132081..969dd2e512d 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptCompilerTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptCompilerTest.kt @@ -7,7 +7,9 @@ package org.jetbrains.kotlin.scripting.compiler.test import junit.framework.TestCase import kotlinx.coroutines.runBlocking +import org.jetbrains.kotlin.scripting.compiler.plugin.getBaseCompilerArgumentsFromProperty import org.jetbrains.kotlin.scripting.compiler.plugin.impl.ScriptJvmCompilerIsolated +import org.jetbrains.kotlin.utils.tryConstructClassFromStringArgs import kotlin.reflect.KClass import kotlin.reflect.KProperty import kotlin.reflect.full.createInstance @@ -32,6 +34,40 @@ class ScriptCompilerTest : TestCase() { assertTrue(res.reports.none { it.message.contains("nonsense") }) } + fun testSimpleVarAccess() { + val res = compileToClass( + """ + val x = 2 + val y = x + """.trimIndent().toScriptSource() + ) + + val kclass = res.valueOrThrow() + val scriptInstance = kclass.createInstance() + assertNotNull(scriptInstance) + } + + fun testLambdaWithProperty() { + val versionProperties = java.util.Properties() + "".reader().use { propInput -> + versionProperties.load(propInput) + } + val res = compileToClass( + """ + val versionProperties = java.util.Properties() + "".reader().use { propInput -> + val x = 1 + x.toString() + versionProperties.load(propInput) + } + """.trimIndent().toScriptSource() + ) + + val kclass = res.valueOrThrow() + val scriptInstance = kclass.createInstance() + assertNotNull(scriptInstance) + } + fun testTypeAliases() { val res = compileToClass( """ @@ -78,7 +114,12 @@ class ScriptCompilerTest : TestCase() { script: SourceCode, cfgBody: ScriptCompilationConfiguration.Builder.() -> Unit ): ResultWithDiagnostics { - val compilationConfiguration = ScriptCompilationConfiguration(cfgBody) + val compilationConfiguration = ScriptCompilationConfiguration { + cfgBody() + getBaseCompilerArgumentsFromProperty()?.let { + compilerOptions.append(it) + } + } val compiler = ScriptJvmCompilerIsolated(defaultJvmScriptingHostConfiguration) return compiler.compile(script, compilationConfiguration) }