1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package dalvik.system; 18 19 import java.lang.reflect.Array; 20 import junit.framework.TestCase; 21 22 /** 23 * Test VMRuntime behavior. 24 */ 25 public final class VMRuntimeTest extends TestCase { 26 doTestNewNonMovableArray(Class<?> componentType, int step, int maxLength)27 private void doTestNewNonMovableArray(Class<?> componentType, int step, int maxLength) { 28 // Can't create negative sized arrays. 29 try { 30 Object array = VMRuntime.getRuntime().newNonMovableArray(componentType, -1); 31 assertTrue(false); 32 } catch (NegativeArraySizeException expected) { 33 } 34 35 try { 36 Object array = VMRuntime.getRuntime().newNonMovableArray(componentType, Integer.MIN_VALUE); 37 assertTrue(false); 38 } catch (NegativeArraySizeException expected) { 39 } 40 41 // Allocate arrays in a loop and check their properties. 42 for (int i = 0; i <= maxLength; i += step) { 43 Object array = VMRuntime.getRuntime().newNonMovableArray(componentType, i); 44 assertTrue(array.getClass().isArray()); 45 assertEquals(array.getClass().getComponentType(), componentType); 46 assertEquals(Array.getLength(array), i); 47 } 48 } 49 testNewNonMovableArray()50 public void testNewNonMovableArray() { 51 // Can't create arrays with no component type. 52 try { 53 Object array = VMRuntime.getRuntime().newNonMovableArray(null, 0); 54 assertTrue(false); 55 } catch (NullPointerException expected) { 56 } 57 58 // Can't create arrays of void. 59 try { 60 Object array = VMRuntime.getRuntime().newNonMovableArray(void.class, 0); 61 assertTrue(false); 62 } catch (NoClassDefFoundError expected) { 63 } 64 65 int maxLengthForLoop = 16 * 1024; 66 int step = 67; 67 doTestNewNonMovableArray(boolean.class, step, maxLengthForLoop); 68 doTestNewNonMovableArray(byte.class, step, maxLengthForLoop); 69 doTestNewNonMovableArray(char.class, step, maxLengthForLoop); 70 doTestNewNonMovableArray(short.class, step, maxLengthForLoop); 71 doTestNewNonMovableArray(int.class, step, maxLengthForLoop); 72 doTestNewNonMovableArray(long.class, step, maxLengthForLoop); 73 doTestNewNonMovableArray(float.class, step, maxLengthForLoop); 74 doTestNewNonMovableArray(double.class, step, maxLengthForLoop); 75 doTestNewNonMovableArray(Object.class, step, maxLengthForLoop); 76 doTestNewNonMovableArray(Number.class, step, maxLengthForLoop); 77 doTestNewNonMovableArray(String.class, step, maxLengthForLoop); 78 doTestNewNonMovableArray(Runnable.class, step, maxLengthForLoop); 79 } 80 doTestNewUnpaddedArray(Class<?> componentType, int step, int maxLength)81 private void doTestNewUnpaddedArray(Class<?> componentType, int step, int maxLength) { 82 // Can't create negative sized arrays. 83 try { 84 Object array = VMRuntime.getRuntime().newUnpaddedArray(componentType, -1); 85 assertTrue(false); 86 } catch (NegativeArraySizeException expected) { 87 } 88 89 try { 90 Object array = VMRuntime.getRuntime().newUnpaddedArray(componentType, Integer.MIN_VALUE); 91 assertTrue(false); 92 } catch (NegativeArraySizeException expected) { 93 } 94 95 // Allocate arrays in a loop and check their properties. 96 for (int i = 0; i <= maxLength; i += step) { 97 Object array = VMRuntime.getRuntime().newUnpaddedArray(componentType, i); 98 assertTrue(array.getClass().isArray()); 99 assertEquals(array.getClass().getComponentType(), componentType); 100 assertTrue(Array.getLength(array) >= i); 101 } 102 } 103 testNewUnpaddedArray()104 public void testNewUnpaddedArray() { 105 // Can't create arrays with no component type. 106 try { 107 Object array = VMRuntime.getRuntime().newUnpaddedArray(null, 0); 108 assertTrue(false); 109 } catch (NullPointerException expected) { 110 } 111 112 // Can't create arrays of void. 113 try { 114 Object array = VMRuntime.getRuntime().newUnpaddedArray(void.class, 0); 115 assertTrue(false); 116 } catch (NoClassDefFoundError expected) { 117 } 118 119 int maxLengthForLoop = 16 * 1024; 120 int step = 67; 121 doTestNewUnpaddedArray(boolean.class, step, maxLengthForLoop); 122 doTestNewUnpaddedArray(byte.class, step, maxLengthForLoop); 123 doTestNewUnpaddedArray(char.class, step, maxLengthForLoop); 124 doTestNewUnpaddedArray(short.class, step, maxLengthForLoop); 125 doTestNewUnpaddedArray(int.class, step, maxLengthForLoop); 126 doTestNewUnpaddedArray(long.class, step, maxLengthForLoop); 127 doTestNewUnpaddedArray(float.class, step, maxLengthForLoop); 128 doTestNewUnpaddedArray(double.class, step, maxLengthForLoop); 129 doTestNewUnpaddedArray(Object.class, step, maxLengthForLoop); 130 doTestNewUnpaddedArray(Number.class, step, maxLengthForLoop); 131 doTestNewUnpaddedArray(String.class, step, maxLengthForLoop); 132 doTestNewUnpaddedArray(Runnable.class, step, maxLengthForLoop); 133 } 134 } 135 136