rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionArrayTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 05 Apr 2013 10:41:07 +0200
branchmodel
changeset 933 0cb657a2b888
parent 772 d382dacfd73f
permissions -rw-r--r--
Any JavaScript array is treated as Java array of Objects
     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 int reflectiveLengthOfStringArray() {
    38         Object arr = Array.newInstance(String.class, 10);
    39         return Array.getLength(arr);
    40     }
    41 
    42     @Compare public int reflectiveLengthOneNonArray() {
    43         Object arr = "non-array";
    44         return Array.getLength(arr);
    45     }
    46 
    47     @Compare public String compTypeOfStringArray() {
    48         String[] arr = (String[]) Array.newInstance(String.class, 10);
    49         return arr.getClass().getComponentType().getName();
    50     }
    51 
    52     @Compare public Object negativeArrayExcp() {
    53         return Array.newInstance(String.class, -5);
    54     }
    55     
    56     @Compare public int lengthOfIntArray() {
    57         int[] arr = (int[]) Array.newInstance(Integer.TYPE, 10);
    58         return arr.length;
    59     }
    60 
    61     @Compare public int reflectiveLengthOfIntArray() {
    62         Object arr = Array.newInstance(Integer.TYPE, 10);
    63         return Array.getLength(arr);
    64     }
    65 
    66     @Compare public String compTypeOfIntArray() {
    67         int[] arr = (int[]) Array.newInstance(int.class, 10);
    68         return arr.getClass().getComponentType().getName();
    69     }
    70 
    71     @Compare public Object intNegativeArrayExcp() {
    72         return Array.newInstance(int.class, -5);
    73     }
    74 
    75     @Compare public Integer verifyAutobox() {
    76         int[] arr = (int[]) Array.newInstance(int.class, 5);
    77         return (Integer) Array.get(arr, 0);
    78     }
    79     @Compare public String verifyObjectArray() {
    80         String[] arr = (String[]) Array.newInstance(String.class, 5);
    81         Array.set(arr, 0, "Hello");
    82         return (String) Array.get(arr, 0);
    83     }
    84     @Compare public int verifyInt() {
    85         int[] arr = (int[]) Array.newInstance(int.class, 5);
    86         return Array.getInt(arr, 0);
    87     }
    88     @Compare public long verifyConvertToLong() {
    89         int[] arr = (int[]) Array.newInstance(int.class, 5);
    90         return Array.getLong(arr, 0);
    91     }
    92 
    93     @Compare public Object verifySetIntToObject() {
    94         try {
    95             Object[] arr = (Object[]) Array.newInstance(Object.class, 5);
    96             Array.setInt(arr, 0, 10);
    97             return Array.get(arr, 0);
    98         } catch (Exception exception) {
    99             return exception.getClass().getName();
   100         }
   101     }
   102     @Compare public long verifySetShort() {
   103         int[] arr = (int[]) Array.newInstance(int.class, 5);
   104         Array.setShort(arr, 0, (short)10);
   105         return Array.getLong(arr, 0);
   106     }
   107     @Compare public long verifyCantSetLong() {
   108         int[] arr = (int[]) Array.newInstance(int.class, 5);
   109         Array.setLong(arr, 0, 10);
   110         return Array.getLong(arr, 0);
   111     }
   112     @Compare public float verifyLongToFloat() {
   113         Object arr = Array.newInstance(float.class, 5);
   114         Array.setLong(arr, 0, 10);
   115         return Array.getFloat(arr, 0);
   116     }
   117 
   118     @Compare public double verifyConvertToDouble() {
   119         int[] arr = (int[]) Array.newInstance(int.class, 5);
   120         return Array.getDouble(arr, 0);
   121     }
   122     
   123     @Compare public int multiIntArray() {
   124         int[][][] arr = (int[][][]) Array.newInstance(int.class, 3, 3, 3);
   125         return arr[0][1][2] + 5 + arr[2][2][0];
   126     }
   127 
   128     @Compare public String multiIntArrayCompType() {
   129         return Array.newInstance(int.class, 3, 3, 3).getClass().getName();
   130     }
   131     
   132     @JavaScriptBody(args = {}, body = "return [1, 2];")
   133     private static native Object crtarr();
   134 
   135     @JavaScriptBody(args = {}, body = "return new Object();")
   136     private static native Object newobj();
   137 
   138     @BrwsrTest
   139     public static void toStringArray() {
   140         final Object arr = crtarr();
   141         final Object real = new Object[2];
   142         assert arr instanceof Object[] : "Any array is Java array: " + arr;
   143         assert arr.getClass() == real.getClass() : "Same classes " + arr + " and " + real.getClass();
   144         final String str = arr.toString();
   145         assert str != null;
   146         assert str.startsWith("[Ljava.lang.Object;@") : str;
   147     }
   148     
   149     @BrwsrTest
   150     public static void objectToString() {
   151         String s = newobj().toString();
   152         assert s != null : "Some string computed";
   153         assert s.startsWith("java.lang.Object@") : "Regular object toString(): " + s;
   154     }
   155 
   156     
   157     @Factory
   158     public static Object[] create() {
   159         return VMTest.create(ReflectionArrayTest.class);
   160     }
   161 }