package com.google.gwt.reflect.test; import java.lang.reflect.Array; import java.util.Arrays; import org.junit.Test; import com.google.gwt.reflect.client.strategy.ReflectionStrategy; /** * @author James X. Nelson (james@wetheinter.net, @james) */ @ReflectionStrategy(magicSupertypes=false, keepCodeSource=true) public class ArrayTests extends AbstractReflectionTest { public ArrayTests() {} @Test public void testSingleDimPrimitive() { long[] longs = (long[])Array.newInstance(long.class, 5); assertEquals(longs.length, 5); assertEquals(longs.getClass(), long[].class); longs[0] = 1; Array.setLong(longs, 1, 2); Array.setLong(longs, 2, longs[0] + 2); Array.setLong(longs, 3, Array.getLong(longs, 2) +1); Array.setLong(longs, 4, Array.getLength(longs)); assertTrue("Arrays not equals", Arrays.equals(longs, new long[] {1,2,3,4,5})); } @Test public void testSingleDimComplex() { long[][] longs = (long[][])Array.newInstance(long[].class, 5); assertEquals(longs.length, 5); assertEquals(longs[0], null); assertEquals(longs.getClass(), long[][].class); long[] subArr = longs[0] = new long[3]; subArr[0] = 1; Array.setLong(subArr, 1, 2); Array.setLong(subArr, 2, subArr[0] + 2); Array.set(longs, 1, new long[3]); subArr = (long[])Array.get(longs, 1); Array.setLong(subArr, 0, 1); subArr[1] = Array.getLong(subArr, 0) +1; Array.setLong(subArr, 2, Array.getLength(subArr)); assertTrue("Arrays not equals", Arrays.deepEquals(longs, new long[][] { new long[]{1,2,3},new long[]{1,2,3}, null, null, null })); } @Test public void testArrayEqualsSanity() { long[][] arrays = new long[][]{ new long[]{1,2}, new long[]{3,4} } , arrays2 = new long[][]{ new long[]{0,2}, new long[]{3,4} }; assertTrue("Arrays not equals", Arrays.deepEquals(arrays, arrays)); assertFalse("Arrays.deepEquals fail", Arrays.deepEquals(arrays, arrays2)); } @Test public void testSingleDimObject() { Long[] longs = (Long[])Array.newInstance(Long.class, 5); assertEquals(longs.length, 5); assertEquals(longs.getClass(), Long[].class); longs[0] = 1L; Array.set(longs, 1, 2L); Array.set(longs, 2, longs[0] + 2); Array.set(longs, 3, (Long)Array.get(longs, 2) +1); Array.set(longs, 4, new Long(Array.getLength(longs))); assertTrue("Arrays not equals", Arrays.equals(longs, new Long[] {1L,2L,3L,4L,5L})); } @Test public void testMultiDimPrimitive() { long[][] longs = (long[][])Array.newInstance(long.class, 2, 3); assertEquals(longs.length, 2); assertEquals(longs[0].length, 3); assertEquals(longs.getClass(), long[][].class); long[] subArr = longs[0]; subArr[0] = 1; Array.setLong(subArr, 1, 2); Array.setLong(subArr, 2, subArr[0] + 2); subArr = (long[])Array.get(longs, 1); Array.setLong(subArr, 0, 1); subArr[1] = Array.getLong(subArr, 0) +1; Array.setLong(subArr, 2, Array.getLength(subArr)); assertTrue("Arrays not equals", Arrays.deepEquals(longs, new long[][] { new long[]{1,2,3},new long[]{1,2,3} })); } @Test public void testMultiDimObject() { Long[][] longs = (Long[][])Array.newInstance(Long.class, 2, 3); assertEquals(longs.length, 2); assertEquals(longs[0].length, 3); assertEquals(longs.getClass(), Long[][].class); Long[] subArr = longs[0]; subArr[0] = 1L; Array.set(subArr, 1, 2L); Array.set(subArr, 2, subArr[0] + 2); subArr = (Long[])Array.get(longs, 1); Array.set(subArr, 0, 1L); subArr[1] = (Long)Array.get(subArr, 0) +1; Array.set(subArr, 2, new Long(Array.getLength(subArr))); assertTrue("Arrays erroneously inequal", Arrays.deepEquals(longs, new Long[][] { new Long[]{1L,2L,3L},new Long[]{1L,2L,3L} })); assertFalse("Arrays erroneously equal", Arrays.deepEquals(longs, new Long[][] { new Long[]{1L,2L,3L},new Long[]{0L,2L,3L} })); } @Test public void testComplexDims() { // long[][][][] longs = GwtReflect.newArray(long[][].class, 2, 3); // long[][] one = new long[0][], two = new long[1][], three = new long[2][]; } }