/* * 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"); } }