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