Main.java revision 1c83cbc4a817acbd7f9abb5b29a2d418a958e6a1
1/* 2 * Copyright (C) 2013 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 17import java.lang.reflect.Method; 18 19public class Main { 20 public static void main(String[] args) { 21 System.loadLibrary("arttest"); 22 testFindClassOnAttachedNativeThread(); 23 testFindFieldOnAttachedNativeThread(); 24 testReflectFieldGetFromAttachedNativeThreadNative(); 25 testCallStaticVoidMethodOnSubClass(); 26 testGetMirandaMethod(); 27 testZeroLengthByteBuffers(); 28 testByteMethod(); 29 testShortMethod(); 30 testBooleanMethod(); 31 testCharMethod(); 32 } 33 34 private static native void testFindClassOnAttachedNativeThread(); 35 36 private static boolean testFindFieldOnAttachedNativeThreadField; 37 38 private static native void testReflectFieldGetFromAttachedNativeThreadNative(); 39 40 public static boolean testReflectFieldGetFromAttachedNativeThreadField; 41 42 private static void testFindFieldOnAttachedNativeThread() { 43 testFindFieldOnAttachedNativeThreadNative(); 44 if (!testFindFieldOnAttachedNativeThreadField) { 45 throw new AssertionError(); 46 } 47 } 48 49 private static native void testFindFieldOnAttachedNativeThreadNative(); 50 51 private static void testCallStaticVoidMethodOnSubClass() { 52 testCallStaticVoidMethodOnSubClassNative(); 53 if (!testCallStaticVoidMethodOnSubClass_SuperClass.executed) { 54 throw new AssertionError(); 55 } 56 } 57 58 private static native void testCallStaticVoidMethodOnSubClassNative(); 59 60 private static class testCallStaticVoidMethodOnSubClass_SuperClass { 61 private static boolean executed = false; 62 private static void execute() { 63 executed = true; 64 } 65 } 66 67 private static class testCallStaticVoidMethodOnSubClass_SubClass 68 extends testCallStaticVoidMethodOnSubClass_SuperClass { 69 } 70 71 private static native Method testGetMirandaMethodNative(); 72 73 private static void testGetMirandaMethod() { 74 Method m = testGetMirandaMethodNative(); 75 if (m.getDeclaringClass() != testGetMirandaMethod_MirandaInterface.class) { 76 throw new AssertionError(); 77 } 78 } 79 80 private static native void testZeroLengthByteBuffers(); 81 82 private static abstract class testGetMirandaMethod_MirandaAbstract implements testGetMirandaMethod_MirandaInterface { 83 public boolean inAbstract() { 84 return true; 85 } 86 } 87 88 private static interface testGetMirandaMethod_MirandaInterface { 89 public boolean inInterface(); 90 } 91 92 // Test sign-extension for values < 32b 93 94 native static byte byteMethod(byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, 95 byte b8, byte b9, byte b10); 96 97 private static void testByteMethod() { 98 byte returns[] = { 0, 1, 2, 127, -1, -2, -128 }; 99 for (int i = 0; i < returns.length; i++) { 100 byte result = byteMethod((byte)i, (byte)2, (byte)(-3), (byte)4, (byte)(-5), (byte)6, 101 (byte)(-7), (byte)8, (byte)(-9), (byte)10); 102 if (returns[i] != result) { 103 System.out.println("Run " + i + " with " + returns[i] + " vs " + result); 104 throw new AssertionError(); 105 } 106 } 107 } 108 109 native static short shortMethod(short s1, short s2, short s3, short s4, short s5, short s6, short s7, 110 short s8, short s9, short s10); 111 112 private static void testShortMethod() { 113 short returns[] = { 0, 1, 2, 127, 32767, -1, -2, -128, -32768 }; 114 for (int i = 0; i < returns.length; i++) { 115 short result = shortMethod((short)i, (short)2, (short)(-3), (short)4, (short)(-5), (short)6, 116 (short)(-7), (short)8, (short)(-9), (short)10); 117 if (returns[i] != result) { 118 System.out.println("Run " + i + " with " + returns[i] + " vs " + result); 119 throw new AssertionError(); 120 } 121 } 122 } 123 124 // Test zero-extension for values < 32b 125 126 native static boolean booleanMethod(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6, boolean b7, 127 boolean b8, boolean b9, boolean b10); 128 129 private static void testBooleanMethod() { 130 if (booleanMethod(false, true, false, true, false, true, false, true, false, true)) { 131 throw new AssertionError(); 132 } 133 134 if (!booleanMethod(true, true, false, true, false, true, false, true, false, true)) { 135 throw new AssertionError(); 136 } 137 } 138 139 native static char charMethod(char c1, char c2, char c3, char c4, char c5, char c6, char c7, 140 char c8, char c9, char c10); 141 142 private static void testCharMethod() { 143 char returns[] = { (char)0, (char)1, (char)2, (char)127, (char)255, (char)256, (char)15000, 144 (char)34000 }; 145 for (int i = 0; i < returns.length; i++) { 146 char result = charMethod((char)i, 'a', 'b', 'c', '0', '1', '2', (char)1234, (char)2345, 147 (char)3456); 148 if (returns[i] != result) { 149 System.out.println("Run " + i + " with " + (int)returns[i] + " vs " + (int)result); 150 throw new AssertionError(); 151 } 152 } 153 } 154} 155