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