15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/*
25d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Copyright 2006 The Android Open Source Project
35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoimport java.lang.reflect.Array;
65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/**
85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Test java.lang.reflect.Array.
95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Main {
115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void main(String[] args) {
125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        testSingleInt();
13741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        testSingleChar();
14741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        testSingleShort();
15741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        testSingleLong();
165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        testSingle();
175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        testMultiInt();
185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        testMulti();
19513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers        testAbstract();
205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("ReflectArrayTest passed");
225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void testSingleInt() {
255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Object intArray;
265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        intArray = Array.newInstance(Integer.TYPE, 2);
285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[] array = (int[]) intArray;
305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array[0] = 5;
315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Array.setInt(intArray, 1, 6);
325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        if (Array.getInt(intArray, 0) != 5)
345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException();
355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        if (array[1] != 6)
365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException();
375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            array[2] = 27;
395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException("store should have failed");
40741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (ArrayIndexOutOfBoundsException abe) { }
41741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
42741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            Array.setInt(intArray, 2, 27);
43741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("store should have failed");
44741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (ArrayIndexOutOfBoundsException abe) { }
455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        if (array.length != Array.getLength(intArray) ||
465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            array.length != 2)
475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        {
485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException("bad len");
495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
51741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Integer x123 = Integer.valueOf(123);
52741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Integer x456 = Integer.valueOf(456);
53741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
54741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Array.set(intArray, 0, x123);
55741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Array.set(intArray, 1, x456);
56741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        if (!Array.get(intArray, 0).equals(x123) || !Array.get(intArray, 1).equals(x456)) {
57741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("bad 123 or 456");
58741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        }
59741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[][] wrongArray;
615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            wrongArray = (int[][]) intArray;
635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException("cast should have failed");
64741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (ClassCastException cce) { }
655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        intArray = Array.newInstance(Integer.TYPE, 0);
675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        if (Array.getLength(intArray) != 0)
685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException();
695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("ReflectArrayTest.testSingleInt passed");
705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
72741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes    static void testSingleChar() {
73741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Object charArray = Array.newInstance(Character.TYPE, 7);
74741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
75741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        char[] array = (char[]) charArray;
76741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        array[0] = '0';
77741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        array[1] = 'W';
78741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        array[2] = '2';
79741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        array[3] = '3';
80741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        array[4] = 'X';
81741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        array[5] = '5';
82741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        array[6] = '6';
83741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Array.setChar(charArray, 1, '1');
84741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Array.setChar(charArray, 4, '4');
85741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
86741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            Array.setShort(charArray, 3, (short) 'Y');
87741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("shouldn't allow short in char array");
88741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (IllegalArgumentException iae) {}
89741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
90741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            Array.setInt(charArray, 5, 'Z');
91741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("shouldn't allow int in char array");
92741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (IllegalArgumentException iae) {}
93741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
94741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
95741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            for (int i = 0; i < array.length; i++) {
96741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes                if (Array.getInt(charArray, i) - '0' != i) {
97741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes                    throw new RuntimeException("mismatch: " + i + " is " + array[i]);
98741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes                }
99741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            }
100741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
101741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            if (Array.getInt(charArray, 4) != '4') {
102741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes                throw new RuntimeException("load should have worked");
103741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            }
104741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (IllegalArgumentException iae) {
105fa23b1d4c80e92253eeb2da61f5b41b5c34ffb91Elliott Hughes            iae.printStackTrace();
106741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        }
107741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
108741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            Array.getByte(charArray, 2);
109741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("shouldn't allow read of char as byte");
110741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (IllegalArgumentException iae) {}
111741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
112741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Array.setChar(charArray, 3, (char) 0xffff);
113741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
114741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            if (Array.getInt(charArray, 3) != 0xffff) {
115741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes                throw new RuntimeException("char got sign-extended? "
116741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes                    + Array.getInt(charArray, 3));
117741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            }
118741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (IllegalArgumentException iae) {
119fa23b1d4c80e92253eeb2da61f5b41b5c34ffb91Elliott Hughes            iae.printStackTrace();
120741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        }
121741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
122741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        System.out.println("ReflectArrayTest.testSingleChar passed");
123741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes    }
124741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
125741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes    static void testSingleShort() {
126741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Object shortArray = Array.newInstance(Short.TYPE, 1);
127741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Array.setShort(shortArray, 0, (short) -1);
128741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        if (Array.getInt(shortArray, 0) != -1) {
129741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("short didn't get sign-extended");
130741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        }
131741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
132741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Short box = (Short) Array.get(shortArray, 0);
133741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
134741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        System.out.println("ReflectArrayTest.testSingleShort passed");
135741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes    }
136741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
137741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes    static void testSingleLong() {
138741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Object longArray = Array.newInstance(Long.TYPE, 2);
139741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Array.setInt(longArray, 0, 123);
140741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        Array.setLong(longArray, 1, 0x1122334455667788L);
141741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
142741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            Array.getInt(longArray, 0);
143741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("shouldn't allow read of long as int");
144741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (IllegalArgumentException iae) {}
145741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
146741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        long[] array = (long[]) longArray;
147741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        if (array[0] != 123 || array[1] != 0x1122334455667788L) {
148741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException();
149741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        }
150741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
151741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        float f = Array.getFloat(longArray, 0);
152741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        if (f < 122.9 || f > 123.1) {
153741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("long-as-float failed - " + f);
154741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        }
155741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        if (Array.getLong(longArray, 1) != 0x1122334455667788L) {
156741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("long1 failed");
157741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        }
158741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
159741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        System.out.println("ReflectArrayTest.testSingleLong passed");
160741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes    }
161741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
1625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void testSingle() {
1635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Object strArray;
1645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        strArray = Array.newInstance(String.class, 2);
1665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String[] array = (String[]) strArray;
1685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array[0] = "entry zero";
1695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Array.set(strArray, 1, "entry one");
170741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
171741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            Array.set(strArray, 2, "entry two");
172741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("store should have failed");
173741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (ArrayIndexOutOfBoundsException abe) { }
1745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        //System.out.println("array: " + array);
1765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        if (!"entry zero".equals(Array.get(strArray, 0)))
1785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException();
1795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        if (!"entry one".equals(array[1]))
1805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException();
1815d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1825d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        if (array.length != Array.getLength(strArray) ||
1835d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            array.length != 2)
1845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        {
1855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException("bad len");
1865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
187741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes
188741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        try {
189741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            Array.set(strArray, 0, new Integer(5));
190741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes            throw new RuntimeException("store of Integer should have failed");
191741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes        } catch (IllegalArgumentException iae) {}
1925d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("ReflectArrayTest.testSingle passed");
1935d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
1945d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1955d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void testMultiInt() {
1965d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Object intIntIntArray;
1975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[] dimensions = { 3, 2, 1 };
1985d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1995d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        intIntIntArray = Array.newInstance(Integer.TYPE, dimensions);
2005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[][][] array3 = (int[][][]) intIntIntArray;
2015d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array3[0][0][0] = 123;      // trouble
2035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array3[2][1][0] = 456;
2045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
2065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            array3[2][1][1] = 768;
2075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException("store should have failed");
2085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
2095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        catch (ArrayIndexOutOfBoundsException abe) {
2105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
2115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("ReflectArrayTest.testMultiInt passed");
2125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
2135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void testMulti() {
2155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Object strStrStrArray;
2165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[] dimensions = { 1, 2, 3 };
2175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        strStrStrArray = Array.newInstance(String.class, dimensions);
2195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String[][][] array3 = (String[][][]) strStrStrArray;
2205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array3[0][0][0] = "zero zero zero";
2225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array3[0][1][2] = "zero one two";
2235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
2255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            array3[1][0][0] = "bad store";
2265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException("store should have failed");
2275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
2285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        catch (ArrayIndexOutOfBoundsException abe) {
2295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
2305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
2325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            String[][] array2 = (String[][]) strStrStrArray;
2335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException("expecting bad cast");
2345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
2355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        catch (ClassCastException cce) {
2365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
2375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String[] strar = new String[4];
2395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        strar[2] = "zero one two ++";
2405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array3[0][1] = strar;
2415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println(array3[0][1][2]);
2425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        //System.out.println("array3: " + array3);
2435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[] dimensions2 = { 1, 2 };
2465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        strStrStrArray = Array.newInstance(String[].class, dimensions2);
2475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array3 = (String[][][]) strStrStrArray;
2485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array3[0][1] = new String[3];
2505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        array3[0][1][2] = "zero one two";
2515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
2525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            array3[1][0][0] = "bad store";
2535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throw new RuntimeException("store should have failed");
2545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
2555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        catch (ArrayIndexOutOfBoundsException abe) {
2565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
2575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("ReflectArrayTest.testMulti passed");
2585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
259513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers
260513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers    static void testAbstract() {
261513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers        Object arrayOfAbstractClasses = Array.newInstance(Number.class, 1);
262513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers        System.out.println(arrayOfAbstractClasses.getClass().toString() + " modifiers: " +
263513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers                           arrayOfAbstractClasses.getClass().getModifiers());
264513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers        arrayOfAbstractClasses = Array.newInstance(Cloneable.class, 1);
265513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers        System.out.println(arrayOfAbstractClasses.getClass().toString() + " modifiers: " +
266513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers                           arrayOfAbstractClasses.getClass().getModifiers());
267513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers        System.out.println("ReflectArrayTest.testAbstract passed");
268513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers    }
2695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao}
270