Implement support for new script customizations in command line compiler

refactor and fix internals in many places to make it work
add appropriate tests for main-kts case
This commit is contained in:
Ilya Chernikov
2019-07-01 13:41:08 +02:00
parent 1ab255eafb
commit dc4370ff08
23 changed files with 477 additions and 272 deletions
@@ -7,8 +7,10 @@ plugins {
dependencies {
testCompile(project(":kotlin-main-kts"))
testCompileOnly(project(":compiler:cli"))
testCompile(project(":kotlin-scripting-jvm-host-embeddable"))
testCompile(commonDep("junit"))
testCompile(projectTests(":kotlin-scripting-compiler")) { isTransitive = false }
}
sourceSets {
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.mainKts.test
import junit.framework.Assert.*
import org.jetbrains.kotlin.scripting.compiler.plugin.runWithK2JVMCompiler
import org.junit.Test
import java.io.File
import java.io.InputStream
@@ -71,9 +72,7 @@ class mainKtsIT {
assertFalse("stderr thread not finished", stderrThread.isAlive)
assertNull(stderrException.value)
assertEquals(expectedOutPatterns.size, processOut.size)
for (i in 0 until expectedOutPatterns.size) {
val expectedPattern = expectedOutPatterns[i]
val actualLine = processOut[i]
for ((expectedPattern, actualLine) in expectedOutPatterns.zip(processOut)) {
assertTrue(
"line \"$actualLine\" do not match with expected pattern \"$expectedPattern\"",
Regex(expectedPattern).matches(actualLine)
@@ -92,4 +91,9 @@ class mainKtsIT {
fun testResolveJunit() {
runWithKotlinc("$TEST_DATA_ROOT/hello-resolve-junit.main.kts", listOf("Hello, World!"))
}
@Test
fun testImport() {
runWithK2JVMCompiler("$TEST_DATA_ROOT/import-test.main.kts", listOf("Hi from common", "Hi from middle", "sharedVar == 5"))
}
}
@@ -23,7 +23,11 @@ import kotlin.script.experimental.jvm.jvm
import kotlin.script.experimental.jvm.updateClasspath
@Suppress("unused")
@KotlinScript(fileExtension = "main.kts", compilationConfiguration = MainKtsScriptDefinition::class)
@KotlinScript(
fileExtension = "main.kts",
compilationConfiguration = MainKtsScriptDefinition::class,
evaluationConfiguration = MainKtsEvaluationConfiguration::class
)
abstract class MainKtsScript(val args: Array<String>)
object MainKtsScriptDefinition : ScriptCompilationConfiguration(
@@ -40,6 +44,12 @@ object MainKtsScriptDefinition : ScriptCompilationConfiguration(
}
})
object MainKtsEvaluationConfiguration : ScriptEvaluationConfiguration(
{
scriptsInstancesSharing(true)
}
)
class MainKtsConfigurator : RefineScriptCompilationConfigurationHandler {
private val resolver = FilesAndIvyResolver()