diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt index e47858972ea..9be530aaa04 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt @@ -59,12 +59,12 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator { updatedEvalConfiguration[ScriptEvaluationConfiguration.constructorArgs]?.let { args.addAll(it) } - actualEvaluationConfiguration[ScriptEvaluationConfiguration.providedProperties]?.forEach { - args.add(it.value) - } actualEvaluationConfiguration[ScriptEvaluationConfiguration.implicitReceivers]?.let { args.addAll(it) } + actualEvaluationConfiguration[ScriptEvaluationConfiguration.providedProperties]?.forEach { + args.add(it.value) + } compiledScript.otherScripts.mapSuccess { invoke(it, updatedEvalConfiguration) diff --git a/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ConstructorArgumentOrderTest.kt b/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ConstructorArgumentOrderTest.kt new file mode 100644 index 00000000000..d26e2ed8e79 --- /dev/null +++ b/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ConstructorArgumentOrderTest.kt @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package kotlin.script.experimental.jvmhost.test + +import org.junit.Test +import kotlin.script.experimental.api.ResultWithDiagnostics +import kotlin.script.experimental.api.implicitReceivers +import kotlin.script.experimental.api.providedProperties +import kotlin.test.assertTrue + +class ConstructorArgumentsOrderTest { + + @Test + fun testScriptWithProvidedProperties() { + val res = evalString("""println(providedString)""") { + providedProperties("providedString" to "Hello Provided!") + } + + assertTrue( + res is ResultWithDiagnostics.Success, + "test failed:\n ${res.reports.joinToString("\n ") { it.message + if (it.exception == null) "" else ": ${it.exception}" }}" + ) + } + + @Test + fun testScriptWithImplicitReceiver() { + val res = evalString("""println(receiverString)""") { + implicitReceivers(ImplicitReceiverClass("Hello Receiver!")) + } + + assertTrue( + res is ResultWithDiagnostics.Success, + "test failed:\n ${res.reports.joinToString("\n ") { it.message + if (it.exception == null) "" else ": ${it.exception}" }}" + ) + } + + @Test + fun testScriptWithBoth() { + val res = evalString("""println(providedString + receiverString)""") { + providedProperties("providedString" to "Hello") + implicitReceivers(ImplicitReceiverClass(" Both!")) + } + + assertTrue( + res is ResultWithDiagnostics.Success, + "test failed:\n ${res.reports.joinToString("\n ") { it.message + if (it.exception == null) "" else ": ${it.exception}" }}" + ) + } +} diff --git a/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/TestScriptDefinitions.kt b/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/TestScriptDefinitions.kt new file mode 100644 index 00000000000..2eee41fe23f --- /dev/null +++ b/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/TestScriptDefinitions.kt @@ -0,0 +1,61 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package kotlin.script.experimental.jvmhost.test + +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.* +import kotlin.script.experimental.host.toScriptSource +import kotlin.script.experimental.jvm.dependenciesFromCurrentContext +import kotlin.script.experimental.jvm.jvm +import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost +import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate + +@KotlinScript(fileExtension = "withboth.kts", compilationConfiguration = ReceiverAndPropertiesConfiguration::class) +abstract class ScriptWithBoth + +@KotlinScript(fileExtension = "withproperties.kts", compilationConfiguration = ProvidedPropertiesConfiguration::class) +abstract class ScriptWithProvidedProperties + +@KotlinScript(fileExtension = "withreceiver.kts", compilationConfiguration = ImplicitReceiverConfiguration::class) +abstract class ScriptWithImplicitReceiver + +object ReceiverAndPropertiesConfiguration : ScriptCompilationConfiguration( + { + jvm { dependenciesFromCurrentContext(wholeClasspath = true) } + + providedProperties("providedString" to String::class) + + implicitReceivers(ImplicitReceiverClass::class) + } +) + +object ProvidedPropertiesConfiguration : ScriptCompilationConfiguration( + { + jvm { dependenciesFromCurrentContext(wholeClasspath = true) } + + providedProperties("providedString" to String::class) + } +) + +object ImplicitReceiverConfiguration : ScriptCompilationConfiguration( + { + jvm { dependenciesFromCurrentContext(wholeClasspath = true) } + + implicitReceivers(ImplicitReceiverClass::class) + } +) + +class ImplicitReceiverClass(val receiverString: String) + +inline fun evalString( + source: String, + noinline configure: ScriptEvaluationConfiguration.Builder.() -> Unit +): ResultWithDiagnostics { + val actualConfiguration = createJvmCompilationConfigurationFromTemplate() + return BasicJvmScriptingHost() + .eval(source.toScriptSource(), actualConfiguration, ScriptEvaluationConfiguration(configure)) +} +