rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionArrayTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 19 Nov 2014 19:32:00 +0100
changeset 1723 3a1f262311cf
parent 1330 rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionArrayTest.java@740712318ab3
child 1787 ea12a3bb4b33
permissions -rw-r--r--
Separating compact profile tests into own project, so launcher.http can depend on compact profile JAR
     1 /**
     2  * Back 2 Browser Bytecode Translator
     3  * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4  *
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, version 2 of the License.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License
    15  * along with this program. Look for COPYING file in the top folder.
    16  * If not, see http://opensource.org/licenses/GPL-2.0.
    17  */
    18 package org.apidesign.bck2brwsr.tck;
    19 
    20 import java.lang.reflect.Array;
    21 import org.apidesign.bck2brwsr.core.JavaScriptBody;
    22 import org.apidesign.bck2brwsr.vmtest.BrwsrTest;
    23 import org.apidesign.bck2brwsr.vmtest.Compare;
    24 import org.apidesign.bck2brwsr.vmtest.VMTest;
    25 import org.testng.annotations.Factory;
    26 
    27 /**
    28  *
    29  * @author Jaroslav Tulach <jtulach@netbeans.org>
    30  */
    31 public class ReflectionArrayTest {
    32     @Compare public int lengthOfStringArray() {
    33         String[] arr = (String[]) Array.newInstance(String.class, 10);
    34         return arr.length;
    35     }
    36     
    37     @Compare public String indexOutOfBounds() {
    38         String[] arr = { null, null };
    39         return arr[2];
    40     }
    41     
    42     @Compare public int reflectiveLengthOfStringArray() {
    43         Object arr = Array.newInstance(String.class, 10);
    44         return Array.getLength(arr);
    45     }
    46 
    47     @Compare public int reflectiveLengthOneNonArray() {
    48         Object arr = "non-array";
    49         return Array.getLength(arr);
    50     }
    51 
    52     @Compare public String compTypeOfStringArray() {
    53         String[] arr = (String[]) Array.newInstance(String.class, 10);
    54         return arr.getClass().getComponentType().getName();
    55     }
    56 
    57     @Compare public Object negativeArrayExcp() {
    58         return Array.newInstance(String.class, -5);
    59     }
    60     
    61     @Compare public int lengthOfIntArray() {
    62         int[] arr = (int[]) Array.newInstance(Integer.TYPE, 10);
    63         return arr.length;
    64     }
    65 
    66     @Compare public int reflectiveLengthOfIntArray() {
    67         Object arr = Array.newInstance(Integer.TYPE, 10);
    68         return Array.getLength(arr);
    69     }
    70 
    71     @Compare public String compTypeOfIntArray() {
    72         int[] arr = (int[]) Array.newInstance(int.class, 10);
    73         return arr.getClass().getComponentType().getName();
    74     }
    75 
    76     @Compare public Object intNegativeArrayExcp() {
    77         return Array.newInstance(int.class, -5);
    78     }
    79 
    80     @Compare public Integer verifyAutobox() {
    81         int[] arr = (int[]) Array.newInstance(int.class, 5);
    82         return (Integer) Array.get(arr, 0);
    83     }
    84     @Compare public String verifyObjectArray() {
    85         String[] arr = (String[]) Array.newInstance(String.class, 5);
    86         Array.set(arr, 0, "Hello");
    87         return (String) Array.get(arr, 0);
    88     }
    89     @Compare public int verifyInt() {
    90         int[] arr = (int[]) Array.newInstance(int.class, 5);
    91         return Array.getInt(arr, 0);
    92     }
    93     @Compare public long verifyConvertToLong() {
    94         int[] arr = (int[]) Array.newInstance(int.class, 5);
    95         return Array.getLong(arr, 0);
    96     }
    97 
    98     @Compare public Object verifySetIntToObject() {
    99         try {
   100             Object[] arr = (Object[]) Array.newInstance(Object.class, 5);
   101             Array.setInt(arr, 0, 10);
   102             return Array.get(arr, 0);
   103         } catch (Exception exception) {
   104             return exception.getClass().getName();
   105         }
   106     }
   107     @Compare public long verifySetShort() {
   108         int[] arr = (int[]) Array.newInstance(int.class, 5);
   109         Array.setShort(arr, 0, (short)10);
   110         return Array.getLong(arr, 0);
   111     }
   112     @Compare public long verifyCantSetLong() {
   113         int[] arr = (int[]) Array.newInstance(int.class, 5);
   114         Array.setLong(arr, 0, 10);
   115         return Array.getLong(arr, 0);
   116     }
   117     @Compare public float verifyLongToFloat() {
   118         Object arr = Array.newInstance(float.class, 5);
   119         Array.setLong(arr, 0, 10);
   120         return Array.getFloat(arr, 0);
   121     }
   122 
   123     @Compare public double verifyConvertToDouble() {
   124         int[] arr = (int[]) Array.newInstance(int.class, 5);
   125         return Array.getDouble(arr, 0);
   126     }
   127     
   128     @Compare public int multiIntArray() {
   129         int[][][] arr = (int[][][]) Array.newInstance(int.class, 3, 3, 3);
   130         return arr[0][1][2] + 5 + arr[2][2][0];
   131     }
   132 
   133     @Compare public String multiIntArrayCompType() {
   134         return Array.newInstance(int.class, 3, 3, 3).getClass().getName();
   135     }
   136     
   137     @JavaScriptBody(args = {}, body = "return [1, 2];")
   138     private static native Object crtarr();
   139 
   140     @JavaScriptBody(args = {}, body = "return new Object();")
   141     private static native Object newobj();
   142 
   143     @BrwsrTest
   144     public static void toStringArray() {
   145         final Object arr = crtarr();
   146         final Object real = new Object[2];
   147         assert arr instanceof Object[] : "Any array is Java array: " + arr;
   148         assert arr.getClass() == real.getClass() : "Same classes " + arr + " and " + real.getClass();
   149         final String str = arr.toString();
   150         assert str != null;
   151         assert str.startsWith("[Ljava.lang.Object;@") : str;
   152     }
   153     
   154     @BrwsrTest
   155     public static void objectToString() {
   156         String s = newobj().toString();
   157         assert s != null : "Some string computed";
   158         assert s.startsWith("java.lang.Object@") : "Regular object toString(): " + s;
   159     }
   160 
   161     
   162     @Factory
   163     public static Object[] create() {
   164         return VMTest.create(ReflectionArrayTest.class);
   165     }
   166 }