jaroslav@477: /** jaroslav@477: * Back 2 Browser Bytecode Translator jaroslav@477: * Copyright (C) 2012 Jaroslav Tulach jaroslav@477: * jaroslav@477: * This program is free software: you can redistribute it and/or modify jaroslav@477: * it under the terms of the GNU General Public License as published by jaroslav@477: * the Free Software Foundation, version 2 of the License. jaroslav@477: * jaroslav@477: * This program is distributed in the hope that it will be useful, jaroslav@477: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@477: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@477: * GNU General Public License for more details. jaroslav@477: * jaroslav@477: * You should have received a copy of the GNU General Public License jaroslav@477: * along with this program. Look for COPYING file in the top folder. jaroslav@477: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@477: */ jaroslav@477: package org.apidesign.bck2brwsr.tck; jaroslav@477: jaroslav@477: import java.lang.reflect.Array; jaroslav@933: import org.apidesign.bck2brwsr.core.JavaScriptBody; jaroslav@933: import org.apidesign.bck2brwsr.vmtest.BrwsrTest; jaroslav@477: import org.apidesign.bck2brwsr.vmtest.Compare; jaroslav@477: import org.apidesign.bck2brwsr.vmtest.VMTest; jaroslav@477: import org.testng.annotations.Factory; jaroslav@477: jaroslav@477: /** jaroslav@477: * jaroslav@477: * @author Jaroslav Tulach jaroslav@477: */ jaroslav@477: public class ReflectionArrayTest { jaroslav@477: @Compare public int lengthOfStringArray() { jaroslav@477: String[] arr = (String[]) Array.newInstance(String.class, 10); jaroslav@477: return arr.length; jaroslav@477: } jaroslav@482: jaroslav@1330: @Compare public String indexOutOfBounds() { jaroslav@1330: String[] arr = { null, null }; jaroslav@1330: return arr[2]; jaroslav@1330: } jaroslav@1330: jaroslav@482: @Compare public int reflectiveLengthOfStringArray() { jaroslav@482: Object arr = Array.newInstance(String.class, 10); jaroslav@482: return Array.getLength(arr); jaroslav@482: } jaroslav@482: jaroslav@482: @Compare public int reflectiveLengthOneNonArray() { jaroslav@482: Object arr = "non-array"; jaroslav@482: return Array.getLength(arr); jaroslav@482: } jaroslav@477: jaroslav@477: @Compare public String compTypeOfStringArray() { jaroslav@477: String[] arr = (String[]) Array.newInstance(String.class, 10); jaroslav@477: return arr.getClass().getComponentType().getName(); jaroslav@477: } jaroslav@477: jaroslav@477: @Compare public Object negativeArrayExcp() { jaroslav@477: return Array.newInstance(String.class, -5); jaroslav@477: } jaroslav@477: jaroslav@477: @Compare public int lengthOfIntArray() { jaroslav@477: int[] arr = (int[]) Array.newInstance(Integer.TYPE, 10); jaroslav@477: return arr.length; jaroslav@477: } jaroslav@477: jaroslav@482: @Compare public int reflectiveLengthOfIntArray() { jaroslav@482: Object arr = Array.newInstance(Integer.TYPE, 10); jaroslav@482: return Array.getLength(arr); jaroslav@482: } jaroslav@482: jaroslav@477: @Compare public String compTypeOfIntArray() { jaroslav@477: int[] arr = (int[]) Array.newInstance(int.class, 10); jaroslav@477: return arr.getClass().getComponentType().getName(); jaroslav@477: } jaroslav@477: jaroslav@477: @Compare public Object intNegativeArrayExcp() { jaroslav@477: return Array.newInstance(int.class, -5); jaroslav@477: } jaroslav@482: jaroslav@482: @Compare public Integer verifyAutobox() { jaroslav@482: int[] arr = (int[]) Array.newInstance(int.class, 5); jaroslav@482: return (Integer) Array.get(arr, 0); jaroslav@482: } jaroslav@485: @Compare public String verifyObjectArray() { jaroslav@485: String[] arr = (String[]) Array.newInstance(String.class, 5); jaroslav@485: Array.set(arr, 0, "Hello"); jaroslav@485: return (String) Array.get(arr, 0); jaroslav@485: } jaroslav@482: @Compare public int verifyInt() { jaroslav@482: int[] arr = (int[]) Array.newInstance(int.class, 5); jaroslav@482: return Array.getInt(arr, 0); jaroslav@482: } jaroslav@482: @Compare public long verifyConvertToLong() { jaroslav@482: int[] arr = (int[]) Array.newInstance(int.class, 5); jaroslav@482: return Array.getLong(arr, 0); jaroslav@482: } jaroslav@482: jaroslav@482: @Compare public Object verifySetIntToObject() { jaroslav@485: try { jaroslav@485: Object[] arr = (Object[]) Array.newInstance(Object.class, 5); jaroslav@485: Array.setInt(arr, 0, 10); jaroslav@485: return Array.get(arr, 0); jaroslav@485: } catch (Exception exception) { jaroslav@485: return exception.getClass().getName(); jaroslav@485: } jaroslav@482: } jaroslav@482: @Compare public long verifySetShort() { jaroslav@482: int[] arr = (int[]) Array.newInstance(int.class, 5); jaroslav@482: Array.setShort(arr, 0, (short)10); jaroslav@482: return Array.getLong(arr, 0); jaroslav@482: } jaroslav@482: @Compare public long verifyCantSetLong() { jaroslav@482: int[] arr = (int[]) Array.newInstance(int.class, 5); jaroslav@482: Array.setLong(arr, 0, 10); jaroslav@482: return Array.getLong(arr, 0); jaroslav@482: } jaroslav@484: @Compare public float verifyLongToFloat() { jaroslav@484: Object arr = Array.newInstance(float.class, 5); jaroslav@484: Array.setLong(arr, 0, 10); jaroslav@484: return Array.getFloat(arr, 0); jaroslav@484: } jaroslav@482: jaroslav@482: @Compare public double verifyConvertToDouble() { jaroslav@482: int[] arr = (int[]) Array.newInstance(int.class, 5); jaroslav@482: return Array.getDouble(arr, 0); jaroslav@482: } jaroslav@477: jaroslav@480: @Compare public int multiIntArray() { jaroslav@480: int[][][] arr = (int[][][]) Array.newInstance(int.class, 3, 3, 3); jaroslav@480: return arr[0][1][2] + 5 + arr[2][2][0]; jaroslav@480: } jaroslav@480: jaroslav@480: @Compare public String multiIntArrayCompType() { jaroslav@480: return Array.newInstance(int.class, 3, 3, 3).getClass().getName(); jaroslav@480: } jaroslav@480: jaroslav@933: @JavaScriptBody(args = {}, body = "return [1, 2];") jaroslav@933: private static native Object crtarr(); jaroslav@933: jaroslav@933: @JavaScriptBody(args = {}, body = "return new Object();") jaroslav@933: private static native Object newobj(); jaroslav@933: jaroslav@933: @BrwsrTest jaroslav@933: public static void toStringArray() { jaroslav@933: final Object arr = crtarr(); jaroslav@933: final Object real = new Object[2]; jaroslav@933: assert arr instanceof Object[] : "Any array is Java array: " + arr; jaroslav@933: assert arr.getClass() == real.getClass() : "Same classes " + arr + " and " + real.getClass(); jaroslav@933: final String str = arr.toString(); jaroslav@933: assert str != null; jaroslav@933: assert str.startsWith("[Ljava.lang.Object;@") : str; jaroslav@933: } jaroslav@933: jaroslav@933: @BrwsrTest jaroslav@933: public static void objectToString() { jaroslav@933: String s = newobj().toString(); jaroslav@933: assert s != null : "Some string computed"; jaroslav@933: assert s.startsWith("java.lang.Object@") : "Regular object toString(): " + s; jaroslav@933: } jaroslav@933: jaroslav@477: jaroslav@477: @Factory jaroslav@477: public static Object[] create() { jaroslav@477: return VMTest.create(ReflectionArrayTest.class); jaroslav@477: } jaroslav@477: }