Package st.gravel.support.compiler

Source Code of st.gravel.support.compiler.InheritanceTest

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 InheritanceTest {

  @Before
  public void setUp() {
    TestBootstrap.getSingleton();
  }

  @Test
  public void testSuperSend1() throws InstantiationException,
      IllegalAccessException, IllegalArgumentException,
      InvocationTargetException, NoSuchMethodException, SecurityException {

    Class classA = new ClassBuilder("ClassA_testSuperSend1")
        .method("sendSuper: bar ^bar + 1")
        .build();

    Class classB = new ClassBuilder("ClassB_testSuperSend1")
    .superclassName("ClassA_testSuperSend1")
    .method("sendSuper: bar ^(super sendSuper: bar) + 2")
    .build();

    Object fooObject = classB.newInstance();
    Method method = fooObject.getClass().getMethod("sendSuper_", Object.class);
    Object result = method.invoke(fooObject, 4);
    assertEquals(Integer.valueOf(7), result);
  }

  @Test
  public void testSuperSend2() throws InstantiationException,
      IllegalAccessException, IllegalArgumentException,
      InvocationTargetException, NoSuchMethodException, SecurityException {

    Class classA = new ClassBuilder("ClassA_testSuperSend2")
        .method("sendSuper: bar ^bar + 1")
        .build();

    Class classB = new ClassBuilder("ClassB_testSuperSend2")
    .superclassName("ClassA_testSuperSend2")
    .build();
    Class classC = new ClassBuilder("ClassC_testSuperSend2")
    .superclassName("ClassB_testSuperSend2")
    .method("sendSuper: bar ^(super sendSuper: bar) + 2")
    .build();

    Object fooObject = classC.newInstance();
    Method method = fooObject.getClass().getMethod("sendSuper_", Object.class);
    Object result = method.invoke(fooObject, 4);
    assertEquals(Integer.valueOf(7), result);
  }


}
TOP

Related Classes of st.gravel.support.compiler.InheritanceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.