Tests: rewrite some AbstractScriptConfigurationTest to the new script infrastructure

This commit is contained in:
Natalia Selezneva
2019-09-23 10:49:48 +03:00
parent eca7bbdb8c
commit 63e5d4fe95
3 changed files with 91 additions and 37 deletions
+47 -15
View File
@@ -1,23 +1,55 @@
package org.jetbrains.kotlin.idea.script package org.jetbrains.kotlin.idea.script
import java.io.File import java.io.File
import kotlin.script.dependencies.* import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.dependencies.* import kotlin.script.experimental.api.*
import kotlin.script.experimental.location.* import kotlin.script.experimental.host.ScriptingHostConfiguration
import kotlin.script.templates.ScriptTemplateDefinition import kotlin.script.experimental.host.ScriptingHostConfigurationKeys
import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.dependenciesFromClassContext
import kotlin.script.experimental.jvm.jdkHome
import kotlin.script.experimental.jvm.jvm
import kotlin.script.experimental.util.PropertiesCollection
@KotlinScript(
displayName = "Definition for tests",
fileExtension = "kts",
compilationConfiguration = TemplateDefinition::class
)
open class Template(val args: Array<String>)
val ScriptingHostConfigurationKeys.getEnvironment by PropertiesCollection.key<() -> Map<String, Any?>?>()
class FromTextDependenciesResolver : DependenciesResolver {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
override fun resolve(scriptContents: ScriptContents, environment: Environment): DependenciesResolver.ResolveResult { object TemplateDefinition : ScriptCompilationConfiguration(
return ScriptDependencies( {
javaHome = environment["javaHome"] as? File, jvm {
classpath = (environment["classpath"] as? List<File>).orEmpty(), dependenciesFromClassContext(TemplateDefinition::class)
imports = (environment["imports"] as? List<String>).orEmpty(),
sources = (environment["sources"] as? List<File>).orEmpty()
).asSuccess()
} }
ide {
acceptedLocations(ScriptAcceptedLocation.Everywhere)
} }
refineConfiguration {
beforeCompiling { context ->
val environment = context.compilationConfiguration[ScriptCompilationConfiguration.hostConfiguration]?.let {
it[ScriptingHostConfiguration.getEnvironment]?.invoke()
}.orEmpty()
@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere]) context.compilationConfiguration.with {
@ScriptTemplateDefinition(FromTextDependenciesResolver::class, scriptFilePattern = "script.kts") (environment["javaHome"] as? File)?.let {
open class Template jvm.jdkHome(it)
}
(environment["imports"] as? List<String>)?.let {
defaultImports(it)
}
(environment["classpath"] as? List<File>)?.let {
dependencies(JvmDependency(it))
}
(environment["sources"] as? List<File>)?.let {
ide.dependenciesSources(JvmDependency(it))
}
}.asSuccess()
}
}
}
)
@@ -1,24 +1,37 @@
package custom.scriptDefinition package custom.scriptDefinition
import java.io.File import java.io.File
import kotlin.script.dependencies.* import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.dependencies.* import kotlin.script.experimental.api.*
import kotlin.script.templates.ScriptTemplateDefinition import kotlin.script.experimental.host.ScriptingHostConfiguration
import kotlin.script.experimental.location.* import kotlin.script.experimental.host.ScriptingHostConfigurationKeys
import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.util.PropertiesCollection
class TestDependenciesResolver : DependenciesResolver { @KotlinScript(
override fun resolve( fileExtension = "kts",
scriptContents: ScriptContents, compilationConfiguration = TemplateDefinition::class
environment: Environment
): DependenciesResolver.ResolveResult {
return DependenciesResolver.ResolveResult.Success(
ScriptDependencies(
classpath = listOf(environment["template-classes"] as File)
)
) )
open class Template(val args: Array<String>)
val ScriptingHostConfigurationKeys.getEnvironment by PropertiesCollection.key<() -> Map<String, Any?>?>()
object TemplateDefinition : ScriptCompilationConfiguration(
{
refineConfiguration {
beforeCompiling { context ->
val environment =
context.compilationConfiguration[ScriptCompilationConfiguration.hostConfiguration]?.let {
it[ScriptingHostConfiguration.getEnvironment]?.invoke()
}.orEmpty()
context.compilationConfiguration.with {
dependencies(JvmDependency(environment["template-classes"] as File))
}.asSuccess()
} }
} }
ide {
@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere]) acceptedLocations(ScriptAcceptedLocation.Everywhere)
@ScriptTemplateDefinition(TestDependenciesResolver::class, scriptFilePattern = "script.kts") }
open class Template }
)
@@ -136,6 +136,8 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
createFileAndSyncDependencies(mainScriptFile) createFileAndSyncDependencies(mainScriptFile)
} }
private val oldScripClasspath: String? = System.getProperty("kotlin.script.classpath")
override fun setUp() { override fun setUp() {
super.setUp() super.setUp()
ApplicationManager.getApplication().isScriptDependenciesUpdaterDisabled = true ApplicationManager.getApplication().isScriptDependenciesUpdaterDisabled = true
@@ -143,6 +145,9 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
override fun tearDown() { override fun tearDown() {
ApplicationManager.getApplication().isScriptDependenciesUpdaterDisabled = false ApplicationManager.getApplication().isScriptDependenciesUpdaterDisabled = false
System.setProperty("kotlin.script.classpath", oldScripClasspath ?: "")
super.tearDown() super.tearDown()
} }
@@ -217,6 +222,10 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
compileLibToDir(it, *scriptClasspath()) compileLibToDir(it, *scriptClasspath())
} }
if (templateOutDir != null) {
System.setProperty("kotlin.script.classpath", templateOutDir.path)
}
val libSrcDir = File("${path}lib").takeIf { it.isDirectory } val libSrcDir = File("${path}lib").takeIf { it.isDirectory }
val libClasses = libSrcDir?.let { compileLibToDir(it) } val libClasses = libSrcDir?.let { compileLibToDir(it) }