1990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/*
2990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Copyright (C) 2008 The Android Open Source Project
3990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
4990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
5990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * you may not use this file except in compliance with the License.
6990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * You may obtain a copy of the License at
7990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
8990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
9990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
10990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Unless required by applicable law or agreed to in writing, software
11990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * See the License for the specific language governing permissions and
14990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * limitations under the License.
15990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */
16990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
17990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpackage libcore.java.lang.reflect;
18990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
19990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.lang.reflect.Array;
20990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport junit.framework.TestCase;
21990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
22990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/**
23990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Test java.lang.reflect.Array methods.
24990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */
25990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpublic class OldAndroidArrayTest extends TestCase {
26990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
27990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testSingleInt() throws Exception {
28990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        Object intArray = Array.newInstance(Integer.TYPE, 2);
29990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
30990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int[] array = (int[]) intArray;
31990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array[0] = 5;
32990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        Array.setInt(intArray, 1, 6);
33990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
34990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals(5, Array.getInt(intArray, 0));
35990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals(6, array[1]);
36990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
37990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
38990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            array[2] = 27;
39990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            fail("store should have failed");
40990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } catch (ArrayIndexOutOfBoundsException abe) {
41990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            // expected
42990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
43990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
44990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals(2, array.length);
45990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals(Array.getLength(intArray), array.length);
46990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
47990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
48990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            int[][] wrongArray = (int[][]) intArray;
49990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            fail("cast should have failed");
50990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } catch (ClassCastException cce) {
51990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            // expected
52990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
53990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
54990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        intArray = Array.newInstance(Integer.TYPE, 0);
55990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals(0, Array.getLength(intArray));
56990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
57990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
58990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testSingle() throws Exception {
59990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        Object strArray = Array.newInstance(String.class, 2);
60990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
61990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        String[] array = (String[]) strArray;
62990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array[0] = "entry zero";
63990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        Array.set(strArray, 1, "entry one");
64990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
65990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        //System.out.println("array: " + array);
66990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
67990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals("entry zero", Array.get(strArray, 0));
68990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals("entry one", array[1]);
69990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
70990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals(2, array.length);
71990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        assertEquals(Array.getLength(strArray), array.length);
72990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
73990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
74990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testMultiInt() throws Exception {
75990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int[] dimensions = {3, 2, 1};
76990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        Object intIntIntArray = Array.newInstance(Integer.TYPE, dimensions);
77990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int[][][] array3 = (int[][][]) intIntIntArray;
78990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
79990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array3[0][0][0] = 123;
80990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array3[2][1][0] = 456;
81990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
82990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
83990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            array3[2][1][1] = 768;
84990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            fail("store should have failed");
85990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } catch (ArrayIndexOutOfBoundsException abe) {
86990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            // expected
87990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
88990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
89990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        //System.out.println("array3: " + array3);
90990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
91990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
92990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testMulti() throws Exception {
93990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int[] dimensions = {1, 2, 3};
94990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        Object strStrStrArray = Array.newInstance(String.class, dimensions);
95990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        String[][][] array3 = (String[][][]) strStrStrArray;
96990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
97990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array3[0][0][0] = "zero zero zero";
98990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array3[0][1][2] = "zero one two";
99990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
100990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
101990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            array3[1][0][0] = "bad store";
102990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            fail("store should have failed");
103990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } catch (ArrayIndexOutOfBoundsException abe) {
104990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            // expected
105990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
106990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
107990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
108990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            String[][] array2 = (String[][]) strStrStrArray;
109990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            fail("expecting bad cast");
110990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } catch (ClassCastException cce) {
111990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            // expected
112990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
113990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        //System.out.println("array3: " + array3);
114990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
115990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
116990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int[] dimensions2 = {1, 2};
117990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        strStrStrArray = Array.newInstance(String[].class, dimensions2);
118990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array3 = (String[][][]) strStrStrArray;
119990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array3[0][1] = new String[3];
120990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        array3[0][1][2] = "zero one two";
121990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
122990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            array3[1][0][0] = "bad store";
123990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            fail("store should have failed");
124990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } catch (ArrayIndexOutOfBoundsException abe) {
125990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            // expected
126990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
127990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        //System.out.println("array3: " + array3);
128990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
129990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson}
130990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
131