/art/test/045-reflect-array/src/Main.java
https://gitlab.com/brian0218/rk3288_r-box_android4.4.2_sdk · Java · 269 lines · 216 code · 45 blank · 8 comment · 33 complexity · 312037e9445765be32e594a6040a7700 MD5 · raw file
- /*
- * Copyright 2006 The Android Open Source Project
- */
- import java.lang.reflect.Array;
- /**
- * Test java.lang.reflect.Array.
- */
- public class Main {
- public static void main(String[] args) {
- testSingleInt();
- testSingleChar();
- testSingleShort();
- testSingleLong();
- testSingle();
- testMultiInt();
- testMulti();
- testAbstract();
- System.out.println("ReflectArrayTest passed");
- }
- static void testSingleInt() {
- Object intArray;
- intArray = Array.newInstance(Integer.TYPE, 2);
- int[] array = (int[]) intArray;
- array[0] = 5;
- Array.setInt(intArray, 1, 6);
- if (Array.getInt(intArray, 0) != 5)
- throw new RuntimeException();
- if (array[1] != 6)
- throw new RuntimeException();
- try {
- array[2] = 27;
- throw new RuntimeException("store should have failed");
- } catch (ArrayIndexOutOfBoundsException abe) { }
- try {
- Array.setInt(intArray, 2, 27);
- throw new RuntimeException("store should have failed");
- } catch (ArrayIndexOutOfBoundsException abe) { }
- if (array.length != Array.getLength(intArray) ||
- array.length != 2)
- {
- throw new RuntimeException("bad len");
- }
- Integer x123 = Integer.valueOf(123);
- Integer x456 = Integer.valueOf(456);
- Array.set(intArray, 0, x123);
- Array.set(intArray, 1, x456);
- if (!Array.get(intArray, 0).equals(x123) || !Array.get(intArray, 1).equals(x456)) {
- throw new RuntimeException("bad 123 or 456");
- }
- int[][] wrongArray;
- try {
- wrongArray = (int[][]) intArray;
- throw new RuntimeException("cast should have failed");
- } catch (ClassCastException cce) { }
- intArray = Array.newInstance(Integer.TYPE, 0);
- if (Array.getLength(intArray) != 0)
- throw new RuntimeException();
- System.out.println("ReflectArrayTest.testSingleInt passed");
- }
- static void testSingleChar() {
- Object charArray = Array.newInstance(Character.TYPE, 7);
- char[] array = (char[]) charArray;
- array[0] = '0';
- array[1] = 'W';
- array[2] = '2';
- array[3] = '3';
- array[4] = 'X';
- array[5] = '5';
- array[6] = '6';
- Array.setChar(charArray, 1, '1');
- Array.setChar(charArray, 4, '4');
- try {
- Array.setShort(charArray, 3, (short) 'Y');
- throw new RuntimeException("shouldn't allow short in char array");
- } catch (IllegalArgumentException iae) {}
- try {
- Array.setInt(charArray, 5, 'Z');
- throw new RuntimeException("shouldn't allow int in char array");
- } catch (IllegalArgumentException iae) {}
- try {
- for (int i = 0; i < array.length; i++) {
- if (Array.getInt(charArray, i) - '0' != i) {
- throw new RuntimeException("mismatch: " + i + " is " + array[i]);
- }
- }
- if (Array.getInt(charArray, 4) != '4') {
- throw new RuntimeException("load should have worked");
- }
- } catch (IllegalArgumentException iae) {
- iae.printStackTrace();
- }
- try {
- Array.getByte(charArray, 2);
- throw new RuntimeException("shouldn't allow read of char as byte");
- } catch (IllegalArgumentException iae) {}
- Array.setChar(charArray, 3, (char) 0xffff);
- try {
- if (Array.getInt(charArray, 3) != 0xffff) {
- throw new RuntimeException("char got sign-extended? "
- + Array.getInt(charArray, 3));
- }
- } catch (IllegalArgumentException iae) {
- iae.printStackTrace();
- }
- System.out.println("ReflectArrayTest.testSingleChar passed");
- }
- static void testSingleShort() {
- Object shortArray = Array.newInstance(Short.TYPE, 1);
- Array.setShort(shortArray, 0, (short) -1);
- if (Array.getInt(shortArray, 0) != -1) {
- throw new RuntimeException("short didn't get sign-extended");
- }
- Short box = (Short) Array.get(shortArray, 0);
- System.out.println("ReflectArrayTest.testSingleShort passed");
- }
- static void testSingleLong() {
- Object longArray = Array.newInstance(Long.TYPE, 2);
- Array.setInt(longArray, 0, 123);
- Array.setLong(longArray, 1, 0x1122334455667788L);
- try {
- Array.getInt(longArray, 0);
- throw new RuntimeException("shouldn't allow read of long as int");
- } catch (IllegalArgumentException iae) {}
- long[] array = (long[]) longArray;
- if (array[0] != 123 || array[1] != 0x1122334455667788L) {
- throw new RuntimeException();
- }
- float f = Array.getFloat(longArray, 0);
- if (f < 122.9 || f > 123.1) {
- throw new RuntimeException("long-as-float failed - " + f);
- }
- if (Array.getLong(longArray, 1) != 0x1122334455667788L) {
- throw new RuntimeException("long1 failed");
- }
- System.out.println("ReflectArrayTest.testSingleLong passed");
- }
- static void testSingle() {
- Object strArray;
- strArray = Array.newInstance(String.class, 2);
- String[] array = (String[]) strArray;
- array[0] = "entry zero";
- Array.set(strArray, 1, "entry one");
- try {
- Array.set(strArray, 2, "entry two");
- throw new RuntimeException("store should have failed");
- } catch (ArrayIndexOutOfBoundsException abe) { }
- //System.out.println("array: " + array);
- if (!"entry zero".equals(Array.get(strArray, 0)))
- throw new RuntimeException();
- if (!"entry one".equals(array[1]))
- throw new RuntimeException();
- if (array.length != Array.getLength(strArray) ||
- array.length != 2)
- {
- throw new RuntimeException("bad len");
- }
- try {
- Array.set(strArray, 0, new Integer(5));
- throw new RuntimeException("store of Integer should have failed");
- } catch (IllegalArgumentException iae) {}
- System.out.println("ReflectArrayTest.testSingle passed");
- }
- static void testMultiInt() {
- Object intIntIntArray;
- int[] dimensions = { 3, 2, 1 };
- intIntIntArray = Array.newInstance(Integer.TYPE, dimensions);
- int[][][] array3 = (int[][][]) intIntIntArray;
- array3[0][0][0] = 123; // trouble
- array3[2][1][0] = 456;
- try {
- array3[2][1][1] = 768;
- throw new RuntimeException("store should have failed");
- }
- catch (ArrayIndexOutOfBoundsException abe) {
- }
- System.out.println("ReflectArrayTest.testMultiInt passed");
- }
- static void testMulti() {
- Object strStrStrArray;
- int[] dimensions = { 1, 2, 3 };
- strStrStrArray = Array.newInstance(String.class, dimensions);
- String[][][] array3 = (String[][][]) strStrStrArray;
- array3[0][0][0] = "zero zero zero";
- array3[0][1][2] = "zero one two";
- try {
- array3[1][0][0] = "bad store";
- throw new RuntimeException("store should have failed");
- }
- catch (ArrayIndexOutOfBoundsException abe) {
- }
- try {
- String[][] array2 = (String[][]) strStrStrArray;
- throw new RuntimeException("expecting bad cast");
- }
- catch (ClassCastException cce) {
- }
- String[] strar = new String[4];
- strar[2] = "zero one two ++";
- array3[0][1] = strar;
- System.out.println(array3[0][1][2]);
- //System.out.println("array3: " + array3);
- int[] dimensions2 = { 1, 2 };
- strStrStrArray = Array.newInstance(String[].class, dimensions2);
- array3 = (String[][][]) strStrStrArray;
- array3[0][1] = new String[3];
- array3[0][1][2] = "zero one two";
- try {
- array3[1][0][0] = "bad store";
- throw new RuntimeException("store should have failed");
- }
- catch (ArrayIndexOutOfBoundsException abe) {
- }
- System.out.println("ReflectArrayTest.testMulti passed");
- }
- static void testAbstract() {
- Object arrayOfAbstractClasses = Array.newInstance(Number.class, 1);
- System.out.println(arrayOfAbstractClasses.getClass().toString() + " modifiers: " +
- arrayOfAbstractClasses.getClass().getModifiers());
- arrayOfAbstractClasses = Array.newInstance(Cloneable.class, 1);
- System.out.println(arrayOfAbstractClasses.getClass().toString() + " modifiers: " +
- arrayOfAbstractClasses.getClass().getModifiers());
- System.out.println("ReflectArrayTest.testAbstract passed");
- }
- }