rt/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 09 Oct 2013 16:53:45 +0200
changeset 1354 43f89d9f7238
parent 937 d9e692ece653
child 1787 ea12a3bb4b33
permissions -rw-r--r--
Unicode has some special new line characters that need to be encoded too
jaroslav@106
     1
/**
jaroslav@106
     2
 * Back 2 Browser Bytecode Translator
jaroslav@106
     3
 * Copyright (C) 2012 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@34
    18
package org.apidesign.vm4brwsr;
jaroslav@34
    19
jaroslav@34
    20
import org.testng.annotations.Test;
jaroslav@34
    21
import static org.testng.Assert.*;
jaroslav@789
    22
import org.testng.annotations.AfterClass;
jaroslav@103
    23
import org.testng.annotations.BeforeClass;
jaroslav@34
    24
jaroslav@34
    25
/**
jaroslav@34
    26
 *
jaroslav@34
    27
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@34
    28
 */
jaroslav@34
    29
public class StringTest {
jaroslav@34
    30
    @Test public void firstChar() throws Exception {
jaroslav@34
    31
        assertExec(
jaroslav@34
    32
            "First char in Hello is H",
jaroslav@248
    33
            StringSample.class, "sayHello__CI",
jaroslav@184
    34
            72, 0
jaroslav@34
    35
        );
jaroslav@34
    36
    }
jaroslav@36
    37
jaroslav@45
    38
    @Test public void fromChars() throws Exception {
jaroslav@45
    39
        assertExec(
jaroslav@45
    40
            "First char in Hello is ABC",
jaroslav@248
    41
            StringSample.class, "fromChars__Ljava_lang_String_2CCC",
jaroslav@45
    42
            "ABC", 'A', 'B', 'C'
jaroslav@45
    43
        );
jaroslav@45
    44
    }
jaroslav@45
    45
jaroslav@171
    46
    @Test public void concatChars() throws Exception {
jaroslav@171
    47
        assertExec(
jaroslav@171
    48
            "Composing yields ABC",
jaroslav@248
    49
            StringSample.class, "chars__Ljava_lang_String_2CCC",
jaroslav@171
    50
            "ABC", 'A', 'B', 'C'
jaroslav@171
    51
        );
jaroslav@171
    52
    }
jaroslav@171
    53
jaroslav@176
    54
    @Test public void concatCharsFromInts() throws Exception {
jaroslav@176
    55
        assertExec(
jaroslav@176
    56
            "Composing yields ABC",
jaroslav@248
    57
            StringSample.class, "charsFromNumbers__Ljava_lang_String_2",
jaroslav@176
    58
            "ABC"
jaroslav@176
    59
        );
jaroslav@176
    60
    }
jaroslav@176
    61
jaroslav@176
    62
    @Test public void concatCharsFromChars() throws Exception {
jaroslav@176
    63
        assertExec(
jaroslav@176
    64
            "Composing yields ABC",
jaroslav@248
    65
            StringSample.class, "charsFromChars__Ljava_lang_String_2",
jaroslav@176
    66
            "ABC"
jaroslav@176
    67
        );
jaroslav@176
    68
    }
jaroslav@176
    69
jaroslav@206
    70
    @Test public void instanceOfWorks() throws Exception {
jaroslav@206
    71
        assertExec(
jaroslav@206
    72
            "It is string",
jaroslav@248
    73
            StringSample.class, "isStringInstance__Z",
jaroslav@206
    74
            Double.valueOf(1.0)
jaroslav@206
    75
        );
jaroslav@206
    76
    }
jaroslav@206
    77
jaroslav@595
    78
    @Test public void getBytes() throws Exception {
jaroslav@713
    79
        final String horse = "\u017dlu\u0165ou\u010dk\u00fd k\u016f\u0148";
jaroslav@595
    80
        final String expected = StringSample.getBytes(horse);
jaroslav@595
    81
        assertExec(
jaroslav@595
    82
            "Bytes look simplar",
jaroslav@595
    83
            StringSample.class, "getBytes__Ljava_lang_String_2Ljava_lang_String_2",
jaroslav@595
    84
            expected, horse
jaroslav@595
    85
        );
jaroslav@595
    86
    }
jaroslav@595
    87
jaroslav@93
    88
    @Test(timeOut=10000) public void toStringConcatenation() throws Exception {
jaroslav@36
    89
        assertExec(
jaroslav@36
    90
            "Five executions should generate 5Hello World!",
jaroslav@248
    91
            StringSample.class, "toStringTest__Ljava_lang_String_2I",
jaroslav@94
    92
            "Hello World!5", 5
jaroslav@36
    93
        );
jaroslav@36
    94
    }
jaroslav@94
    95
    @Test public void toStringConcatenationJava() throws Exception {
jaroslav@94
    96
        assertEquals("Hello World!5", StringSample.toStringTest(5));
jaroslav@94
    97
    }
jaroslav@104
    98
    
jaroslav@104
    99
    @Test(timeOut=10000) public void stringStringConcat() throws Exception {
jaroslav@104
   100
        assertExec(
jaroslav@104
   101
            "Composes strings OK",
jaroslav@248
   102
            StringSample.class, "concatStrings__Ljava_lang_String_2",
jaroslav@137
   103
            "Hello World!1" + "\\\n\r\t"
jaroslav@104
   104
        );
jaroslav@104
   105
    }
jaroslav@116
   106
jaroslav@175
   107
    @Test public void equalsAndSubstring() throws Exception {
jaroslav@116
   108
        assertExec(
jaroslav@116
   109
            "Composes are OK",
jaroslav@248
   110
            StringSample.class, "equalToHello__ZII",
jaroslav@175
   111
            true, 0, 5
jaroslav@116
   112
        );
jaroslav@116
   113
    }
jaroslav@183
   114
    @Test public void replaceChars() throws Exception {
jaroslav@183
   115
        assertExec(
jaroslav@183
   116
            "Can replace slashes by underscores",
jaroslav@248
   117
            StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC",
jaroslav@183
   118
            "x_y_z", "x/y/z", '/', '_'
jaroslav@183
   119
        );
jaroslav@183
   120
    }
jaroslav@183
   121
    @Test public void replaceIntChars() throws Exception {
jaroslav@183
   122
        assertExec(
jaroslav@183
   123
            "Can replace slashes by underscores",
jaroslav@248
   124
            StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC",
jaroslav@183
   125
            "x_y_z", "x/y/z", (int)'/', (int)'_'
jaroslav@183
   126
        );
jaroslav@183
   127
    }
jaroslav@188
   128
jaroslav@188
   129
    @Test public void insertBuilder() throws Exception {
jaroslav@188
   130
        assertExec(
jaroslav@188
   131
            "Can insert something into a buffer?",
jaroslav@248
   132
            StringSample.class, "insertBuffer__Ljava_lang_String_2",
jtulach@192
   133
            "Ahojdo!"
jaroslav@188
   134
        );
jaroslav@188
   135
    }
jaroslav@104
   136
    
jtulach@193
   137
    @Test public void compareHashCodeHi() throws Exception {
jtulach@193
   138
        String j = "Hi";
jtulach@193
   139
        int jh = StringSample.hashCode(j);
jtulach@193
   140
        assertExec(
jtulach@193
   141
            "Hashcode is the same " +jh,
jaroslav@248
   142
            StringSample.class, "hashCode__ILjava_lang_String_2",
jtulach@193
   143
            Double.valueOf(jh), j
jtulach@193
   144
        );
jtulach@193
   145
    }
jtulach@193
   146
    @Test public void compareHashCode1() throws Exception {
jtulach@193
   147
        String j = "Hello Java!";
jtulach@193
   148
        int jh = StringSample.hashCode(j);
jtulach@193
   149
        assertExec(
jtulach@193
   150
            "Hashcode is the same " + jh,
jaroslav@248
   151
            StringSample.class, "hashCode__ILjava_lang_String_2",
jtulach@193
   152
            Double.valueOf(jh), j
jtulach@193
   153
        );
jtulach@193
   154
    }
jtulach@196
   155
    @Test public void stringSwitch1() throws Exception {
jtulach@196
   156
        assertExec(
jtulach@196
   157
            "Get one",
jaroslav@248
   158
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   159
            Double.valueOf(1), "jedna"
jtulach@196
   160
        );
jtulach@196
   161
    }
jtulach@196
   162
    @Test public void stringSwitch2() throws Exception {
jtulach@196
   163
        assertExec(
jtulach@196
   164
            "Get two",
jaroslav@248
   165
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   166
            Double.valueOf(2), "dve"
jtulach@196
   167
        );
jtulach@196
   168
    }
jtulach@196
   169
    @Test public void stringSwitchDefault() throws Exception {
jtulach@196
   170
        assertExec(
jtulach@196
   171
            "Get -1",
jaroslav@248
   172
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   173
            Double.valueOf(-1), "none"
jtulach@196
   174
        );
jtulach@196
   175
    }
jtulach@193
   176
    
jaroslav@184
   177
    @Test public void countAB() throws Exception {
jaroslav@184
   178
        assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
jaroslav@184
   179
        assertExec(
jaroslav@184
   180
            "One A and one B adds to 3",
jaroslav@248
   181
            StringSample.class, "countAB__ILjava_lang_String_2",
jaroslav@184
   182
            Double.valueOf(3), "Ahoj Bedo!"
jaroslav@184
   183
        );
jaroslav@184
   184
        
jaroslav@184
   185
    }
jaroslav@572
   186
jaroslav@572
   187
    @Test public void compareStrings() throws Exception {
jaroslav@572
   188
        int res = StringSample.compare("Saab", "Volvo");
jaroslav@572
   189
        assertExec(
jaroslav@572
   190
            "Saab finished sooner than Volvo",
jaroslav@572
   191
            StringSample.class, "compare__ILjava_lang_String_2Ljava_lang_String_2",
jaroslav@572
   192
            Double.valueOf(res), "Saab", "Volvo"
jaroslav@572
   193
        );
jaroslav@572
   194
        
jaroslav@572
   195
    }
jaroslav@184
   196
    
jaroslav@933
   197
    @Test public void toStringOnJSArray() throws Exception {
jaroslav@933
   198
        String exp = StringSample.toStringArray(false, true);
jaroslav@933
   199
        
jaroslav@933
   200
        assertExec(
jaroslav@933
   201
            "Treated as Java Object array",
jaroslav@933
   202
            StringSample.class, "toStringArray__Ljava_lang_String_2ZZ",
jaroslav@933
   203
            exp, true, true
jaroslav@933
   204
        );
jaroslav@933
   205
    }
jaroslav@933
   206
jaroslav@933
   207
    @Test public void toStringOnRealArray() throws Exception {
jaroslav@933
   208
        String exp = StringSample.toStringArray(false, true);
jaroslav@933
   209
        
jaroslav@933
   210
        assertExec(
jaroslav@933
   211
            "Is Java Object array",
jaroslav@933
   212
            StringSample.class, "toStringArray__Ljava_lang_String_2ZZ",
jaroslav@933
   213
            exp, false, true
jaroslav@933
   214
        );
jaroslav@933
   215
    }
jaroslav@1354
   216
    
jaroslav@1354
   217
    @Test public void weirdUnicodeCharacters() throws Exception {
jaroslav@1354
   218
        String exp = StringSample.unicode();
jaroslav@1354
   219
        
jaroslav@1354
   220
        assertExec(
jaroslav@1354
   221
            "Unicode is OK",
jaroslav@1354
   222
            StringSample.class, "unicode__Ljava_lang_String_2",
jaroslav@1354
   223
            exp
jaroslav@1354
   224
        );
jaroslav@1354
   225
    }
jaroslav@933
   226
jaroslav@933
   227
    @Test public void valueOfOnJSArray() throws Exception {
jaroslav@933
   228
        assertExec(
jaroslav@933
   229
            "Treated as classical JavaScript array",
jaroslav@933
   230
            StringSample.class, "toStringArray__Ljava_lang_String_2ZZ",
jaroslav@937
   231
            "1,2", true, false
jaroslav@933
   232
        );
jaroslav@933
   233
    }
jaroslav@933
   234
    
jaroslav@708
   235
    private static TestVM code;
jaroslav@34
   236
    
jaroslav@103
   237
    @BeforeClass 
jaroslav@789
   238
    public static void compileTheCode() throws Exception {
jaroslav@708
   239
        code = TestVM.compileClass(
jaroslav@34
   240
            "org/apidesign/vm4brwsr/StringSample",
jaroslav@34
   241
            "java/lang/String"
jaroslav@34
   242
        );
jaroslav@103
   243
    }
jaroslav@789
   244
    @AfterClass
jaroslav@789
   245
    public static void releaseTheCode() {
jaroslav@789
   246
        code = null;
jaroslav@789
   247
    }
jaroslav@103
   248
    
jaroslav@203
   249
    private static void assertExec(String msg, 
jaroslav@203
   250
        Class<?> clazz, String method, Object expRes, Object... args
jaroslav@203
   251
    ) throws Exception {
jaroslav@708
   252
        code.assertExec(msg, clazz, method, expRes, args);
jaroslav@34
   253
    }
jaroslav@34
   254
    
jaroslav@34
   255
}