rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 24 Feb 2015 11:12:53 +0100
changeset 1787 ea12a3bb4b33
parent 1773 9830c8b761ce
permissions -rw-r--r--
Using year range 2012-2015 in copyright header
jaroslav@106
     1
/**
jaroslav@106
     2
 * Back 2 Browser Bytecode Translator
jaroslav@1787
     3
 * Copyright (C) 2012-2015 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@106
     4
 *
jaroslav@106
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@106
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@106
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@106
     8
 *
jaroslav@106
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@106
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@106
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@106
    12
 * GNU General Public License for more details.
jaroslav@106
    13
 *
jaroslav@106
    14
 * You should have received a copy of the GNU General Public License
jaroslav@106
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@106
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@106
    17
 */
jaroslav@22
    18
package org.apidesign.vm4brwsr;
jaroslav@0
    19
jaroslav@0
    20
import static org.testng.Assert.*;
jaroslav@789
    21
import org.testng.annotations.AfterClass;
jaroslav@103
    22
import org.testng.annotations.BeforeClass;
jaroslav@0
    23
import org.testng.annotations.Test;
jaroslav@0
    24
jaroslav@0
    25
/** Checks the basic behavior of the translator.
jaroslav@0
    26
 *
jaroslav@0
    27
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@0
    28
 */
jaroslav@0
    29
