vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 04 Dec 2012 09:16:53 +0100
changeset 248 0bfcb6585290
parent 206 84920274cb32
child 405 e41809be6106
child 572 e84419744dba
permissions -rw-r--r--
Using the same mangling scheme as JNI
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 javax.script.Invocable;
jaroslav@34
    21
import org.testng.annotations.Test;
jaroslav@34
    22
import static org.testng.Assert.*;
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@93
    78
    @Test(timeOut=10000) public void toStringConcatenation() throws Exception {
jaroslav@36
    79
        assertExec(
jaroslav@36
    80
            "Five executions should generate 5Hello World!",
jaroslav@248
    81
            StringSample.class, "toStringTest__Ljava_lang_String_2I",
jaroslav@94
    82
            "Hello World!5", 5
jaroslav@36
    83
        );
jaroslav@36
    84
    }
jaroslav@94
    85
    @Test public void toStringConcatenationJava() throws Exception {
jaroslav@94
    86
        assertEquals("Hello World!5", StringSample.toStringTest(5));
jaroslav@94
    87
    }
jaroslav@104
    88
    
jaroslav@104
    89
    @Test(timeOut=10000) public void stringStringConcat() throws Exception {
jaroslav@104
    90
        assertExec(
jaroslav@104
    91
            "Composes strings OK",
jaroslav@248
    92
            StringSample.class, "concatStrings__Ljava_lang_String_2",
jaroslav@137
    93
            "Hello World!1" + "\\\n\r\t"
jaroslav@104
    94
        );
jaroslav@104
    95
    }
jaroslav@116
    96
jaroslav@175
    97
    @Test public void equalsAndSubstring() throws Exception {
jaroslav@116
    98
        assertExec(
jaroslav@116
    99
            "Composes are OK",
jaroslav@248
   100
            StringSample.class, "equalToHello__ZII",
jaroslav@175
   101
            true, 0, 5
jaroslav@116
   102
        );
jaroslav@116
   103
    }
jaroslav@183
   104
    @Test public void replaceChars() throws Exception {
jaroslav@183
   105
        assertExec(
jaroslav@183
   106
            "Can replace slashes by underscores",
jaroslav@248
   107
            StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC",
jaroslav@183
   108
            "x_y_z", "x/y/z", '/', '_'
jaroslav@183
   109
        );
jaroslav@183
   110
    }
jaroslav@183
   111
    @Test public void replaceIntChars() throws Exception {
jaroslav@183
   112
        assertExec(
jaroslav@183
   113
            "Can replace slashes by underscores",
jaroslav@248
   114
            StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC",
jaroslav@183
   115
            "x_y_z", "x/y/z", (int)'/', (int)'_'
jaroslav@183
   116
        );
jaroslav@183
   117
    }
jaroslav@188
   118
jaroslav@188
   119
    @Test public void insertBuilder() throws Exception {
jaroslav@188
   120
        assertExec(
jaroslav@188
   121
            "Can insert something into a buffer?",
jaroslav@248
   122
            StringSample.class, "insertBuffer__Ljava_lang_String_2",
jtulach@192
   123
            "Ahojdo!"
jaroslav@188
   124
        );
jaroslav@188
   125
    }
jaroslav@104
   126
    
jtulach@193
   127
    @Test public void compareHashCodeHi() throws Exception {
jtulach@193
   128
        String j = "Hi";
jtulach@193
   129
        int jh = StringSample.hashCode(j);
jtulach@193
   130
        assertExec(
jtulach@193
   131
            "Hashcode is the same " +jh,
jaroslav@248
   132
            StringSample.class, "hashCode__ILjava_lang_String_2",
jtulach@193
   133
            Double.valueOf(jh), j
jtulach@193
   134
        );
jtulach@193
   135
    }
jtulach@193
   136
    @Test public void compareHashCode1() throws Exception {
jtulach@193
   137
        String j = "Hello Java!";
jtulach@193
   138
        int jh = StringSample.hashCode(j);
jtulach@193
   139
        assertExec(
jtulach@193
   140
            "Hashcode is the same " + jh,
jaroslav@248
   141
            StringSample.class, "hashCode__ILjava_lang_String_2",
jtulach@193
   142
            Double.valueOf(jh), j
jtulach@193
   143
        );
jtulach@193
   144
    }
jtulach@196
   145
    @Test public void stringSwitch1() throws Exception {
jtulach@196
   146
        assertExec(
jtulach@196
   147
            "Get one",
jaroslav@248
   148
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   149
            Double.valueOf(1), "jedna"
jtulach@196
   150
        );
jtulach@196
   151
    }
jtulach@196
   152
    @Test public void stringSwitch2() throws Exception {
jtulach@196
   153
        assertExec(
jtulach@196
   154
            "Get two",
jaroslav@248
   155
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   156
            Double.valueOf(2), "dve"
jtulach@196
   157
        );
jtulach@196
   158
    }
jtulach@196
   159
    @Test public void stringSwitchDefault() throws Exception {
jtulach@196
   160
        assertExec(
jtulach@196
   161
            "Get -1",
jaroslav@248
   162
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   163
            Double.valueOf(-1), "none"
jtulach@196
   164
        );
jtulach@196
   165
    }
jtulach@193
   166
    
jaroslav@184
   167
    @Test public void countAB() throws Exception {
jaroslav@184
   168
        assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
jaroslav@184
   169
        assertExec(
jaroslav@184
   170
            "One A and one B adds to 3",
jaroslav@248
   171
            StringSample.class, "countAB__ILjava_lang_String_2",
jaroslav@184
   172
            Double.valueOf(3), "Ahoj Bedo!"
jaroslav@184
   173
        );
jaroslav@184
   174
        
jaroslav@184
   175
    }
jaroslav@184
   176
    
jaroslav@103
   177
    private static CharSequence codeSeq;
jaroslav@103
   178
    private static Invocable code;
jaroslav@34
   179
    
jaroslav@103
   180
    @BeforeClass 
jaroslav@103
   181
    public void compileTheCode() throws Exception {
jaroslav@34
   182
        StringBuilder sb = new StringBuilder();
jaroslav@103
   183
        code = StaticMethodTest.compileClass(sb, 
jaroslav@34
   184
            "org/apidesign/vm4brwsr/StringSample",
jaroslav@34
   185
            "java/lang/String"
jaroslav@34
   186
        );
jaroslav@103
   187
        codeSeq = sb;
jaroslav@103
   188
    }
jaroslav@103
   189
    
jaroslav@203
   190
    private static void assertExec(String msg, 
jaroslav@203
   191
        Class<?> clazz, String method, Object expRes, Object... args
jaroslav@203
   192
    ) throws Exception {
jaroslav@203
   193
        StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args);
jaroslav@34
   194
    }
jaroslav@34
   195
    
jaroslav@34
   196
}