1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2014 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker import java.lang.reflect.InvocationTargetException; 18*795d594fSAndroid Build Coastguard Worker import java.lang.reflect.Method; 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard Worker // Note that $opt$ is a marker for the optimizing compiler to test 21*795d594fSAndroid Build Coastguard Worker // it does compile the method. 22*795d594fSAndroid Build Coastguard Worker 23*795d594fSAndroid Build Coastguard Worker public class Main extends TestCase { main(String[] args)24*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) throws Exception { 25*795d594fSAndroid Build Coastguard Worker $opt$TestAllocations(); 26*795d594fSAndroid Build Coastguard Worker $opt$TestWithInitializations(); 27*795d594fSAndroid Build Coastguard Worker $opt$TestNegativeValueNewByteArray(); 28*795d594fSAndroid Build Coastguard Worker $opt$TestNegativeValueNewCharArray(); 29*795d594fSAndroid Build Coastguard Worker testNegativeArraySize(); 30*795d594fSAndroid Build Coastguard Worker testSmaliFilledNewArray(); 31*795d594fSAndroid Build Coastguard Worker testSmaliFillArrayData(); 32*795d594fSAndroid Build Coastguard Worker testSmaliVerifyError(); 33*795d594fSAndroid Build Coastguard Worker } 34*795d594fSAndroid Build Coastguard Worker $opt$TestAllocations()35*795d594fSAndroid Build Coastguard Worker static void $opt$TestAllocations() { 36*795d594fSAndroid Build Coastguard Worker float[] a = new float[1]; 37*795d594fSAndroid Build Coastguard Worker assertEquals(1, a.length); 38*795d594fSAndroid Build Coastguard Worker 39*795d594fSAndroid Build Coastguard Worker double[] b = new double[2]; 40*795d594fSAndroid Build Coastguard Worker assertEquals(2, b.length); 41*795d594fSAndroid Build Coastguard Worker 42*795d594fSAndroid Build Coastguard Worker long[] c = new long[3]; 43*795d594fSAndroid Build Coastguard Worker assertEquals(3, c.length); 44*795d594fSAndroid Build Coastguard Worker 45*795d594fSAndroid Build Coastguard Worker int[] d = new int[4]; 46*795d594fSAndroid Build Coastguard Worker assertEquals(4, d.length); 47*795d594fSAndroid Build Coastguard Worker 48*795d594fSAndroid Build Coastguard Worker short[] e = new short[5]; 49*795d594fSAndroid Build Coastguard Worker assertEquals(5, e.length); 50*795d594fSAndroid Build Coastguard Worker 51*795d594fSAndroid Build Coastguard Worker char[] f = new char[6]; 52*795d594fSAndroid Build Coastguard Worker assertEquals(6, f.length); 53*795d594fSAndroid Build Coastguard Worker 54*795d594fSAndroid Build Coastguard Worker byte[] g = new byte[7]; 55*795d594fSAndroid Build Coastguard Worker assertEquals(7, g.length); 56*795d594fSAndroid Build Coastguard Worker 57*795d594fSAndroid Build Coastguard Worker boolean[] h = new boolean[8]; 58*795d594fSAndroid Build Coastguard Worker assertEquals(8, h.length); 59*795d594fSAndroid Build Coastguard Worker 60*795d594fSAndroid Build Coastguard Worker Object[] i = new Object[9]; 61*795d594fSAndroid Build Coastguard Worker assertEquals(9, i.length); 62*795d594fSAndroid Build Coastguard Worker } 63*795d594fSAndroid Build Coastguard Worker $opt$TestWithInitializations()64*795d594fSAndroid Build Coastguard Worker static void $opt$TestWithInitializations() { 65*795d594fSAndroid Build Coastguard Worker float[] a = { 1.2f }; 66*795d594fSAndroid Build Coastguard Worker assertEquals(1, a.length); 67*795d594fSAndroid Build Coastguard Worker assertEquals(1.2f, a[0]); 68*795d594fSAndroid Build Coastguard Worker 69*795d594fSAndroid Build Coastguard Worker double[] b = { 4.3, 1.2 }; 70*795d594fSAndroid Build Coastguard Worker assertEquals(2, b.length); 71*795d594fSAndroid Build Coastguard Worker assertEquals(4.3, b[0]); 72*795d594fSAndroid Build Coastguard Worker assertEquals(1.2, b[1]); 73*795d594fSAndroid Build Coastguard Worker 74*795d594fSAndroid Build Coastguard Worker long[] c = { 4L, 5L }; 75*795d594fSAndroid Build Coastguard Worker assertEquals(2, c.length); 76*795d594fSAndroid Build Coastguard Worker assertEquals(4L, c[0]); 77*795d594fSAndroid Build Coastguard Worker assertEquals(5L, c[1]); 78*795d594fSAndroid Build Coastguard Worker 79*795d594fSAndroid Build Coastguard Worker int[] d = {1, 2, 3}; 80*795d594fSAndroid Build Coastguard Worker assertEquals(3, d.length); 81*795d594fSAndroid Build Coastguard Worker assertEquals(1, d[0]); 82*795d594fSAndroid Build Coastguard Worker assertEquals(2, d[1]); 83*795d594fSAndroid Build Coastguard Worker assertEquals(3, d[2]); 84*795d594fSAndroid Build Coastguard Worker 85*795d594fSAndroid Build Coastguard Worker short[] e = {4, 5, 6}; 86*795d594fSAndroid Build Coastguard Worker assertEquals(3, e.length); 87*795d594fSAndroid Build Coastguard Worker assertEquals(4, e[0]); 88*795d594fSAndroid Build Coastguard Worker assertEquals(5, e[1]); 89*795d594fSAndroid Build Coastguard Worker assertEquals(6, e[2]); 90*795d594fSAndroid Build Coastguard Worker 91*795d594fSAndroid Build Coastguard Worker char[] f = {'a', 'b'}; 92*795d594fSAndroid Build Coastguard Worker assertEquals(2, f.length); 93*795d594fSAndroid Build Coastguard Worker assertEquals('a', f[0]); 94*795d594fSAndroid Build Coastguard Worker assertEquals('b', f[1]); 95*795d594fSAndroid Build Coastguard Worker 96*795d594fSAndroid Build Coastguard Worker byte[] g = {7, 8, 9}; 97*795d594fSAndroid Build Coastguard Worker assertEquals(3, g.length); 98*795d594fSAndroid Build Coastguard Worker assertEquals(7, g[0]); 99*795d594fSAndroid Build Coastguard Worker assertEquals(8, g[1]); 100*795d594fSAndroid Build Coastguard Worker assertEquals(9, g[2]); 101*795d594fSAndroid Build Coastguard Worker 102*795d594fSAndroid Build Coastguard Worker boolean[] h = {true, false}; 103*795d594fSAndroid Build Coastguard Worker assertEquals(2, h.length); 104*795d594fSAndroid Build Coastguard Worker assertEquals(true, h[0]); 105*795d594fSAndroid Build Coastguard Worker assertEquals(false, h[1]); 106*795d594fSAndroid Build Coastguard Worker 107*795d594fSAndroid Build Coastguard Worker Object obj1 = new Object(); 108*795d594fSAndroid Build Coastguard Worker Object obj2 = new Object(); 109*795d594fSAndroid Build Coastguard Worker Object[] i = {obj1, obj2}; 110*795d594fSAndroid Build Coastguard Worker assertEquals(2, i.length); 111*795d594fSAndroid Build Coastguard Worker assertEquals(obj1, i[0]); 112*795d594fSAndroid Build Coastguard Worker assertEquals(obj2, i[1]); 113*795d594fSAndroid Build Coastguard Worker } 114*795d594fSAndroid Build Coastguard Worker $opt$TestNegativeValueNewByteArray()115*795d594fSAndroid Build Coastguard Worker static void $opt$TestNegativeValueNewByteArray() { 116*795d594fSAndroid Build Coastguard Worker // Use an array initializer to hint the use of filled-new-array. 117*795d594fSAndroid Build Coastguard Worker byte[] a = { (byte)0xa0, (byte)0xa1, (byte)0xa2, (byte)0xa3, 118*795d594fSAndroid Build Coastguard Worker (byte)0xa4, (byte)0xa5, (byte)0xa6, (byte)0xa7 }; 119*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < a.length; i++) { 120*795d594fSAndroid Build Coastguard Worker assertEquals((byte)0xa0 + i, a[i]); 121*795d594fSAndroid Build Coastguard Worker } 122*795d594fSAndroid Build Coastguard Worker } 123*795d594fSAndroid Build Coastguard Worker $opt$TestNegativeValueNewCharArray()124*795d594fSAndroid Build Coastguard Worker static void $opt$TestNegativeValueNewCharArray() { 125*795d594fSAndroid Build Coastguard Worker // Use an array initializer to hint the use of filled-new-array. 126*795d594fSAndroid Build Coastguard Worker char[] a = { (char)0xa000, (char)0xa001, (char)0xa002, (char)0xa003, 127*795d594fSAndroid Build Coastguard Worker (char)0xa004, (char)0xa005, (char)0xa006, (char)0xa007 }; 128*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < a.length; i++) { 129*795d594fSAndroid Build Coastguard Worker assertEquals((char)0xa000 + i, a[i]); 130*795d594fSAndroid Build Coastguard Worker } 131*795d594fSAndroid Build Coastguard Worker } 132*795d594fSAndroid Build Coastguard Worker testNegativeArraySize()133*795d594fSAndroid Build Coastguard Worker static void testNegativeArraySize() { 134*795d594fSAndroid Build Coastguard Worker int i = 0; 135*795d594fSAndroid Build Coastguard Worker try { 136*795d594fSAndroid Build Coastguard Worker $opt$TestNegativeArraySize(); 137*795d594fSAndroid Build Coastguard Worker } catch (NegativeArraySizeException e) { 138*795d594fSAndroid Build Coastguard Worker i = 1; 139*795d594fSAndroid Build Coastguard Worker } 140*795d594fSAndroid Build Coastguard Worker assertEquals(i, 1); 141*795d594fSAndroid Build Coastguard Worker } 142*795d594fSAndroid Build Coastguard Worker $opt$TestNegativeArraySize()143*795d594fSAndroid Build Coastguard Worker static int[] $opt$TestNegativeArraySize() { 144*795d594fSAndroid Build Coastguard Worker int[] array = new int[-1]; 145*795d594fSAndroid Build Coastguard Worker return null; 146*795d594fSAndroid Build Coastguard Worker } 147*795d594fSAndroid Build Coastguard Worker testSmaliFilledNewArray()148*795d594fSAndroid Build Coastguard Worker public static void testSmaliFilledNewArray() throws Exception { 149*795d594fSAndroid Build Coastguard Worker Class<?> c = Class.forName("FilledNewArray"); 150*795d594fSAndroid Build Coastguard Worker 151*795d594fSAndroid Build Coastguard Worker { 152*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("newInt", Integer.TYPE, Integer.TYPE, Integer.TYPE); 153*795d594fSAndroid Build Coastguard Worker Object[] args = {new Integer(1), new Integer(2), new Integer(3)}; 154*795d594fSAndroid Build Coastguard Worker int[] result = (int[])m.invoke(null, args); 155*795d594fSAndroid Build Coastguard Worker assertEquals(3, result.length); 156*795d594fSAndroid Build Coastguard Worker assertEquals(1, result[0]); 157*795d594fSAndroid Build Coastguard Worker assertEquals(2, result[1]); 158*795d594fSAndroid Build Coastguard Worker assertEquals(3, result[2]); 159*795d594fSAndroid Build Coastguard Worker } 160*795d594fSAndroid Build Coastguard Worker 161*795d594fSAndroid Build Coastguard Worker { 162*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("newRef", Object.class, Object.class); 163*795d594fSAndroid Build Coastguard Worker Object[] args = {new Integer(1), new Integer(2)}; 164*795d594fSAndroid Build Coastguard Worker Object[] result = (Object[])m.invoke(null, args); 165*795d594fSAndroid Build Coastguard Worker assertEquals(2, result.length); 166*795d594fSAndroid Build Coastguard Worker assertEquals(args[0], result[0]); 167*795d594fSAndroid Build Coastguard Worker assertEquals(args[1], result[1]); 168*795d594fSAndroid Build Coastguard Worker } 169*795d594fSAndroid Build Coastguard Worker 170*795d594fSAndroid Build Coastguard Worker { 171*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("newArray", int[].class, int[].class); 172*795d594fSAndroid Build Coastguard Worker Object[] args = {new int[0], new int[1]}; 173*795d594fSAndroid Build Coastguard Worker Object[] result = (Object[])m.invoke(null, args); 174*795d594fSAndroid Build Coastguard Worker assertEquals(2, result.length); 175*795d594fSAndroid Build Coastguard Worker assertEquals(args[0], result[0]); 176*795d594fSAndroid Build Coastguard Worker assertEquals(args[1], result[1]); 177*795d594fSAndroid Build Coastguard Worker } 178*795d594fSAndroid Build Coastguard Worker 179*795d594fSAndroid Build Coastguard Worker { 180*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("newIntRange", Integer.TYPE, Integer.TYPE, Integer.TYPE); 181*795d594fSAndroid Build Coastguard Worker Object[] args = {new Integer(1), new Integer(2), new Integer(3)}; 182*795d594fSAndroid Build Coastguard Worker int[] result = (int[])m.invoke(null, args); 183*795d594fSAndroid Build Coastguard Worker assertEquals(3, result.length); 184*795d594fSAndroid Build Coastguard Worker assertEquals(1, result[0]); 185*795d594fSAndroid Build Coastguard Worker assertEquals(2, result[1]); 186*795d594fSAndroid Build Coastguard Worker assertEquals(3, result[2]); 187*795d594fSAndroid Build Coastguard Worker } 188*795d594fSAndroid Build Coastguard Worker 189*795d594fSAndroid Build Coastguard Worker { 190*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("newRefRange", Object.class, Object.class); 191*795d594fSAndroid Build Coastguard Worker Object[] args = {new Integer(1), new Integer(2)}; 192*795d594fSAndroid Build Coastguard Worker Object[] result = (Object[])m.invoke(null, args); 193*795d594fSAndroid Build Coastguard Worker assertEquals(2, result.length); 194*795d594fSAndroid Build Coastguard Worker assertEquals(args[0], result[0]); 195*795d594fSAndroid Build Coastguard Worker assertEquals(args[1], result[1]); 196*795d594fSAndroid Build Coastguard Worker } 197*795d594fSAndroid Build Coastguard Worker 198*795d594fSAndroid Build Coastguard Worker { 199*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("newArrayRange", int[].class, int[].class); 200*795d594fSAndroid Build Coastguard Worker Object[] args = {new int[0], new int[1]}; 201*795d594fSAndroid Build Coastguard Worker Object[] result = (Object[])m.invoke(null, args); 202*795d594fSAndroid Build Coastguard Worker assertEquals(2, result.length); 203*795d594fSAndroid Build Coastguard Worker assertEquals(args[0], result[0]); 204*795d594fSAndroid Build Coastguard Worker assertEquals(args[1], result[1]); 205*795d594fSAndroid Build Coastguard Worker } 206*795d594fSAndroid Build Coastguard Worker } 207*795d594fSAndroid Build Coastguard Worker testSmaliVerifyError()208*795d594fSAndroid Build Coastguard Worker public static void testSmaliVerifyError() throws Exception { 209*795d594fSAndroid Build Coastguard Worker Error error = null; 210*795d594fSAndroid Build Coastguard Worker // Ensure the elements in filled-new-array must be assignable 211*795d594fSAndroid Build Coastguard Worker // to the array component type. 212*795d594fSAndroid Build Coastguard Worker try { 213*795d594fSAndroid Build Coastguard Worker Class.forName("FilledNewArrayVerifyError"); 214*795d594fSAndroid Build Coastguard Worker } catch (VerifyError e) { 215*795d594fSAndroid Build Coastguard Worker error = e; 216*795d594fSAndroid Build Coastguard Worker } 217*795d594fSAndroid Build Coastguard Worker assertNotNull(error); 218*795d594fSAndroid Build Coastguard Worker } 219*795d594fSAndroid Build Coastguard Worker testSmaliFillArrayData()220*795d594fSAndroid Build Coastguard Worker public static void testSmaliFillArrayData() throws Exception { 221*795d594fSAndroid Build Coastguard Worker Class<?> c = Class.forName("FillArrayData"); 222*795d594fSAndroid Build Coastguard Worker { 223*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("emptyIntArray", int[].class); 224*795d594fSAndroid Build Coastguard Worker int[] array = new int[0]; 225*795d594fSAndroid Build Coastguard Worker Object[] args = { array }; 226*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 227*795d594fSAndroid Build Coastguard Worker assertEquals(0, array.length); 228*795d594fSAndroid Build Coastguard Worker 229*795d594fSAndroid Build Coastguard Worker array = new int[2]; 230*795d594fSAndroid Build Coastguard Worker args[0] = array; 231*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 232*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 233*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[0]); 234*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[1]); 235*795d594fSAndroid Build Coastguard Worker 236*795d594fSAndroid Build Coastguard Worker array = new int[] { 42, -42 }; 237*795d594fSAndroid Build Coastguard Worker args[0] = array; 238*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 239*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 240*795d594fSAndroid Build Coastguard Worker assertEquals(42, array[0]); 241*795d594fSAndroid Build Coastguard Worker assertEquals(-42, array[1]); 242*795d594fSAndroid Build Coastguard Worker 243*795d594fSAndroid Build Coastguard Worker Throwable exception = null; 244*795d594fSAndroid Build Coastguard Worker args[0] = null; 245*795d594fSAndroid Build Coastguard Worker try { 246*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 247*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 248*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 249*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof NullPointerException); 250*795d594fSAndroid Build Coastguard Worker } 251*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 252*795d594fSAndroid Build Coastguard Worker } 253*795d594fSAndroid Build Coastguard Worker 254*795d594fSAndroid Build Coastguard Worker { 255*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("intArray", int[].class); 256*795d594fSAndroid Build Coastguard Worker int[] array = new int[7]; 257*795d594fSAndroid Build Coastguard Worker Object[] args = { array }; 258*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 259*795d594fSAndroid Build Coastguard Worker assertEquals(7, array.length); 260*795d594fSAndroid Build Coastguard Worker assertEquals(1, array[0]); 261*795d594fSAndroid Build Coastguard Worker assertEquals(2, array[1]); 262*795d594fSAndroid Build Coastguard Worker assertEquals(3, array[2]); 263*795d594fSAndroid Build Coastguard Worker assertEquals(4, array[3]); 264*795d594fSAndroid Build Coastguard Worker assertEquals(5, array[4]); 265*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[5]); 266*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[6]); 267*795d594fSAndroid Build Coastguard Worker 268*795d594fSAndroid Build Coastguard Worker array = new int[2]; 269*795d594fSAndroid Build Coastguard Worker args[0] = array; 270*795d594fSAndroid Build Coastguard Worker Throwable exception = null; 271*795d594fSAndroid Build Coastguard Worker try { 272*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 273*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 274*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 275*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof IndexOutOfBoundsException); 276*795d594fSAndroid Build Coastguard Worker } 277*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 278*795d594fSAndroid Build Coastguard Worker exception = null; 279*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 280*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[0]); 281*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[1]); 282*795d594fSAndroid Build Coastguard Worker 283*795d594fSAndroid Build Coastguard Worker args[0] = null; 284*795d594fSAndroid Build Coastguard Worker try { 285*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 286*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 287*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 288*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof NullPointerException); 289*795d594fSAndroid Build Coastguard Worker } 290*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 291*795d594fSAndroid Build Coastguard Worker } 292*795d594fSAndroid Build Coastguard Worker 293*795d594fSAndroid Build Coastguard Worker { 294*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("intArrayFillInstructionAfterData", int[].class); 295*795d594fSAndroid Build Coastguard Worker int[] array = new int[7]; 296*795d594fSAndroid Build Coastguard Worker Object[] args = { array }; 297*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 298*795d594fSAndroid Build Coastguard Worker assertEquals(7, array.length); 299*795d594fSAndroid Build Coastguard Worker assertEquals(1, array[0]); 300*795d594fSAndroid Build Coastguard Worker assertEquals(2, array[1]); 301*795d594fSAndroid Build Coastguard Worker assertEquals(3, array[2]); 302*795d594fSAndroid Build Coastguard Worker assertEquals(4, array[3]); 303*795d594fSAndroid Build Coastguard Worker assertEquals(5, array[4]); 304*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[5]); 305*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[6]); 306*795d594fSAndroid Build Coastguard Worker 307*795d594fSAndroid Build Coastguard Worker array = new int[2]; 308*795d594fSAndroid Build Coastguard Worker args[0] = array; 309*795d594fSAndroid Build Coastguard Worker Throwable exception = null; 310*795d594fSAndroid Build Coastguard Worker try { 311*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 312*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 313*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 314*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof IndexOutOfBoundsException); 315*795d594fSAndroid Build Coastguard Worker } 316*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 317*795d594fSAndroid Build Coastguard Worker exception = null; 318*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 319*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[0]); 320*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[1]); 321*795d594fSAndroid Build Coastguard Worker 322*795d594fSAndroid Build Coastguard Worker args[0] = null; 323*795d594fSAndroid Build Coastguard Worker try { 324*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 325*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 326*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 327*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof NullPointerException); 328*795d594fSAndroid Build Coastguard Worker } 329*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 330*795d594fSAndroid Build Coastguard Worker } 331*795d594fSAndroid Build Coastguard Worker 332*795d594fSAndroid Build Coastguard Worker { 333*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("shortArray", short[].class); 334*795d594fSAndroid Build Coastguard Worker short[] array = new short[7]; 335*795d594fSAndroid Build Coastguard Worker Object[] args = { array }; 336*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 337*795d594fSAndroid Build Coastguard Worker assertEquals(7, array.length); 338*795d594fSAndroid Build Coastguard Worker assertEquals(1, array[0]); 339*795d594fSAndroid Build Coastguard Worker assertEquals(2, array[1]); 340*795d594fSAndroid Build Coastguard Worker assertEquals(3, array[2]); 341*795d594fSAndroid Build Coastguard Worker assertEquals(4, array[3]); 342*795d594fSAndroid Build Coastguard Worker assertEquals(5, array[4]); 343*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[5]); 344*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[6]); 345*795d594fSAndroid Build Coastguard Worker 346*795d594fSAndroid Build Coastguard Worker array = new short[2]; 347*795d594fSAndroid Build Coastguard Worker args[0] = array; 348*795d594fSAndroid Build Coastguard Worker Throwable exception = null; 349*795d594fSAndroid Build Coastguard Worker try { 350*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 351*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 352*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 353*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof IndexOutOfBoundsException); 354*795d594fSAndroid Build Coastguard Worker } 355*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 356*795d594fSAndroid Build Coastguard Worker exception = null; 357*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 358*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[0]); 359*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[1]); 360*795d594fSAndroid Build Coastguard Worker 361*795d594fSAndroid Build Coastguard Worker args[0] = null; 362*795d594fSAndroid Build Coastguard Worker try { 363*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 364*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 365*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 366*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof NullPointerException); 367*795d594fSAndroid Build Coastguard Worker } 368*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 369*795d594fSAndroid Build Coastguard Worker } 370*795d594fSAndroid Build Coastguard Worker 371*795d594fSAndroid Build Coastguard Worker { 372*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("longArray", long[].class); 373*795d594fSAndroid Build Coastguard Worker long[] array = new long[7]; 374*795d594fSAndroid Build Coastguard Worker Object[] args = { array }; 375*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 376*795d594fSAndroid Build Coastguard Worker assertEquals(7, array.length); 377*795d594fSAndroid Build Coastguard Worker assertEquals(1L, array[0]); 378*795d594fSAndroid Build Coastguard Worker assertEquals(2L, array[1]); 379*795d594fSAndroid Build Coastguard Worker assertEquals(3L, array[2]); 380*795d594fSAndroid Build Coastguard Worker assertEquals(4L, array[3]); 381*795d594fSAndroid Build Coastguard Worker assertEquals(5L, array[4]); 382*795d594fSAndroid Build Coastguard Worker assertEquals(0L, array[5]); 383*795d594fSAndroid Build Coastguard Worker assertEquals(0L, array[6]); 384*795d594fSAndroid Build Coastguard Worker 385*795d594fSAndroid Build Coastguard Worker array = new long[2]; 386*795d594fSAndroid Build Coastguard Worker args[0] = array; 387*795d594fSAndroid Build Coastguard Worker Throwable exception = null; 388*795d594fSAndroid Build Coastguard Worker try { 389*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 390*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 391*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 392*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof IndexOutOfBoundsException); 393*795d594fSAndroid Build Coastguard Worker } 394*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 395*795d594fSAndroid Build Coastguard Worker exception = null; 396*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 397*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[0]); 398*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[1]); 399*795d594fSAndroid Build Coastguard Worker 400*795d594fSAndroid Build Coastguard Worker args[0] = null; 401*795d594fSAndroid Build Coastguard Worker try { 402*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 403*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 404*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 405*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof NullPointerException); 406*795d594fSAndroid Build Coastguard Worker } 407*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 408*795d594fSAndroid Build Coastguard Worker } 409*795d594fSAndroid Build Coastguard Worker 410*795d594fSAndroid Build Coastguard Worker { 411*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("charArray", char[].class); 412*795d594fSAndroid Build Coastguard Worker char[] array = new char[7]; 413*795d594fSAndroid Build Coastguard Worker Object[] args = { array }; 414*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 415*795d594fSAndroid Build Coastguard Worker assertEquals(7, array.length); 416*795d594fSAndroid Build Coastguard Worker assertEquals(1, array[0]); 417*795d594fSAndroid Build Coastguard Worker assertEquals(2, array[1]); 418*795d594fSAndroid Build Coastguard Worker assertEquals(3, array[2]); 419*795d594fSAndroid Build Coastguard Worker assertEquals(4, array[3]); 420*795d594fSAndroid Build Coastguard Worker assertEquals(5, array[4]); 421*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[5]); 422*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[6]); 423*795d594fSAndroid Build Coastguard Worker 424*795d594fSAndroid Build Coastguard Worker array = new char[2]; 425*795d594fSAndroid Build Coastguard Worker args[0] = array; 426*795d594fSAndroid Build Coastguard Worker Throwable exception = null; 427*795d594fSAndroid Build Coastguard Worker try { 428*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 429*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 430*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 431*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof IndexOutOfBoundsException); 432*795d594fSAndroid Build Coastguard Worker } 433*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 434*795d594fSAndroid Build Coastguard Worker exception = null; 435*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 436*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[0]); 437*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[1]); 438*795d594fSAndroid Build Coastguard Worker 439*795d594fSAndroid Build Coastguard Worker args[0] = null; 440*795d594fSAndroid Build Coastguard Worker try { 441*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 442*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 443*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 444*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof NullPointerException); 445*795d594fSAndroid Build Coastguard Worker } 446*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 447*795d594fSAndroid Build Coastguard Worker } 448*795d594fSAndroid Build Coastguard Worker 449*795d594fSAndroid Build Coastguard Worker { 450*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("byteArray", byte[].class); 451*795d594fSAndroid Build Coastguard Worker byte[] array = new byte[7]; 452*795d594fSAndroid Build Coastguard Worker Object[] args = { array }; 453*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 454*795d594fSAndroid Build Coastguard Worker assertEquals(7, array.length); 455*795d594fSAndroid Build Coastguard Worker assertEquals(1, array[0]); 456*795d594fSAndroid Build Coastguard Worker assertEquals(2, array[1]); 457*795d594fSAndroid Build Coastguard Worker assertEquals(3, array[2]); 458*795d594fSAndroid Build Coastguard Worker assertEquals(4, array[3]); 459*795d594fSAndroid Build Coastguard Worker assertEquals(5, array[4]); 460*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[5]); 461*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[6]); 462*795d594fSAndroid Build Coastguard Worker 463*795d594fSAndroid Build Coastguard Worker array = new byte[2]; 464*795d594fSAndroid Build Coastguard Worker args[0] = array; 465*795d594fSAndroid Build Coastguard Worker Throwable exception = null; 466*795d594fSAndroid Build Coastguard Worker try { 467*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 468*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 469*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 470*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof IndexOutOfBoundsException); 471*795d594fSAndroid Build Coastguard Worker } 472*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 473*795d594fSAndroid Build Coastguard Worker exception = null; 474*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 475*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[0]); 476*795d594fSAndroid Build Coastguard Worker assertEquals(0, array[1]); 477*795d594fSAndroid Build Coastguard Worker 478*795d594fSAndroid Build Coastguard Worker args[0] = null; 479*795d594fSAndroid Build Coastguard Worker try { 480*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 481*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 482*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 483*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof NullPointerException); 484*795d594fSAndroid Build Coastguard Worker } 485*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 486*795d594fSAndroid Build Coastguard Worker } 487*795d594fSAndroid Build Coastguard Worker 488*795d594fSAndroid Build Coastguard Worker { 489*795d594fSAndroid Build Coastguard Worker Method m = c.getMethod("booleanArray", boolean[].class); 490*795d594fSAndroid Build Coastguard Worker boolean[] array = new boolean[5]; 491*795d594fSAndroid Build Coastguard Worker Object[] args = { array }; 492*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 493*795d594fSAndroid Build Coastguard Worker assertEquals(5, array.length); 494*795d594fSAndroid Build Coastguard Worker assertEquals(false, array[0]); 495*795d594fSAndroid Build Coastguard Worker assertEquals(true, array[1]); 496*795d594fSAndroid Build Coastguard Worker assertEquals(true, array[2]); 497*795d594fSAndroid Build Coastguard Worker assertEquals(false, array[3]); 498*795d594fSAndroid Build Coastguard Worker assertEquals(false, array[4]); 499*795d594fSAndroid Build Coastguard Worker 500*795d594fSAndroid Build Coastguard Worker array = new boolean[2]; 501*795d594fSAndroid Build Coastguard Worker args[0] = array; 502*795d594fSAndroid Build Coastguard Worker Throwable exception = null; 503*795d594fSAndroid Build Coastguard Worker try { 504*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 505*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 506*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 507*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof IndexOutOfBoundsException); 508*795d594fSAndroid Build Coastguard Worker } 509*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 510*795d594fSAndroid Build Coastguard Worker exception = null; 511*795d594fSAndroid Build Coastguard Worker // Test that nothing has been written to the array. 512*795d594fSAndroid Build Coastguard Worker assertEquals(false, array[0]); 513*795d594fSAndroid Build Coastguard Worker assertEquals(false, array[1]); 514*795d594fSAndroid Build Coastguard Worker 515*795d594fSAndroid Build Coastguard Worker args[0] = null; 516*795d594fSAndroid Build Coastguard Worker try { 517*795d594fSAndroid Build Coastguard Worker m.invoke(null, args); 518*795d594fSAndroid Build Coastguard Worker } catch (InvocationTargetException e) { 519*795d594fSAndroid Build Coastguard Worker exception = e.getCause(); 520*795d594fSAndroid Build Coastguard Worker assertTrue(exception instanceof NullPointerException); 521*795d594fSAndroid Build Coastguard Worker } 522*795d594fSAndroid Build Coastguard Worker assertNotNull(exception); 523*795d594fSAndroid Build Coastguard Worker } 524*795d594fSAndroid Build Coastguard Worker } 525*795d594fSAndroid Build Coastguard Worker } 526