public class StaticMethodTest {
jaroslav@0
    30
    @Test public void threePlusFour() throws Exception {
jaroslav@2
    31
        assertExec(
jaroslav@2
    32
            "Should be seven", 
jaroslav@248
    33
            StaticMethod.class, "sum__III", 
jaroslav@2
    34
            Double.valueOf(7), 
jaroslav@2
    35
            3, 4
jaroslav@2
    36
        );
jaroslav@0
    37
    }
jaroslav@0
    38
jaroslav@1466
    39
    @Test public void cast() throws Exception {
jaroslav@1466
    40
        assertExec(
jaroslav@1466
    41
            "Length is four", 
jaroslav@1466
    42
            StaticMethod.class, "castString__ILjava_lang_Object_2", 
jaroslav@1466
    43
            Double.valueOf(4), 
jaroslav@1466
    44
            "Ahoj"
jaroslav@1466
    45
        );
jaroslav@1466
    46
    }
jaroslav@1466
    47
jaroslav@173
    48
    @Test public void checkReallyInitializedValues() throws Exception {
jaroslav@173
    49
        assertExec(
jaroslav@173
    50
            "Return true", 
jaroslav@248
    51
            StaticMethod.class, "isNull__Z", 
jaroslav@173
    52
            Double.valueOf(1)
jaroslav@173
    53
        );
jaroslav@173
    54
    }
jaroslav@173
    55
jaroslav@1
    56
    @Test public void powerOfThree() throws Exception {
jaroslav@2
    57
        assertExec(
jaroslav@2
    58
            "Should be nine", 
jaroslav@248
    59
            StaticMethod.class, "power__FF", 
jaroslav@2
    60
            Double.valueOf(9),
jaroslav@2
    61
            3.0f
jaroslav@2
    62
        );
jaroslav@1
    63
    }
jaroslav@1
    64
jaroslav@48
    65
    @Test public void minusOne() throws Exception {
jaroslav@48
    66
        assertExec(
jaroslav@48
    67
            "Should be minus one", 
jaroslav@248
    68
            StaticMethod.class, "minusOne__I", 
jaroslav@48
    69
            Double.valueOf(-1)
jaroslav@48
    70
        );
jaroslav@48
    71
    }
jaroslav@48
    72
jaroslav@2
    73
    @Test public void doubleWithoutLong() throws Exception {
jaroslav@2
    74
        assertExec(
jaroslav@2
    75
            "Should be two",
jaroslav@248
    76
            StaticMethod.class, "minus__DDJ", 
jaroslav@2
    77
            Double.valueOf(2),
jaroslav@2
    78
            3.0d, 1l
jaroslav@2
    79
        );
jaroslav@2
    80
    }
jaroslav@600
    81
    
jaroslav@3
    82
    @Test public void divAndRound() throws Exception {
jaroslav@3
    83
        assertExec(
jaroslav@3
    84
            "Should be rounded to one",
jaroslav@248
    85
            StaticMethod.class, "div__IBD", 
jaroslav@3
    86
            Double.valueOf(1),
jaroslav@3
    87
            3, 3.75
jaroslav@3
    88
        );
jaroslav@3
    89
    }
jaroslav@1467
    90
  
jaroslav@1467
    91
    @Test public void inflaterInit() throws Exception {
jaroslav@1467
    92
        assertExec(
jaroslav@1467
    93
            "Down and minus",
jaroslav@1467
    94
            StaticMethod.class, "initInflater__IIZ",
jaroslav@1467
    95
            Double.valueOf(-9),
jaroslav@1467
    96
            10, true
jaroslav@1467
    97
        );
jaroslav@1467
    98
    }
jaroslav@1467
    99
jaroslav@1467
   100
    @Test public void inflaterInitNoNeg() throws Exception {
jaroslav@1467
   101
        assertExec(
jaroslav@1467
   102
            "One up",
jaroslav@1467
   103
            StaticMethod.class, "initInflater__IIZ",
jaroslav@1467
   104
            Double.valueOf(11),
jaroslav@1467
   105
            10, false
jaroslav@1467
   106
        );
jaroslav@1467
   107
    }
jaroslav@1467
   108
    
jaroslav@3
   109
    @Test public void mixedMethodFourParams() throws Exception {
jaroslav@3
   110
        assertExec(
jaroslav@3
   111
            "Should be two",
jaroslav@248
   112
            StaticMethod.class, "mix__IIJBD", 
jaroslav@3
   113
            Double.valueOf(20),
jaroslav@3
   114
            2, 10l, 5, 2.0
jaroslav@3
   115
        );
jaroslav@3
   116
    }
jaroslav@4
   117
    @Test public void factRec() throws Exception {
jaroslav@4
   118
        assertExec(
jaroslav@4
   119
            "Factorial of 5 is 120",
jaroslav@248
   120
            StaticMethod.class, "factRec__JI", 
jaroslav@4
   121
            Double.valueOf(120),
jaroslav@4
   122
            5
jaroslav@4
   123
        );
jaroslav@4
   124
    }
jaroslav@5
   125
    @Test public void factIter() throws Exception {
jaroslav@5
   126
        assertExec(
jaroslav@5
   127
            "Factorial of 5 is 120",
jaroslav@248
   128
            StaticMethod.class, "factIter__JI", 
jaroslav@5
   129
            Double.valueOf(120),
jaroslav@5
   130
            5
jaroslav@5
   131
        );
jaroslav@5
   132
    }
jaroslav@2
   133
    
jaroslav@6
   134
    @Test public void xor() throws Exception {
jaroslav@6
   135
        assertExec(
jaroslav@6
   136
            "Xor is 4",
jaroslav@248
   137
            StaticMethod.class, "xor__JIJ",
jaroslav@6
   138
            Double.valueOf(4),
jaroslav@6
   139
            7,
jaroslav@6
   140
            3
jaroslav@6
   141
        );
jaroslav@6
   142
    }
jaroslav@6
   143
    
jaroslav@1468
   144
    @Test public void collectionToString() throws Exception {
jaroslav@1468
   145
        String exp = StaticMethod.toStringArr();
jaroslav@1468
   146
        assertExec(
jaroslav@1468
   147
            "0 to 4",
jaroslav@1468
   148
            StaticMethod.class, "toStringArr__Ljava_lang_String_2",
jaroslav@1468
   149
            exp
jaroslav@1468
   150
        );
jaroslav@1468
   151
    }
jaroslav@1468
   152
    
jaroslav@7
   153
    @Test public void or() throws Exception {
jaroslav@7
   154
        assertExec(
jaroslav@7
   155
            "Or will be 7",
jaroslav@248
   156
            StaticMethod.class, "orOrAnd__JZII",
jaroslav@7
   157
            Double.valueOf(7),
jaroslav@7
   158
            true,
jaroslav@7
   159
            4,
jaroslav@7
   160
            3
jaroslav@7
   161
        );
jaroslav@7
   162
    }
jaroslav@46
   163
    @Test public void nullCheck() throws Exception {
jaroslav@46
   164
        assertExec(
jaroslav@46
   165
            "Returns nothing",
jaroslav@248
   166
            StaticMethod.class, "none__Ljava_lang_Object_2II",
jaroslav@46
   167
            null, 1, 3
jaroslav@46
   168
        );
jaroslav@46
   169
    }
jaroslav@7
   170
    @Test public void and() throws Exception {
jaroslav@7
   171
        assertExec(
jaroslav@7
   172
            "And will be 3",
jaroslav@248
   173
            StaticMethod.class, "orOrAnd__JZII",
jaroslav@7
   174
            Double.valueOf(3),
jaroslav@7
   175
            false,
jaroslav@7
   176
            7,
jaroslav@7
   177
            3
jaroslav@7
   178
        );
jaroslav@7
   179
    }
jaroslav@9
   180
    @Test public void inc4() throws Exception {
jaroslav@9
   181
        assertExec(
jaroslav@9
   182
            "It will be 4",
jaroslav@248
   183
            StaticMethod.class, "inc4__I",
jaroslav@9
   184
            Double.valueOf(4)
jaroslav@9
   185
        );
jaroslav@9
   186
    }
jaroslav@7
   187
    
jaroslav@93
   188
    @Test public void shiftLeftInJava() throws Exception {
jaroslav@93
   189
        int res = StaticMethod.shiftLeft(1, 8);
jaroslav@93
   190
        assertEquals(res, 256);
jaroslav@93
   191
    }
jaroslav@93
   192
jaroslav@93
   193
    @Test public void shiftLeftInJS() throws Exception {
jaroslav@93
   194
        assertExec(
jaroslav@93
   195
            "Setting 9th bit",
jaroslav@248
   196
            StaticMethod.class, "shiftLeft__III",
jaroslav@93
   197
            Double.valueOf(256),
jaroslav@93
   198
            1, 8
jaroslav@93
   199
        );
jaroslav@93
   200
    }
jaroslav@93
   201
jaroslav@93
   202
    @Test public void shiftRightInJava() throws Exception {
jaroslav@93
   203
        int res = StaticMethod.shiftArithmRight(-8, 3, true);
jaroslav@93
   204
        assertEquals(res, -1);
jaroslav@93
   205
    }
jaroslav@93
   206
jaroslav@93
   207
    @Test public void shiftRightInJS() throws Exception {
jaroslav@93
   208
        assertExec(
jaroslav@93
   209
            "Get -1",
jaroslav@248
   210
            StaticMethod.class, "shiftArithmRight__IIIZ",
jaroslav@93
   211
            Double.valueOf(-1),
jaroslav@93
   212
            -8, 3, true
jaroslav@93
   213
        );
jaroslav@93
   214
    }
jaroslav@93
   215
    @Test public void unsignedShiftRightInJava() throws Exception {
jaroslav@93
   216
        int res = StaticMethod.shiftArithmRight(8, 3, false);
jaroslav@93
   217
        assertEquals(res, 1);
jaroslav@93
   218
    }
jaroslav@93
   219
jaroslav@93
   220
    @Test public void unsignedShiftRightInJS() throws Exception {
jaroslav@93
   221
        assertExec(
jaroslav@93
   222
            "Get -1",
jaroslav@248
   223
            StaticMethod.class, "shiftArithmRight__IIIZ",
jaroslav@93
   224
            Double.valueOf(1),
jaroslav@93
   225
            8, 3, false
jaroslav@93
   226
        );
jaroslav@93
   227
    }
jaroslav@93
   228
    
jaroslav@94
   229
    @Test public void javaScriptBody() throws Exception {
jaroslav@94
   230
        assertExec(
jaroslav@94
   231
            "JavaScript string",
jaroslav@248
   232
            StaticMethod.class, "i2s__Ljava_lang_String_2II",
jaroslav@94
   233
            "333",
jaroslav@99
   234
            330, 3
jaroslav@94
   235
        );
jaroslav@94
   236
    }
jaroslav@94
   237
    
jaroslav@115
   238
    @Test public void switchJarda() throws Exception {
jaroslav@115
   239
        assertExec(
jaroslav@115
   240
            "The expected value",
jaroslav@248
   241
            StaticMethod.class, "swtch__Ljava_lang_String_2I",
jaroslav@115
   242
            "Jarda",
jaroslav@115
   243
            0
jaroslav@115
   244
        );
jaroslav@115
   245
    }
jaroslav@115
   246
    
jaroslav@115
   247
    @Test public void switchDarda() throws Exception {
jaroslav@115
   248
        assertExec(
jaroslav@115
   249
            "The expected value",
jaroslav@248
   250
            StaticMethod.class, "swtch__Ljava_lang_String_2I",
jaroslav@115
   251
            "Darda",
jaroslav@115
   252
            1
jaroslav@115
   253
        );
jaroslav@115
   254
    }
jaroslav@115
   255
    @Test public void switchParda() throws Exception {
jaroslav@115
   256
        assertExec(
jaroslav@115
   257
            "The expected value",
jaroslav@248
   258
            StaticMethod.class, "swtch2__Ljava_lang_String_2I",
jaroslav@115
   259
            "Parda",
jaroslav@115
   260
            22
jaroslav@115
   261
        );
jaroslav@115
   262
    }
jaroslav@115
   263
    @Test public void switchMarda() throws Exception {
jaroslav@115
   264
        assertExec(
jaroslav@115
   265
            "The expected value",
jaroslav@248
   266
            StaticMethod.class, "swtch__Ljava_lang_String_2I",
jaroslav@115
   267
            "Marda",
jaroslav@115
   268
            -433
jaroslav@115
   269
        );
jaroslav@115
   270
    }
jaroslav@115
   271
    
jaroslav@291
   272
    @Test public void checkNullCast() throws Exception {
jaroslav@291
   273
        assertExec("Null can be cast to any type",
jaroslav@291
   274
            StaticMethod.class, "castNull__Ljava_lang_String_2Z", 
jaroslav@291
   275
            null, true
jaroslav@291
   276
        );
jaroslav@291
   277
    }
jaroslav@291
   278
    
jaroslav@1473
   279
    @Test public void stringConstantIsCopied() throws Exception {
jaroslav@1473
   280
        assertExec("String constants are copied between class pools",
jaroslav@1473
   281
            StaticMethod.class, "helloWorldLength__ILjava_lang_String_2", 
jaroslav@1473
   282
            17, "Jardo"
jaroslav@1473
   283
        );
jaroslav@1473
   284
    }
jaroslav@1473
   285
    
jaroslav@708
   286
    private static TestVM code;
jaroslav@103
   287
    
jaroslav@103
   288
    @BeforeClass 
jaroslav@789
   289
    public static void compileTheCode() throws Exception {
jaroslav@103
   290
        StringBuilder sb = new StringBuilder();
jaroslav@708
   291
        code = TestVM.compileClass(sb, "org/apidesign/vm4brwsr/StaticMethod");
jaroslav@2
   292
    }
jaroslav@789
   293
    @AfterClass
jaroslav@789
   294
    public static void releaseTheCode() {
jaroslav@789
   295
        code = null;
jaroslav@789
   296
    }
jaroslav@2
   297
jaroslav@708
   298
    private void assertExec(
jaroslav@708
   299
        String msg, Class<?> clazz, String method, 
jaroslav@708
   300
        Object ret, Object... args
jaroslav@708
   301
    ) throws Exception {
jaroslav@708
   302
        code.assertExec(msg, clazz, method, ret, args);
jaroslav@298
   303
    }
jaroslav@0
   304
}