vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 27 Nov 2012 22:22:48 +0100
branchlazy
changeset 206 84920274cb32
parent 203 c6a0b5b64133
child 248 0bfcb6585290
permissions -rw-r--r--
Check that instanceof works on String
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 javax.script.ScriptException;
jaroslav@34
    22
import org.testng.annotations.Test;
jaroslav@34
    23
import static org.testng.Assert.*;
jaroslav@103
    24
import org.testng.annotations.BeforeClass;
jaroslav@34
    25
jaroslav@34
    26
/**
jaroslav@34
    27
 *
jaroslav@34
    28
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@34
    29
 */
jaroslav@34
    30
public class StringTest {
jaroslav@34
    31
    @Test public void firstChar() throws Exception {
jaroslav@34
    32
        assertExec(
jaroslav@34
    33
            "First char in Hello is H",
jaroslav@203
    34
            StringSample.class, "sayHelloCI",
jaroslav@184
    35
            72, 0
jaroslav@34
    36
        );
jaroslav@34
    37
    }
jaroslav@36
    38
jaroslav@45
    39
    @Test public void fromChars() throws Exception {
jaroslav@45
    40
        assertExec(
jaroslav@45
    41
            "First char in Hello is ABC",
jaroslav@203
    42
            StringSample.class, "fromCharsLjava_lang_StringCCC",
jaroslav@45
    43
            "ABC", 'A', 'B', 'C'
jaroslav@45
    44
        );
jaroslav@45
    45
    }
jaroslav@45
    46
jaroslav@171
    47
    @Test public void concatChars() throws Exception {
jaroslav@171
    48
        assertExec(
jaroslav@171
    49
            "Composing yields ABC",
jaroslav@203
    50
            StringSample.class, "charsLjava_lang_StringCCC",
jaroslav@171
    51
            "ABC", 'A', 'B', 'C'
jaroslav@171
    52
        );
jaroslav@171
    53
    }
jaroslav@171
    54
jaroslav@176
    55
    @Test public void concatCharsFromInts() throws Exception {
jaroslav@176
    56
        assertExec(
jaroslav@176
    57
            "Composing yields ABC",
jaroslav@203
    58
            StringSample.class, "charsFromNumbersLjava_lang_String",
jaroslav@176
    59
            "ABC"
jaroslav@176
    60
        );
jaroslav@176
    61
    }
jaroslav@176
    62
jaroslav@176
    63
    @Test public void concatCharsFromChars() throws Exception {
jaroslav@176
    64
        assertExec(
jaroslav@176
    65
            "Composing yields ABC",
jaroslav@203
    66
            StringSample.class, "charsFromCharsLjava_lang_String",
jaroslav@176
    67
            "ABC"
jaroslav@176
    68
        );
jaroslav@176
    69
    }
jaroslav@176
    70
jaroslav@206
    71
    @Test public void instanceOfWorks() throws Exception {
jaroslav@206
    72
        assertExec(
jaroslav@206
    73
            "It is string",
jaroslav@206
    74
            StringSample.class, "isStringInstanceZ",
jaroslav@206
    75
            Double.valueOf(1.0)
jaroslav@206
    76
        );
jaroslav@206
    77
    }
jaroslav@206
    78
jaroslav@93
    79
    @Test(timeOut=10000) public void toStringConcatenation() throws Exception {
jaroslav@36
    80
        assertExec(
jaroslav@36
    81
            "Five executions should generate 5Hello World!",
jaroslav@203
    82
            StringSample.class, "toStringTestLjava_lang_StringI",
jaroslav@94
    83
            "Hello World!5", 5
jaroslav@36
    84
        );
jaroslav@36
    85
    }
jaroslav@94
    86
    @Test public void toStringConcatenationJava() throws Exception {
jaroslav@94
    87
        assertEquals("Hello World!5", StringSample.toStringTest(5));
jaroslav@94
    88
    }
jaroslav@104
    89
    
jaroslav@104
    90
    @Test(timeOut=10000) public void stringStringConcat() throws Exception {
jaroslav@104
    91
        assertExec(
jaroslav@104
    92
            "Composes strings OK",
jaroslav@203
    93
            StringSample.class, "concatStringsLjava_lang_String",
jaroslav@137
    94
            "Hello World!1" + "\\\n\r\t"
jaroslav@104
    95
        );
jaroslav@104
    96
    }
jaroslav@116
    97
jaroslav@175
    98
    @Test public void equalsAndSubstring() throws Exception {
jaroslav@116
    99
        assertExec(
jaroslav@116
   100
            "Composes are OK",
jaroslav@203
   101
            StringSample.class, "equalToHelloZII",
jaroslav@175
   102
            true, 0, 5
jaroslav@116
   103
        );
jaroslav@116
   104
    }
jaroslav@183
   105
    @Test public void replaceChars() throws Exception {
jaroslav@183
   106
        assertExec(
jaroslav@183
   107
            "Can replace slashes by underscores",
jaroslav@203
   108
            StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
jaroslav@183
   109
            "x_y_z", "x/y/z", '/', '_'
jaroslav@183
   110
        );
jaroslav@183
   111
    }
jaroslav@183
   112
    @Test public void replaceIntChars() throws Exception {
jaroslav@183
   113
        assertExec(
jaroslav@183
   114
            "Can replace slashes by underscores",
jaroslav@203
   115
            StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
jaroslav@183
   116
            "x_y_z", "x/y/z", (int)'/', (int)'_'
jaroslav@183
   117
        );
jaroslav@183
   118
    }
jaroslav@188
   119
jaroslav@188
   120
    @Test public void insertBuilder() throws Exception {
jaroslav@188
   121
        assertExec(
jaroslav@188
   122
            "Can insert something into a buffer?",
jaroslav@203
   123
            StringSample.class, "insertBufferLjava_lang_String",
jtulach@192
   124
            "Ahojdo!"
jaroslav@188
   125
        );
jaroslav@188
   126
    }
jaroslav@104
   127
    
jtulach@193
   128
    @Test public void compareHashCodeHi() throws Exception {
jtulach@193
   129
        String j = "Hi";
jtulach@193
   130
        int jh = StringSample.hashCode(j);
jtulach@193
   131
        assertExec(
jtulach@193
   132
            "Hashcode is the same " +jh,
jaroslav@203
   133
            StringSample.class, "hashCodeILjava_lang_String",
jtulach@193
   134
            Double.valueOf(jh), j
jtulach@193
   135
        );
jtulach@193
   136
    }
jtulach@193
   137
    @Test public void compareHashCode1() throws Exception {
jtulach@193
   138
        String j = "Hello Java!";
jtulach@193
   139
        int jh = StringSample.hashCode(j);
jtulach@193
   140
        assertExec(
jtulach@193
   141
            "Hashcode is the same " + jh,
jaroslav@203
   142
            StringSample.class, "hashCodeILjava_lang_String",
jtulach@193
   143
            Double.valueOf(jh), j
jtulach@193
   144
        );
jtulach@193
   145
    }
jtulach@196
   146
    @Test public void stringSwitch1() throws Exception {
jtulach@196
   147
        assertExec(
jtulach@196
   148
            "Get one",
jaroslav@203
   149
            StringSample.class, "stringSwitchILjava_lang_String",
jtulach@196
   150
            Double.valueOf(1), "jedna"
jtulach@196
   151
        );
jtulach@196
   152
    }
jtulach@196
   153
    @Test public void stringSwitch2() throws Exception {
jtulach@196
   154
        assertExec(
jtulach@196
   155
            "Get two",
jaroslav@203
   156
            StringSample.class, "stringSwitchILjava_lang_String",
jtulach@196
   157
            Double.valueOf(2), "dve"
jtulach@196
   158
        );
jtulach@196
   159
    }
jtulach@196
   160
    @Test public void stringSwitchDefault() throws Exception {
jtulach@196
   161
        assertExec(
jtulach@196
   162
            "Get -1",
jaroslav@203
   163
            StringSample.class, "stringSwitchILjava_lang_String",
jtulach@196
   164
            Double.valueOf(-1), "none"
jtulach@196
   165
        );
jtulach@196
   166
    }
jtulach@193
   167
    
jaroslav@184
   168
    @Test public void countAB() throws Exception {
jaroslav@184
   169
        assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
jaroslav@184
   170
        assertExec(
jaroslav@184
   171
            "One A and one B adds to 3",
jaroslav@203
   172
            StringSample.class, "countABILjava_lang_String",
jaroslav@184
   173
            Double.valueOf(3), "Ahoj Bedo!"
jaroslav@184
   174
        );
jaroslav@184
   175
        
jaroslav@184
   176
    }
jaroslav@184
   177
    
jaroslav@103
   178
    private static CharSequence codeSeq;
jaroslav@103
   179
    private static Invocable code;
jaroslav@34
   180
    
jaroslav@103
   181
    @BeforeClass 
jaroslav@103
   182
    public void compileTheCode() throws Exception {
jaroslav@34
   183
        StringBuilder sb = new StringBuilder();
jaroslav@103
   184
        code = StaticMethodTest.compileClass(sb, 
jaroslav@34
   185
            "org/apidesign/vm4brwsr/StringSample",
jaroslav@34
   186
            "java/lang/String"
jaroslav@34
   187
        );
jaroslav@103
   188
        codeSeq = sb;
jaroslav@103
   189
    }
jaroslav@103
   190
    
jaroslav@203
   191
    private static void assertExec(String msg, 
jaroslav@203
   192
        Class<?> clazz, String method, Object expRes, Object... args
jaroslav@203
   193
    ) throws Exception {
jaroslav@203
   194
        StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args);
jaroslav@34
   195
    }
jaroslav@34
   196
    
jaroslav@34
   197
}