Package st.gravel.support.compiler

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

package st.gravel.support.compiler;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Set;

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;
import st.gravel.support.jvm.runtime.MethodTools;

public class CollectionsTest {

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

  @Test
  public void test_asOrderedCollection() throws Throwable {

    Class stClass = new ClassBuilder("FooObject_test_asOrderedCollection")
        .method("array" +
        "  ^#(1 2 3)")
        .method("foo" +
            "  ^#(1 2 3) asOrderedCollection")
        .build();

    Object fooObject = stClass.newInstance();
    Object coll = MethodTools.perform(fooObject, "foo");
    Object size = MethodTools.perform(coll, "size");
    assertEquals(3, ((int)size));
  }

  @Test
  public void test_Array_size() throws Throwable {

    Class stClass = new ClassBuilder("FooObject_test_Array_size")
        .method("array" +
        "  ^#(1 2 3)")
        .build();

    Object fooObject = stClass.newInstance();
    Object coll = MethodTools.perform(fooObject, "array");
    Object size = MethodTools.perform(coll, "size");
    assertEquals(3, ((int)size));
  }

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

    Class stClass = new ClassBuilder("FooObject_testArrayAdd")
        .method("foo | coll |" +
            "  ^#(1 2 3) collect: [:each | each + 4]")
        .build();

    Object fooObject = stClass.newInstance();
    Method method = fooObject.getClass().getMethod("foo");
    Object result = method.invoke(fooObject);
    assertEquals(3, ((Object[])result).length);
  }

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

    Class stClass = new ClassBuilder("FooObject_testOrderedCollectionAdd")
        .method("foo | coll |" +
            "  coll := OrderedCollection new." +
            "  coll add: 1." +
            "  coll add: 'Fromage'." +
            "  coll add: 2." +
            "  ^coll asJavaList")
        .build();

    Object fooObject = stClass.newInstance();
    Method method = fooObject.getClass().getMethod("foo");
    Object result = method.invoke(fooObject);
    assertEquals(3, ((ArrayList)result).size());
  }

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

    Class stClass = new ClassBuilder("FooObject_testOrderedCollectionRemoveFirst")
        .method("foo | coll |" +
            "  coll := OrderedCollection new." +
            "  coll add: 1." +
            "  coll add: 'Fromage'." +
            "  coll add: 2."
            + "  coll removeFirst." +
            "  ^coll asJavaList")
        .build();

    Object fooObject = stClass.newInstance();
    Method method = fooObject.getClass().getMethod("foo");
    Object result = method.invoke(fooObject);
    assertEquals(2, ((ArrayList)result).size());
  }

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

    Class stClass = new ClassBuilder("FooObject_testSetAdd")
        .method("foo | set |" +
            "  set := Set new." +
            "  set add: 1." +
            "  set add: 'Fromage'." +
            "  set add: 2." +
            "  ^set asJavaSet")
        .build();

    Object fooObject = stClass.newInstance();
    Method method = fooObject.getClass().getMethod("foo");
    Object result = method.invoke(fooObject);
    assertEquals(3, ((Set)result).size());
  }

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

    Class stClass = new ClassBuilder("FooObject_testSetCollect")
        .method("foo | set |" +
            "  set := Set new." +
            "  set add: 1." +
            "  set add: 2." +
            "  set add: 3." +
            "  ^(set collect: [:each | each * each]) asJavaSet")
        .build();

    Object fooObject = stClass.newInstance();
    Method method = fooObject.getClass().getMethod("foo");
    Object result = method.invoke(fooObject);
    assertEquals(3, ((Set)result).size());
    assertTrue(((Set)result).contains(9));
  }


}
TOP

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

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.