J2K ScriptGenTest: convert and prettify

This commit is contained in:
Mikhail Zarechenskiy
2016-09-12 02:54:56 +03:00
parent 49e1603470
commit aa1368f4f3
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2015 JetBrains s.r.o. * Copyright 2010-2016 JetBrains s.r.o.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -14,88 +14,78 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.codegen; package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.builtins.DefaultBuiltIns; import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.script.KotlinScriptDefinition; import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider; import org.jetbrains.kotlin.script.ScriptParameter
import org.jetbrains.kotlin.script.ScriptParameter; import org.jetbrains.kotlin.scripts.SimpleParamsTestScriptDefinition
import org.jetbrains.kotlin.scripts.SimpleParamsTestScriptDefinition; import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.Opcodes;
import java.lang.reflect.Constructor; class ScriptGenTest : CodegenTestCase() {
import java.lang.reflect.Field; companion object {
import java.lang.reflect.Method; private val FIB_SCRIPT_DEFINITION = SimpleParamsTestScriptDefinition(
import java.util.Arrays; ".lang.kt",
import java.util.Collections; listOf(ScriptParameter(Name.identifier("num"), DefaultBuiltIns.Instance.intType))
)
import static java.util.Collections.singletonList; private val NO_PARAM_SCRIPT_DEFINITION = SimpleParamsTestScriptDefinition(
".kts",
public class ScriptGenTest extends CodegenTestCase { emptyList<ScriptParameter>()
private static final KotlinScriptDefinition FIB_SCRIPT_DEFINITION = )
new SimpleParamsTestScriptDefinition(
".lang.kt",
singletonList(new ScriptParameter(Name.identifier("num"), DefaultBuiltIns.getInstance().getIntType()))
);
private static final KotlinScriptDefinition NO_PARAM_SCRIPT_DEFINITION =
new SimpleParamsTestScriptDefinition(
".kts",
Collections.<ScriptParameter>emptyList()
);
@Override
protected void setUp() throws Exception {
super.setUp();
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
KotlinScriptDefinitionProvider.getInstance(myEnvironment.getProject()).setScriptDefinitions(
Arrays.asList(FIB_SCRIPT_DEFINITION, NO_PARAM_SCRIPT_DEFINITION)
);
} }
public void testLanguage() throws Exception { override fun setUp() {
loadFile("scriptCustom/fib.lang.kt"); super.setUp()
Class<?> aClass = generateClass("Fib"); createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY)
Constructor constructor = aClass.getConstructor(int.class); KotlinScriptDefinitionProvider.getInstance(myEnvironment.project).setScriptDefinitions(
Field result = aClass.getDeclaredField("result"); listOf(FIB_SCRIPT_DEFINITION, NO_PARAM_SCRIPT_DEFINITION)
result.setAccessible(true); )
Object script = constructor.newInstance(5);
assertEquals(8, result.get(script));
} }
public void testLanguageWithPackage() throws Exception { fun testLanguage() {
loadFile("scriptCustom/fibwp.lang.kt"); loadFile("scriptCustom/fib.lang.kt")
Class<?> aClass = generateClass("test.Fibwp"); val aClass = generateClass("Fib")
Constructor constructor = aClass.getConstructor(int.class); val constructor = aClass.getConstructor(Integer.TYPE)
Field result = aClass.getDeclaredField("result"); val result = aClass.getDeclaredField("result")
result.setAccessible(true); result.isAccessible = true
Object script = constructor.newInstance(5); val script = constructor.newInstance(5)
assertEquals(8, result.get(script)); assertEquals(8, result.get(script))
} }
public void testDependentScripts() throws Exception { fun testLanguageWithPackage() {
loadFiles("scriptCustom/fibwp.lang.kt", "scriptCustom/fibwprunner.kts"); loadFile("scriptCustom/fibwp.lang.kt")
Class<?> aClass = generateClass("Fibwprunner"); val aClass = generateClass("test.Fibwp")
Constructor constructor = aClass.getConstructor(); val constructor = aClass.getConstructor(Integer.TYPE)
Field result = aClass.getDeclaredField("result"); val result = aClass.getDeclaredField("result")
result.setAccessible(true); result.isAccessible = true
Method resultMethod = aClass.getDeclaredMethod("getResult"); val script = constructor.newInstance(5)
assertTrue((resultMethod.getModifiers() & Opcodes.ACC_FINAL) != 0); assertEquals(8, result.get(script))
assertTrue((resultMethod.getModifiers() & Opcodes.ACC_PUBLIC) != 0);
assertTrue((result.getModifiers() & Opcodes.ACC_PRIVATE) != 0);
Object script = constructor.newInstance();
assertEquals(8, result.get(script));
assertEquals(8, resultMethod.invoke(script));
} }
public void testScriptWhereMethodHasClosure() throws Exception { fun testDependentScripts() {
loadFile("scriptCustom/methodWithClosure.lang.kt"); loadFiles("scriptCustom/fibwp.lang.kt", "scriptCustom/fibwprunner.kts")
Class<?> aClass = generateClass("MethodWithClosure"); val aClass = generateClass("Fibwprunner")
Constructor constructor = aClass.getConstructor(int.class); val constructor = aClass.getConstructor()
Object script = constructor.newInstance(239); val result = aClass.getDeclaredField("result")
Method fib = aClass.getMethod("method"); result.isAccessible = true
Object invoke = fib.invoke(script); val resultMethod = aClass.getDeclaredMethod("getResult")
assertEquals(239, ((Integer) invoke) / 2); assertTrue(resultMethod.modifiers and Opcodes.ACC_FINAL != 0)
assertTrue(resultMethod.modifiers and Opcodes.ACC_PUBLIC != 0)
assertTrue(result.modifiers and Opcodes.ACC_PRIVATE != 0)
val script = constructor.newInstance()
assertEquals(8, result.get(script))
assertEquals(8, resultMethod.invoke(script))
}
fun testScriptWhereMethodHasClosure() {
loadFile("scriptCustom/methodWithClosure.lang.kt")
val aClass = generateClass("MethodWithClosure")
val constructor = aClass.getConstructor(Integer.TYPE)
val script = constructor.newInstance(239)
val fib = aClass.getMethod("method")
val invoke = fib.invoke(script)
assertEquals(239, invoke as Int / 2)
} }
} }