| /* |
| * Copyright 2006 The Android Open Source Project |
| */ |
| |
| import java.lang.reflect.Array; |
| |
| /** |
| * Test java.lang.reflect.Array. |
| */ |
| public class Main { |
| public static void main(String[] args) { |
| testSingleInt(); |
| testSingle(); |
| testMultiInt(); |
| testMulti(); |
| |
| System.out.println("ReflectArrayTest passed"); |
| } |
| |
| static void testSingleInt() { |
| Object intArray; |
| |
| intArray = Array.newInstance(Integer.TYPE, 2); |
| |
| int[] array = (int[]) intArray; |
| array[0] = 5; |
| Array.setInt(intArray, 1, 6); |
| |
| if (Array.getInt(intArray, 0) != 5) |
| throw new RuntimeException(); |
| if (array[1] != 6) |
| throw new RuntimeException(); |
| try { |
| array[2] = 27; |
| throw new RuntimeException("store should have failed"); |
| } |
| catch (ArrayIndexOutOfBoundsException abe) { |
| } |
| if (array.length != Array.getLength(intArray) || |
| array.length != 2) |
| { |
| throw new RuntimeException("bad len"); |
| } |
| |
| int[][] wrongArray; |
| try { |
| wrongArray = (int[][]) intArray; |
| throw new RuntimeException("cast should have failed"); |
| } |
| catch (ClassCastException cce) { |
| } |
| |
| intArray = Array.newInstance(Integer.TYPE, 0); |
| if (Array.getLength(intArray) != 0) |
| throw new RuntimeException(); |
| System.out.println("ReflectArrayTest.testSingleInt passed"); |
| } |
| |
| static void testSingle() { |
| Object strArray; |
| |
| strArray = Array.newInstance(String.class, 2); |
| |
| String[] array = (String[]) strArray; |
| array[0] = "entry zero"; |
| Array.set(strArray, 1, "entry one"); |
| |
| //System.out.println("array: " + array); |
| |
| if (!"entry zero".equals(Array.get(strArray, 0))) |
| throw new RuntimeException(); |
| if (!"entry one".equals(array[1])) |
| throw new RuntimeException(); |
| |
| if (array.length != Array.getLength(strArray) || |
| array.length != 2) |
| { |
| throw new RuntimeException("bad len"); |
| } |
| System.out.println("ReflectArrayTest.testSingle passed"); |
| } |
| |
| static void testMultiInt() { |
| Object intIntIntArray; |
| int[] dimensions = { 3, 2, 1 }; |
| |
| intIntIntArray = Array.newInstance(Integer.TYPE, dimensions); |
| int[][][] array3 = (int[][][]) intIntIntArray; |
| |
| array3[0][0][0] = 123; // trouble |
| array3[2][1][0] = 456; |
| |
| try { |
| array3[2][1][1] = 768; |
| throw new RuntimeException("store should have failed"); |
| } |
| catch (ArrayIndexOutOfBoundsException abe) { |
| } |
| System.out.println("ReflectArrayTest.testMultiInt passed"); |
| } |
| |
| static void testMulti() { |
| Object strStrStrArray; |
| int[] dimensions = { 1, 2, 3 }; |
| |
| strStrStrArray = Array.newInstance(String.class, dimensions); |
| String[][][] array3 = (String[][][]) strStrStrArray; |
| |
| array3[0][0][0] = "zero zero zero"; |
| array3[0][1][2] = "zero one two"; |
| |
| try { |
| array3[1][0][0] = "bad store"; |
| throw new RuntimeException("store should have failed"); |
| } |
| catch (ArrayIndexOutOfBoundsException abe) { |
| } |
| |
| try { |
| String[][] array2 = (String[][]) strStrStrArray; |
| throw new RuntimeException("expecting bad cast"); |
| } |
| catch (ClassCastException cce) { |
| } |
| |
| String[] strar = new String[4]; |
| strar[2] = "zero one two ++"; |
| array3[0][1] = strar; |
| System.out.println(array3[0][1][2]); |
| //System.out.println("array3: " + array3); |
| |
| |
| int[] dimensions2 = { 1, 2 }; |
| strStrStrArray = Array.newInstance(String[].class, dimensions2); |
| array3 = (String[][][]) strStrStrArray; |
| |
| array3[0][1] = new String[3]; |
| array3[0][1][2] = "zero one two"; |
| try { |
| array3[1][0][0] = "bad store"; |
| throw new RuntimeException("store should have failed"); |
| } |
| catch (ArrayIndexOutOfBoundsException abe) { |
| } |
| System.out.println("ReflectArrayTest.testMulti passed"); |
| } |
| } |