diff --git a/libraries/scripting/jvm-host/build.gradle.kts b/libraries/scripting/jvm-host/build.gradle.kts index 4bcffa575de..749a155013a 100644 --- a/libraries/scripting/jvm-host/build.gradle.kts +++ b/libraries/scripting/jvm-host/build.gradle.kts @@ -16,11 +16,13 @@ dependencies { compile(project(":kotlin-script-util")) compileOnly(project(":compiler:cli")) compileOnly(intellijCoreDep()) + runtime(projectRuntimeJar(":kotlin-compiler")) + testCompile(commonDep("junit")) } sourceSets { "main" { projectDefault() } - "test" {} + "test" { projectDefault() } } kotlin.experimental.coroutines = Coroutines.ENABLE diff --git a/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt b/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt new file mode 100644 index 00000000000..ec3d05e7341 --- /dev/null +++ b/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2010-2018 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.Assert +import org.junit.Test +import java.io.ByteArrayOutputStream +import java.io.PrintStream +import kotlin.script.experimental.api.ResultWithDiagnostics +import kotlin.script.experimental.host.toScriptSource +import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost +import kotlin.script.experimental.jvmhost.createCompilationConfigurationFromTemplate +import kotlin.script.templates.standard.SimpleScriptTemplate + +class ScriptingHostTest { + + @Test + fun testSimpleUsage() { + val greeting = "Hello from script!" + val output = captureOut { + evalScript("println(\"$greeting\")") + }.trim() + Assert.assertEquals(greeting, output) + } +} + +internal fun evalScript(script: String) { + val compilationConfiguration = createCompilationConfigurationFromTemplate() + val res = BasicJvmScriptingHost().eval(script.toScriptSource(), compilationConfiguration, null) + if (res is ResultWithDiagnostics.Failure) { + throw Exception("Compilation/evaluation failed:\n ${res.reports.joinToString("\n ") { it.exception?.toString() ?: it.message }}") + } +} + +internal fun captureOut(body: () -> Unit): String { + val outStream = ByteArrayOutputStream() + val prevOut = System.out + System.setOut(PrintStream(outStream)) + try { + body() + } finally { + System.out.flush() + System.setOut(prevOut) + } + return outStream.toString() +}