making script classes useful/accessable for the rest of the world

This commit is contained in:
Alex Tkachman
2012-08-01 09:58:01 +03:00
parent 1a918d52bb
commit e134969896
21 changed files with 229 additions and 75 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
import org.jetbrains.jet.utils.ExceptionUtils;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
@@ -188,7 +189,7 @@ public abstract class CodegenTestCase extends UsefulTestCase {
try {
if (myFiles.isScript()) {
String scriptClassName = ScriptCodegen.classNameForScript(myFiles.getPsiFile());
String scriptClassName = ScriptNameUtil.classNameForScript(myFiles.getPsiFile());
Class<?> scriptClass = loader.loadClass(scriptClassName);
Constructor constructor = getConstructor(scriptClass, state.getScriptConstructorMethod());
@@ -127,4 +127,22 @@ public class ScriptGenTest extends CodegenTestCase {
throw new RuntimeException(e);
}
}
public void testDependentScripts() {
JetScriptDefinitionProvider.getInstance(myEnvironment.getProject()).addScriptDefinition(FIB_SCRIPT_DEFINITION);
loadFiles("script/fibwp.lang.kt", "script/fibwprunner.ktscript");
System.out.println(generateToText());
final Class aClass = loadClass("Fibwprunner", generateClassesInFile());
try {
Constructor constructor = aClass.getConstructor();
Field result = aClass.getField("result");
Field rv = aClass.getField("rv");
Object script = constructor.newInstance();
assertEquals(12,rv.get(script));
assertEquals(8,result.get(script));
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
}