Minor, extract method in CodegenTestCase

This commit is contained in:
Alexander Udalov
2013-10-15 22:05:14 +04:00
parent 6269cb807b
commit 5539a29439
5 changed files with 17 additions and 27 deletions
@@ -38,8 +38,7 @@ public class AnnotationGenTest extends CodegenTestCase {
private ClassLoader loadFileGetClassLoader(@NotNull String text) {
loadText(text);
ClassFileFactory state = generateClassesInFile();
return createClassLoader(state);
return generateAndCreateClassLoader();
}
private Class<?> getPackageClass(@NotNull ClassLoader loader) throws ClassNotFoundException {
@@ -53,8 +53,7 @@ public class ClassGenTest extends CodegenTestCase {
public void testDelegationToVal() throws Exception {
loadFile("classes/delegationToVal.kt");
ClassFileFactory state = generateClassesInFile();
GeneratedClassLoader loader = createClassLoader(state);
GeneratedClassLoader loader = generateAndCreateClassLoader();
Class aClass = loader.loadClass(PackageClassUtils.getPackageClassName(FqName.ROOT));
assertEquals("OK", aClass.getMethod("box").invoke(null));
@@ -139,7 +138,7 @@ public class ClassGenTest extends CodegenTestCase {
public void testClassObjectIsInnerClass() throws Exception {
loadFile("classes/classObjectIsInnerClass.kt");
GeneratedClassLoader loader = createClassLoader(generateClassesInFile());
GeneratedClassLoader loader = generateAndCreateClassLoader();
Class<?> a = loader.loadClass("A");
Class<?> aClassObject = loader.loadClass("A" + JvmAbi.CLASS_OBJECT_SUFFIX);
assertSameElements(a.getDeclaredClasses(), aClassObject);
@@ -115,6 +115,11 @@ public abstract class CodegenTestCase extends UsefulTestCase {
return initializedClassLoader;
}
@NotNull
protected GeneratedClassLoader generateAndCreateClassLoader() {
return createClassLoader(generateClassesInFile());
}
@NotNull
protected URL[] getClassPathURLs() {
List<URL> urls = Lists.newArrayList();
@@ -159,7 +164,7 @@ public abstract class CodegenTestCase extends UsefulTestCase {
@NotNull
protected Class<?> generateClass(@NotNull String name) {
try {
return createClassLoader(generateClassesInFile()).loadClass(name);
return generateAndCreateClassLoader().loadClass(name);
} catch (ClassNotFoundException e) {
fail("No class file was generated for: " + name);
return null;
@@ -19,7 +19,6 @@ package org.jetbrains.jet.codegen;
import com.intellij.openapi.util.Pair;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.asm4.Opcodes;
import org.jetbrains.asm4.Type;
import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
@@ -52,14 +51,8 @@ public class ScriptGenTest extends CodegenTestCase {
private void blackBoxScript(String filename) {
loadFile(filename);
ClassFileFactory factory = generateClassesInFile();
GeneratedClassLoader loader = createClassLoader(factory);
String scriptClassName = ScriptNameUtil.classNameForScript(myFiles.getPsiFile());
try {
Class<?> scriptClass = loader.loadClass(scriptClassName);
Class<?> scriptClass = generateClass(ScriptNameUtil.classNameForScript(myFiles.getPsiFile()));
Constructor constructor = getConstructor(scriptClass);
scriptInstance = constructor.newInstance(myFiles.getScriptParameterValues().toArray());
@@ -88,13 +81,14 @@ public class ScriptGenTest extends CodegenTestCase {
}
catch (Throwable e) {
System.out.println(generateToText());
ExceptionUtils.rethrow(e);
throw ExceptionUtils.rethrow(e);
}
}
protected Constructor getConstructor(@NotNull Class<?> clazz) {
Constructor [] constructors = clazz.getConstructors();
if (constructors == null || constructors.length != 1) {
@NotNull
protected static Constructor getConstructor(@NotNull Class<?> clazz) {
Constructor[] constructors = clazz.getConstructors();
if (constructors.length != 1) {
throw new IllegalArgumentException("Script class should have one constructor: " + clazz);
}
return constructors[0];
@@ -23,9 +23,7 @@ import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.TestJdkKind;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.codegen.ClassFileFactory;
import org.jetbrains.jet.codegen.CodegenTestCase;
import org.jetbrains.jet.codegen.GeneratedClassLoader;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.utils.ExceptionUtils;
@@ -92,22 +90,17 @@ public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
}
private void blackBox() {
ClassFileFactory factory = generateClassesInFile();
GeneratedClassLoader loader = createClassLoader(factory);
// If there are many files, the first of them should contain the 'box(): String' function
JetFile firstFile = myFiles.getPsiFiles().get(0);
String fqName = getPackageClassFqName(JetPsiUtil.getFQName(firstFile)).asString();
try {
Class<?> namespaceClass = loader.loadClass(fqName);
Method method = namespaceClass.getMethod("box");
Method method = generateClass(fqName).getMethod("box");
String r = (String) method.invoke(null);
assertEquals("OK", r);
} catch (Throwable e) {
System.out.println(generateToText());
ExceptionUtils.rethrow(e);
throw ExceptionUtils.rethrow(e);
}
}
}