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