package st.gravel.support.compiler;
import static org.junit.Assert.assertEquals;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Before;
import org.junit.Test;
import st.gravel.support.compiler.testtools.ClassBuilder;
import st.gravel.support.compiler.testtools.TestBootstrap;
import st.gravel.support.jvm.runtime.ImageBootstrapper;
public class InstanceCreationTest {
@Before
public void setUp() {
TestBootstrap.getSingleton();
}
@Test
public void testCreateInstance() throws InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException {
Class classA = new ClassBuilder("ClassA")
.method("foo ^3")
.build();
Class classB = new ClassBuilder("ClassB")
.method("newClassA ^ClassA new")
.build();
Object classBObject = classB.newInstance();
Method method = classBObject.getClass().getMethod("newClassA");
Object classAObj = method.invoke(classBObject);
Method fooMethod = classAObj.getClass().getMethod("foo");
Object result = fooMethod.invoke(classAObj);
assertEquals(Integer.valueOf(3), result);
}
@Test
public void testSendClassMethod() throws InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException {
Class classA = new ClassBuilder("ClassA_testSendClassMethod")
.classMethod("foo ^3")
.build();
Class classB = new ClassBuilder("ClassB_testSendClassMethod")
.method("bar ^ClassA_testSendClassMethod foo")
.build();
Object classBObject = classB.newInstance();
Method method = classBObject.getClass().getMethod("bar");
Object result =method.invoke(classBObject);
assertEquals(Integer.valueOf(3), result);
}
}