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