test refactored

This commit is contained in:
Dmitry Jemerov
2011-02-28 14:40:53 +03:00
parent 4e0b6deda5
commit dfe64458d4
@@ -9,22 +9,26 @@ import org.objectweb.asm.util.TraceClassVisitor;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
/** /**
* @author yole * @author yole
*/ */
public class NamespaceGenTest extends LightCodeInsightFixtureTestCase { public class NamespaceGenTest extends LightCodeInsightFixtureTestCase {
public void testPSVM() throws InvocationTargetException, IllegalAccessException { private NamespaceCodegen codegen;
@Override
protected void setUp() throws Exception {
super.setUp();
codegen = new NamespaceCodegen();
}
public void testPSVM() throws Exception {
myFixture.configureByFile(JetParsingTest.getTestDataDir() + "/codegen/PSVM.jet"); myFixture.configureByFile(JetParsingTest.getTestDataDir() + "/codegen/PSVM.jet");
JetFile jetFile = (JetFile) myFixture.getFile(); final String text = generateToText();
JetNamespace namespace = jetFile.getRootNamespace();
NamespaceCodegen codegen = new NamespaceCodegen();
final String text = generateToText(namespace, codegen);
System.out.println(text); System.out.println(text);
final Class aClass = generateToClass(namespace, codegen); final Class aClass = generateToClass();
final Method main = firstMethod(aClass); final Method main = firstMethod(aClass);
Object[] args = new Object[] { new String[0] }; Object[] args = new Object[] { new String[0] };
main.invoke(null, args); main.invoke(null, args);
@@ -32,26 +36,27 @@ public class NamespaceGenTest extends LightCodeInsightFixtureTestCase {
public void testReturnOne() throws Exception { public void testReturnOne() throws Exception {
myFixture.configureByFile(JetParsingTest.getTestDataDir() + "/codegen/returnOne.jet"); myFixture.configureByFile(JetParsingTest.getTestDataDir() + "/codegen/returnOne.jet");
JetFile jetFile = (JetFile) myFixture.getFile(); final String text = generateToText();
JetNamespace namespace = jetFile.getRootNamespace();
NamespaceCodegen codegen = new NamespaceCodegen();
final String text = generateToText(namespace, codegen);
System.out.println(text); System.out.println(text);
final Class aClass = generateToClass(namespace, codegen); final Class aClass = generateToClass();
final Method main = firstMethod(aClass); final Method main = firstMethod(aClass);
final Object returnValue = main.invoke(null, new Object[0]); final Object returnValue = main.invoke(null, new Object[0]);
assertEquals(new Integer(42), returnValue); assertEquals(new Integer(42), returnValue);
} }
private static String generateToText(JetNamespace namespace, NamespaceCodegen codegen) { private String generateToText() {
StringWriter writer = new StringWriter(); StringWriter writer = new StringWriter();
JetFile jetFile = (JetFile) myFixture.getFile();
JetNamespace namespace = jetFile.getRootNamespace();
codegen.generate(namespace, new TraceClassVisitor(new PrintWriter(writer))); codegen.generate(namespace, new TraceClassVisitor(new PrintWriter(writer)));
return writer.toString(); return writer.toString();
} }
private static Class generateToClass(JetNamespace namespace, NamespaceCodegen codegen) { private Class generateToClass() {
JetFile jetFile = (JetFile) myFixture.getFile();
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
final JetNamespace namespace = jetFile.getRootNamespace();
codegen.generate(namespace, writer); codegen.generate(namespace, writer);
final byte[] data = writer.toByteArray(); final byte[] data = writer.toByteArray();
MyClassLoader classLoader = new MyClassLoader(NamespaceGenTest.class.getClassLoader()); MyClassLoader classLoader = new MyClassLoader(NamespaceGenTest.class.getClassLoader());