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.ast.AbstractClassMapping;
import st.gravel.support.compiler.ast.ClassMapping;
import st.gravel.support.compiler.ast.Reference;
import st.gravel.support.compiler.ast.SystemMapping;
import st.gravel.support.jvm.runtime.ImageBootstrapper;
public class ImageBootstrapperTest {
private SystemMapping systemMapping;
@Before
public void setUp() {
}
@Test
public void testLookupClass() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
ImageBootstrapper.bootstrap();
systemMapping = ImageBootstrapper.systemMapping;
Reference ref = Reference.factory.value_("st.gravel.lang.Message class");
AbstractClassMapping meta = systemMapping.classMappingAtReference_(ref);
Object cl = systemMapping.singletonAtReference_(ref.nonmeta());
Method basicNew = cl.getClass().getMethod("basicNew");
Object instance = basicNew.invoke(cl);
Method r_class = instance.getClass().getMethod("r_class");
Object instanceClass = r_class.invoke(instance);
assertEquals(meta.identityClass(), instanceClass.getClass());
}
public Object foo() {
return new Object();
}
// @Test
// public void testObjectClassLoop() {
// final SmalltalkClassDescription Object_class_superclass = Core.at_("Object").getSmalltalkClass().superclass();
// assertEquals("Class", Object_class_superclass.toString());
//
// }
}