vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionArrayTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 26 Jan 2013 08:47:05 +0100
changeset 592 5e13b1ac2886
parent 484 7ca6bd52b668
permissions -rw-r--r--
In order to support fields of the same name in subclasses we are now prefixing them with name of the class that defines them. To provide convenient way to access them from generated bytecode and also directly from JavaScript, there is a getter/setter function for each field. It starts with _ followed by the field name. If called with a parameter, it sets the field, with a parameter it just returns it.
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@477
    21
import org.apidesign.bck2brwsr.vmtest.Compare;
jaroslav@477
    22
import org.apidesign.bck2brwsr.vmtest.VMTest;
jaroslav@477
    23
import org.testng.annotations.Factory;
jaroslav@477
    24
jaroslav@477
    25
/**
jaroslav@477
    26
 *
jaroslav@477
    27
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@477
    28
 */
jaroslav@477
    29
public class ReflectionArrayTest {
jaroslav@477
    30
    @Compare public int lengthOfStringArray() {
jaroslav@477
    31
        String[] arr = (String[]) Array.newInstance(String.class, 10);
jaroslav@477
    32
        return arr.length;
jaroslav@477
    33
    }
jaroslav@482
    34
    
jaroslav@482
    35
    @Compare public int reflectiveLengthOfStringArray() {
jaroslav@482
    36
        Object arr = Array.newInstance(String.class, 10);
jaroslav@482
    37
        return Array.getLength(arr);
jaroslav@482
    38
    }
jaroslav@482
    39
jaroslav@482
    40
    @Compare public int reflectiveLengthOneNonArray() {
jaroslav@482
    41
        Object arr = "non-array";
jaroslav@482
    42
        return Array.getLength(arr);
jaroslav@482
    43
    }
jaroslav@477
    44
jaroslav@477
    45
    @Compare public String compTypeOfStringArray() {
jaroslav@477
    46
        String[] arr = (String[]) Array.newInstance(String.class, 10);
jaroslav@477
    47
        return arr.getClass().getComponentType().getName();
jaroslav@477
    48
    }
jaroslav@477
    49
jaroslav@477
    50
    @Compare public Object negativeArrayExcp() {
jaroslav@477
    51
        return Array.newInstance(String.class, -5);
jaroslav@477
    52
    }
jaroslav@477
    53
    
jaroslav@477
    54
    @Compare public int lengthOfIntArray() {
jaroslav@477
    55
        int[] arr = (int[]) Array.newInstance(Integer.TYPE, 10);
jaroslav@477
    56
        return arr.length;
jaroslav@477
    57
    }
jaroslav@477
    58
jaroslav@482
    59
    @Compare public int reflectiveLengthOfIntArray() {
jaroslav@482
    60
        Object arr = Array.newInstance(Integer.TYPE, 10);
jaroslav@482
    61
        return Array.getLength(arr);
jaroslav@482
    62
    }
jaroslav@482
    63
jaroslav@477
    64
    @Compare public String compTypeOfIntArray() {
jaroslav@477
    65
        int[] arr = (int[]) Array.newInstance(int.class, 10);
jaroslav@477
    66
        return arr.getClass().getComponentType().getName();
jaroslav@477
    67
    }
jaroslav@477
    68
jaroslav@477
    69
    @Compare public Object intNegativeArrayExcp() {
jaroslav@477
    70
        return Array.newInstance(int.class, -5);
jaroslav@477
    71
    }
jaroslav@482
    72
jaroslav@482
    73
    @Compare public Integer verifyAutobox() {
jaroslav@482
    74
        int[] arr = (int[]) Array.newInstance(int.class, 5);
jaroslav@482
    75
        return (Integer) Array.get(arr, 0);
jaroslav@482
    76
    }
jaroslav@485
    77
    @Compare public String verifyObjectArray() {
jaroslav@485
    78
        String[] arr = (String[]) Array.newInstance(String.class, 5);
jaroslav@485
    79
        Array.set(arr, 0, "Hello");
jaroslav@485
    80
        return (String) Array.get(arr, 0);
jaroslav@485
    81
    }
jaroslav@482
    82
    @Compare public int verifyInt() {
jaroslav@482
    83
        int[] arr = (int[]) Array.newInstance(int.class, 5);
jaroslav@482
    84
        return Array.getInt(arr, 0);
jaroslav@482
    85
    }
jaroslav@482
    86
    @Compare public long verifyConvertToLong() {
jaroslav@482
    87
        int[] arr = (int[]) Array.newInstance(int.class, 5);
jaroslav@482
    88
        return Array.getLong(arr, 0);
jaroslav@482
    89
    }
jaroslav@482
    90
jaroslav@482
    91
    @Compare public Object verifySetIntToObject() {
jaroslav@485
    92
        try {
jaroslav@485
    93
            Object[] arr = (Object[]) Array.newInstance(Object.class, 5);
jaroslav@485
    94
            Array.setInt(arr, 0, 10);
jaroslav@485
    95
            return Array.get(arr, 0);
jaroslav@485
    96
        } catch (Exception exception) {
jaroslav@485
    97
            return exception.getClass().getName();
jaroslav@485
    98
        }
jaroslav@482
    99
    }
jaroslav@482
   100
    @Compare public long verifySetShort() {
jaroslav@482
   101
        int[] arr = (int[]) Array.newInstance(int.class, 5);
jaroslav@482
   102
        Array.setShort(arr, 0, (short)10);
jaroslav@482
   103
        return Array.getLong(arr, 0);
jaroslav@482
   104
    }
jaroslav@482
   105
    @Compare public long verifyCantSetLong() {
jaroslav@482
   106
        int[] arr = (int[]) Array.newInstance(int.class, 5);
jaroslav@482
   107
        Array.setLong(arr, 0, 10);
jaroslav@482
   108
        return Array.getLong(arr, 0);
jaroslav@482
   109
    }
jaroslav@484
   110
    @Compare public float verifyLongToFloat() {
jaroslav@484
   111
        Object arr = Array.newInstance(float.class, 5);
jaroslav@484
   112
        Array.setLong(arr, 0, 10);
jaroslav@484
   113
        return Array.getFloat(arr, 0);
jaroslav@484
   114
    }
jaroslav@482
   115
jaroslav@482
   116
    @Compare public double verifyConvertToDouble() {
jaroslav@482
   117
        int[] arr = (int[]) Array.newInstance(int.class, 5);
jaroslav@482
   118
        return Array.getDouble(arr, 0);
jaroslav@482
   119
    }
jaroslav@477
   120
    
jaroslav@480
   121
    @Compare public int multiIntArray() {
jaroslav@480
   122
        int[][][] arr = (int[][][]) Array.newInstance(int.class, 3, 3, 3);
jaroslav@480
   123
        return arr[0][1][2] + 5 + arr[2][2][0];
jaroslav@480
   124
    }
jaroslav@480
   125
jaroslav@480
   126
    @Compare public String multiIntArrayCompType() {
jaroslav@480
   127
        return Array.newInstance(int.class, 3, 3, 3).getClass().getName();
jaroslav@480
   128
    }
jaroslav@480
   129
    
jaroslav@477
   130
    
jaroslav@477
   131
    @Factory
jaroslav@477
   132
    public static Object[] create() {
jaroslav@477
   133
        return VMTest.create(ReflectionArrayTest.class);
jaroslav@477
   134
    }
jaroslav@477
   135
}