Adapt ScriptGenTest to last changes
- Use script definitions created by script templates - Configure classpath before files were loaded
This commit is contained in:
@@ -16,37 +16,36 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.codegen
|
package org.jetbrains.kotlin.codegen
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider
|
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.scripts.SimpleParamsTestScriptDefinition
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.config.addKotlinSourceRoots
|
||||||
|
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromTemplate
|
||||||
|
import org.jetbrains.kotlin.script.ScriptTemplateDefinition
|
||||||
|
import org.jetbrains.kotlin.scripts.ScriptWithIntParam
|
||||||
|
import org.jetbrains.kotlin.scripts.TestKotlinScriptDependenciesResolver
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
|
import org.jetbrains.kotlin.test.TestJdkKind
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||||
|
|
||||||
class ScriptGenTest : CodegenTestCase() {
|
class ScriptGenTest : CodegenTestCase() {
|
||||||
companion object {
|
companion object {
|
||||||
private val FIB_SCRIPT_DEFINITION = SimpleParamsTestScriptDefinition(
|
private val FIB_SCRIPT_DEFINITION = KotlinScriptDefinitionFromTemplate(ScriptWithIntParam::class, scriptFilePattern = ".*\\.lang\\.kt")
|
||||||
".lang.kt",
|
private val NO_PARAM_SCRIPT_DEFINITION = KotlinScriptDefinitionFromTemplate(Any::class, scriptFilePattern = ".*\\.kts")
|
||||||
listOf(ScriptParameter(Name.identifier("num"), DefaultBuiltIns.Instance.intType))
|
|
||||||
)
|
|
||||||
private val NO_PARAM_SCRIPT_DEFINITION = SimpleParamsTestScriptDefinition(
|
|
||||||
".kts",
|
|
||||||
emptyList<ScriptParameter>()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUp() {
|
override fun setUp() {
|
||||||
super.setUp()
|
super.setUp()
|
||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY)
|
|
||||||
KotlinScriptDefinitionProvider.getInstance(myEnvironment.project).setScriptDefinitions(
|
|
||||||
listOf(FIB_SCRIPT_DEFINITION, NO_PARAM_SCRIPT_DEFINITION)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testLanguage() {
|
fun testLanguage() {
|
||||||
loadFile("scriptCustom/fib.lang.kt")
|
setUpEnvironment("scriptCustom/fib.lang.kt")
|
||||||
val aClass = generateClass("Fib")
|
|
||||||
|
val aClass = generateClass("Fib_lang")
|
||||||
val constructor = aClass.getConstructor(Integer.TYPE)
|
val constructor = aClass.getConstructor(Integer.TYPE)
|
||||||
val result = aClass.getDeclaredField("result")
|
val result = aClass.getDeclaredField("result")
|
||||||
result.isAccessible = true
|
result.isAccessible = true
|
||||||
@@ -55,8 +54,9 @@ class ScriptGenTest : CodegenTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun testLanguageWithPackage() {
|
fun testLanguageWithPackage() {
|
||||||
loadFile("scriptCustom/fibwp.lang.kt")
|
setUpEnvironment("scriptCustom/fibwp.lang.kt")
|
||||||
val aClass = generateClass("test.Fibwp")
|
|
||||||
|
val aClass = generateClass("test.Fibwp_lang")
|
||||||
val constructor = aClass.getConstructor(Integer.TYPE)
|
val constructor = aClass.getConstructor(Integer.TYPE)
|
||||||
val result = aClass.getDeclaredField("result")
|
val result = aClass.getDeclaredField("result")
|
||||||
result.isAccessible = true
|
result.isAccessible = true
|
||||||
@@ -65,7 +65,8 @@ class ScriptGenTest : CodegenTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun testDependentScripts() {
|
fun testDependentScripts() {
|
||||||
loadFiles("scriptCustom/fibwp.lang.kt", "scriptCustom/fibwprunner.kts")
|
setUpEnvironment(listOf("scriptCustom/fibwp.lang.kt", "scriptCustom/fibwprunner.kts"))
|
||||||
|
|
||||||
val aClass = generateClass("Fibwprunner")
|
val aClass = generateClass("Fibwprunner")
|
||||||
val constructor = aClass.getConstructor()
|
val constructor = aClass.getConstructor()
|
||||||
val result = aClass.getDeclaredField("result")
|
val result = aClass.getDeclaredField("result")
|
||||||
@@ -80,12 +81,34 @@ class ScriptGenTest : CodegenTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun testScriptWhereMethodHasClosure() {
|
fun testScriptWhereMethodHasClosure() {
|
||||||
loadFile("scriptCustom/methodWithClosure.lang.kt")
|
setUpEnvironment("scriptCustom/methodWithClosure.lang.kt")
|
||||||
val aClass = generateClass("MethodWithClosure")
|
|
||||||
|
val aClass = generateClass("MethodWithClosure_lang")
|
||||||
val constructor = aClass.getConstructor(Integer.TYPE)
|
val constructor = aClass.getConstructor(Integer.TYPE)
|
||||||
val script = constructor.newInstance(239)
|
val script = constructor.newInstance(239)
|
||||||
val fib = aClass.getMethod("method")
|
val fib = aClass.getMethod("method")
|
||||||
val invoke = fib.invoke(script)
|
val invoke = fib.invoke(script)
|
||||||
assertEquals(239, invoke as Int / 2)
|
assertEquals(239, invoke as Int / 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setUpEnvironment(sourcePath: String) {
|
||||||
|
setUpEnvironment(listOf(sourcePath))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setUpEnvironment(sourcePaths: List<String>) {
|
||||||
|
val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.JDK_ONLY, TestJdkKind.FULL_JDK).apply {
|
||||||
|
put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, PrintingMessageCollector(System.err, MessageRenderer.PLAIN_FULL_PATHS, false))
|
||||||
|
add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, FIB_SCRIPT_DEFINITION)
|
||||||
|
add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, NO_PARAM_SCRIPT_DEFINITION)
|
||||||
|
put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
|
||||||
|
|
||||||
|
addKotlinSourceRoots(sourcePaths.map { "${KotlinTestUtils.getTestDataPathBase()}/codegen/$it" })
|
||||||
|
}
|
||||||
|
|
||||||
|
myEnvironment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||||
|
|
||||||
|
for (path in sourcePaths) {
|
||||||
|
loadFile(path)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user