# HG changeset patch # User Jaroslav Tulach # Date 1358533369 -3600 # Node ID 05a87bc2319222147d20723eb9ccab336fb9a9f5 # Parent 472209ab111288e5954a3058e2aa976e7caa9cc0 Array.getLength and few more (failing) tests for reflection diff -r 472209ab1112 -r 05a87bc23192 emul/src/main/java/java/lang/reflect/Array.java --- a/emul/src/main/java/java/lang/reflect/Array.java Fri Jan 18 18:52:02 2013 +0100 +++ b/emul/src/main/java/java/lang/reflect/Array.java Fri Jan 18 19:22:49 2013 +0100 @@ -159,8 +159,16 @@ * @exception IllegalArgumentException if the object argument is not * an array */ - public static native int getLength(Object array) - throws IllegalArgumentException; + public static int getLength(Object array) + throws IllegalArgumentException { + if (!array.getClass().isArray()) { + throw new IllegalArgumentException(); + } + return length(array); + } + + @JavaScriptBody(args = { "arr" }, body = "return arr.length;") + private static native int length(Object arr); /** * Returns the value of the indexed component in the specified diff -r 472209ab1112 -r 05a87bc23192 vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionArrayTest.java --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionArrayTest.java Fri Jan 18 18:52:02 2013 +0100 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionArrayTest.java Fri Jan 18 19:22:49 2013 +0100 @@ -31,6 +31,16 @@ String[] arr = (String[]) Array.newInstance(String.class, 10); return arr.length; } + + @Compare public int reflectiveLengthOfStringArray() { + Object arr = Array.newInstance(String.class, 10); + return Array.getLength(arr); + } + + @Compare public int reflectiveLengthOneNonArray() { + Object arr = "non-array"; + return Array.getLength(arr); + } @Compare public String compTypeOfStringArray() { String[] arr = (String[]) Array.newInstance(String.class, 10); @@ -46,6 +56,11 @@ return arr.length; } + @Compare public int reflectiveLengthOfIntArray() { + Object arr = Array.newInstance(Integer.TYPE, 10); + return Array.getLength(arr); + } + @Compare public String compTypeOfIntArray() { int[] arr = (int[]) Array.newInstance(int.class, 10); return arr.getClass().getComponentType().getName(); @@ -54,6 +69,40 @@ @Compare public Object intNegativeArrayExcp() { return Array.newInstance(int.class, -5); } + + @Compare public Integer verifyAutobox() { + int[] arr = (int[]) Array.newInstance(int.class, 5); + return (Integer) Array.get(arr, 0); + } + @Compare public int verifyInt() { + int[] arr = (int[]) Array.newInstance(int.class, 5); + return Array.getInt(arr, 0); + } + @Compare public long verifyConvertToLong() { + int[] arr = (int[]) Array.newInstance(int.class, 5); + return Array.getLong(arr, 0); + } + + @Compare public Object verifySetIntToObject() { + Object[] arr = (Object[]) Array.newInstance(Object.class, 5); + Array.setInt(arr, 0, 10); + return Array.get(arr, 0); + } + @Compare public long verifySetShort() { + int[] arr = (int[]) Array.newInstance(int.class, 5); + Array.setShort(arr, 0, (short)10); + return Array.getLong(arr, 0); + } + @Compare public long verifyCantSetLong() { + int[] arr = (int[]) Array.newInstance(int.class, 5); + Array.setLong(arr, 0, 10); + return Array.getLong(arr, 0); + } + + @Compare public double verifyConvertToDouble() { + int[] arr = (int[]) Array.newInstance(int.class, 5); + return Array.getDouble(arr, 0); + } @Compare public int multiIntArray() { int[][][] arr = (int[][][]) Array.newInstance(int.class, 3, 3, 3);