Fix AbstractScriptConfigurationTest

Add dependency on script runtime for module.
Provide default test script template thought template-classpath.
This commit is contained in:
Natalia Selezneva
2018-07-09 14:52:53 +03:00
committed by Ilya Chernikov
parent 790188120a
commit 5741f81f25
3 changed files with 45 additions and 30 deletions
@@ -0,0 +1,22 @@
package org.jetbrains.kotlin.idea.script
import java.io.File
import kotlin.script.dependencies.*
import kotlin.script.experimental.dependencies.*
import kotlin.script.experimental.location.*
import kotlin.script.templates.ScriptTemplateDefinition
class FromTextDependenciesResolver : AsyncDependenciesResolver {
@Suppress("UNCHECKED_CAST")
suspend override fun resolveAsync(scriptContents: ScriptContents, environment: Environment): DependenciesResolver.ResolveResult {
return ScriptDependencies(
classpath = (environment["classpath"] as? List<File>).orEmpty(),
imports = (environment["imports"] as? List<String>).orEmpty(),
sources = (environment["sources"] as? List<File>).orEmpty()
).asSuccess()
}
}
@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere])
@ScriptTemplateDefinition(FromTextDependenciesResolver::class, scriptFilePattern = "script.kts")
open class Template
@@ -157,6 +157,24 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
module.addDependency(projectLibrary("sharedLib", classesRoot = sharedLib))
}
if (module != null) {
module.addDependency(
projectLibrary(
"script-runtime",
classesRoot = VfsUtil.findFileByIoFile(PathUtil.kotlinPathsForDistDirectory.scriptRuntimePath, true)
)
)
if (environment["template-classes"] != null) {
module.addDependency(
projectLibrary(
"script-template-library",
classesRoot = VfsUtil.findFileByIoFile(environment["template-classes"] as File, true)
)
)
}
}
createFileAndSyncDependencies(mainScriptFile)
}
@@ -192,9 +210,7 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
}
}
}
if (env[useDefaultTemplate] == true && defaultEnvironment["template-classes"] != null) {
error("Script configuration should be defined by either '$useDefaultTemplate' clause or via template in 'template' directory")
}
env.putAll(defaultEnvironment)
return env
}
@@ -202,6 +218,8 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
private fun defaultEnvironment(path: String): Map<String, File?> {
val templateOutDir = File("${path}template").takeIf { it.isDirectory }?.let {
compileLibToDir(it, PathUtil.kotlinPathsForDistDirectory.scriptRuntimePath.path)
} ?: File("idea/testData/script/definition/defaultTemplate").takeIf { it.isDirectory }?.let {
compileLibToDir(it, PathUtil.kotlinPathsForDistDirectory.scriptRuntimePath.path)
}
val libSrcDir = File("${path}lib").takeIf { it.isDirectory }
@@ -20,14 +20,6 @@ import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionContributor
import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates
import java.io.File
import kotlin.script.dependencies.Environment
import kotlin.script.dependencies.ScriptContents
import kotlin.script.experimental.dependencies.AsyncDependenciesResolver
import kotlin.script.experimental.dependencies.DependenciesResolver
import kotlin.script.experimental.dependencies.ScriptDependencies
import kotlin.script.experimental.dependencies.asSuccess
import kotlin.script.experimental.location.ScriptExpectedLocation
import kotlin.script.experimental.location.ScriptExpectedLocations
import kotlin.script.templates.ScriptTemplateDefinition
class CustomScriptTemplateProvider(
@@ -49,24 +41,7 @@ class FromTextTemplateProvider(
override val id = "Test"
override fun getDefinitions() = loadDefinitionsFromTemplates(
templateClassNames = listOf("org.jetbrains.kotlin.idea.script.Template"),
templateClasspath = emptyList(),
templateClasspath = listOfNotNull(environment["template-classes"] as? File),
environment = environment
)
}
class FromTextDependenciesResolver : AsyncDependenciesResolver {
@Suppress("UNCHECKED_CAST")
suspend override fun resolveAsync(scriptContents: ScriptContents, environment: Environment): DependenciesResolver.ResolveResult {
return ScriptDependencies(
classpath = (environment["classpath"] as? List<File>).orEmpty(),
imports = (environment["imports"] as? List<String>).orEmpty(),
sources = (environment["sources"] as? List<File>).orEmpty()
).asSuccess()
}
}
@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere])
@Suppress("unused")
@ScriptTemplateDefinition(FromTextDependenciesResolver::class, scriptFilePattern = "script.kts")
class Template
}