Main.java revision 7365493ad8d360c1dcf9cd8b6eee62747af01cae
1/* 2 * Copyright 2006 The Android Open Source Project 3 */ 4 5import java.lang.reflect.Array; 6 7/** 8 * Test java.lang.reflect.Array. 9 */ 10public class Main { 11 public static void main(String[] args) { 12 testSingleInt(); 13 testSingle(); 14 testMultiInt(); 15 testMulti(); 16 17 System.out.println("ReflectArrayTest passed"); 18 } 19 20 static void testSingleInt() { 21 Object intArray; 22 23 intArray = Array.newInstance(Integer.TYPE, 2); 24 25 int[] array = (int[]) intArray; 26 array[0] = 5; 27 Array.setInt(intArray, 1, 6); 28 29 if (Array.getInt(intArray, 0) != 5) 30 throw new RuntimeException(); 31 if (array[1] != 6) 32 throw new RuntimeException(); 33 try { 34 array[2] = 27; 35 throw new RuntimeException("store should have failed"); 36 } 37 catch (ArrayIndexOutOfBoundsException abe) { 38 } 39 if (array.length != Array.getLength(intArray) || 40 array.length != 2) 41 { 42 throw new RuntimeException("bad len"); 43 } 44 45 int[][] wrongArray; 46 try { 47 wrongArray = (int[][]) intArray; 48 throw new RuntimeException("cast should have failed"); 49 } 50 catch (ClassCastException cce) { 51 } 52 53 intArray = Array.newInstance(Integer.TYPE, 0); 54 if (Array.getLength(intArray) != 0) 55 throw new RuntimeException(); 56 System.out.println("ReflectArrayTest.testSingleInt passed"); 57 } 58 59 static void testSingle() { 60 Object strArray; 61 62 strArray = Array.newInstance(String.class, 2); 63 64 String[] array = (String[]) strArray; 65 array[0] = "entry zero"; 66 Array.set(strArray, 1, "entry one"); 67 68 //System.out.println("array: " + array); 69 70 if (!"entry zero".equals(Array.get(strArray, 0))) 71 throw new RuntimeException(); 72 if (!"entry one".equals(array[1])) 73 throw new RuntimeException(); 74 75 if (array.length != Array.getLength(strArray) || 76 array.length != 2) 77 { 78 throw new RuntimeException("bad len"); 79 } 80 System.out.println("ReflectArrayTest.testSingle passed"); 81 } 82 83 static void testMultiInt() { 84 Object intIntIntArray; 85 int[] dimensions = { 3, 2, 1 }; 86 87 intIntIntArray = Array.newInstance(Integer.TYPE, dimensions); 88 int[][][] array3 = (int[][][]) intIntIntArray; 89 90 array3[0][0][0] = 123; // trouble 91 array3[2][1][0] = 456; 92 93 try { 94 array3[2][1][1] = 768; 95 throw new RuntimeException("store should have failed"); 96 } 97 catch (ArrayIndexOutOfBoundsException abe) { 98 } 99 System.out.println("ReflectArrayTest.testMultiInt passed"); 100 } 101 102 static void testMulti() { 103 Object strStrStrArray; 104 int[] dimensions = { 1, 2, 3 }; 105 106 strStrStrArray = Array.newInstance(String.class, dimensions); 107 String[][][] array3 = (String[][][]) strStrStrArray; 108 109 array3[0][0][0] = "zero zero zero"; 110 array3[0][1][2] = "zero one two"; 111 112 try { 113 array3[1][0][0] = "bad store"; 114 throw new RuntimeException("store should have failed"); 115 } 116 catch (ArrayIndexOutOfBoundsException abe) { 117 } 118 119 try { 120 String[][] array2 = (String[][]) strStrStrArray; 121 throw new RuntimeException("expecting bad cast"); 122 } 123 catch (ClassCastException cce) { 124 } 125 126 String[] strar = new String[4]; 127 strar[2] = "zero one two ++"; 128 array3[0][1] = strar; 129 System.out.println(array3[0][1][2]); 130 //System.out.println("array3: " + array3); 131 132 133 int[] dimensions2 = { 1, 2 }; 134 strStrStrArray = Array.newInstance(String[].class, dimensions2); 135 array3 = (String[][][]) strStrStrArray; 136 137 array3[0][1] = new String[3]; 138 array3[0][1][2] = "zero one two"; 139 try { 140 array3[1][0][0] = "bad store"; 141 throw new RuntimeException("store should have failed"); 142 } 143 catch (ArrayIndexOutOfBoundsException abe) { 144 } 145 System.out.println("ReflectArrayTest.testMulti passed"); 146 } 147} 148