vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 11 Feb 2013 12:46:43 +0100
branchemul
changeset 708 59d5596a9c6c
parent 595 784aaf9ee179
child 747 ae352b763959
permissions -rw-r--r--
Encapsulation. Moving shared code into TestVM instance.
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@103
    22
import org.testng.annotations.BeforeClass;
jaroslav@34
    23
jaroslav@34
    24
/**
jaroslav@34
    25
 *
jaroslav@34
    26
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@34
    27
 */
jaroslav@34
    28
public class StringTest {
jaroslav@34
    29
    @Test public void firstChar() throws Exception {
jaroslav@34
    30
        assertExec(
jaroslav@34
    31
            "First char in Hello is H",
jaroslav@248
    32
            StringSample.class, "sayHello__CI",
jaroslav@184
    33
            72, 0
jaroslav@34
    34
        );
jaroslav@34
    35
    }
jaroslav@36
    36
jaroslav@45
    37
    @Test public void fromChars() throws Exception {
jaroslav@45
    38
        assertExec(
jaroslav@45
    39
            "First char in Hello is ABC",
jaroslav@248
    40
            StringSample.class, "fromChars__Ljava_lang_String_2CCC",
jaroslav@45
    41
            "ABC", 'A', 'B', 'C'
jaroslav@45
    42
        );
jaroslav@45
    43
    }
jaroslav@45
    44
jaroslav@171
    45
    @Test public void concatChars() throws Exception {
jaroslav@171
    46
        assertExec(
jaroslav@171
    47
            "Composing yields ABC",
jaroslav@248
    48
            StringSample.class, "chars__Ljava_lang_String_2CCC",
jaroslav@171
    49
            "ABC", 'A', 'B', 'C'
jaroslav@171
    50
        );
jaroslav@171
    51
    }
jaroslav@171
    52
jaroslav@176
    53
    @Test public void concatCharsFromInts() throws Exception {
jaroslav@176
    54
        assertExec(
jaroslav@176
    55
            "Composing yields ABC",
jaroslav@248
    56
            StringSample.class, "charsFromNumbers__Ljava_lang_String_2",
jaroslav@176
    57
            "ABC"
jaroslav@176
    58
        );
jaroslav@176
    59
    }
jaroslav@176
    60
jaroslav@176
    61
    @Test public void concatCharsFromChars() throws Exception {
jaroslav@176
    62
        assertExec(
jaroslav@176
    63
            "Composing yields ABC",
jaroslav@248
    64
            StringSample.class, "charsFromChars__Ljava_lang_String_2",
jaroslav@176
    65
            "ABC"
jaroslav@176
    66
        );
jaroslav@176
    67
    }
jaroslav@176
    68
jaroslav@206
    69
    @Test public void instanceOfWorks() throws Exception {
jaroslav@206
    70
        assertExec(
jaroslav@206
    71
            "It is string",
jaroslav@248
    72
            StringSample.class, "isStringInstance__Z",
jaroslav@206
    73
            Double.valueOf(1.0)
jaroslav@206
    74
        );
jaroslav@206
    75
    }
jaroslav@206
    76
jaroslav@595
    77
    @Test public void getBytes() throws Exception {
jaroslav@595
    78
        final String horse = "Žluťoučký kůň";
jaroslav@595
    79
        final String expected = StringSample.getBytes(horse);
jaroslav@595
    80
        assertExec(
jaroslav@595
    81
            "Bytes look simplar",
jaroslav@595
    82
            StringSample.class, "getBytes__Ljava_lang_String_2Ljava_lang_String_2",
jaroslav@595
    83
            expected, horse
jaroslav@595
    84
        );
jaroslav@595
    85
    }
jaroslav@595
    86
jaroslav@93
    87
    @Test(timeOut=10000) public void toStringConcatenation() throws Exception {
jaroslav@36
    88
        assertExec(
jaroslav@36
    89
            "Five executions should generate 5Hello World!",
jaroslav@248
    90
            StringSample.class, "toStringTest__Ljava_lang_String_2I",
jaroslav@94
    91
            "Hello World!5", 5
jaroslav@36
    92
        );
jaroslav@36
    93
    }
jaroslav@94
    94
    @Test public void toStringConcatenationJava() throws Exception {
jaroslav@94
    95
        assertEquals("Hello World!5", StringSample.toStringTest(5));
jaroslav@94
    96
    }
jaroslav@104
    97
    
jaroslav@104
    98
    @Test(timeOut=10000) public void stringStringConcat() throws Exception {
jaroslav@104
    99
        assertExec(
jaroslav@104
   100
            "Composes strings OK",
jaroslav@248
   101
            StringSample.class, "concatStrings__Ljava_lang_String_2",
jaroslav@137
   102
            "Hello World!1" + "\\\n\r\t"
jaroslav@104
   103
        );
jaroslav@104
   104
    }
jaroslav@116
   105
jaroslav@175
   106
    @Test public void equalsAndSubstring() throws Exception {
jaroslav@116
   107
        assertExec(
jaroslav@116
   108
            "Composes are OK",
jaroslav@248
   109
            StringSample.class, "equalToHello__ZII",
jaroslav@175
   110
            true, 0, 5
jaroslav@116
   111
        );
jaroslav@116
   112
    }
jaroslav@183
   113
    @Test public void replaceChars() throws Exception {
jaroslav@183
   114
        assertExec(
jaroslav@183
   115
            "Can replace slashes by underscores",
jaroslav@248
   116
            StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC",
jaroslav@183
   117
            "x_y_z", "x/y/z", '/', '_'
jaroslav@183
   118
        );
jaroslav@183
   119
    }
jaroslav@183
   120
    @Test public void replaceIntChars() throws Exception {
jaroslav@183
   121
        assertExec(
jaroslav@183
   122
            "Can replace slashes by underscores",
jaroslav@248
   123
            StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC",
jaroslav@183
   124
            "x_y_z", "x/y/z", (int)'/', (int)'_'
jaroslav@183
   125
        );
jaroslav@183
   126
    }
jaroslav@188
   127
jaroslav@188
   128
    @Test public void insertBuilder() throws Exception {
jaroslav@188
   129
        assertExec(
jaroslav@188
   130
            "Can insert something into a buffer?",
jaroslav@248
   131
            StringSample.class, "insertBuffer__Ljava_lang_String_2",
jtulach@192
   132
            "Ahojdo!"
jaroslav@188
   133
        );
jaroslav@188
   134
    }
jaroslav@104
   135
    
jtulach@193
   136
    @Test public void compareHashCodeHi() throws Exception {
jtulach@193
   137
        String j = "Hi";
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@193
   145
    @Test public void compareHashCode1() throws Exception {
jtulach@193
   146
        String j = "Hello Java!";
jtulach@193
   147
        int jh = StringSample.hashCode(j);
jtulach@193
   148
        assertExec(
jtulach@193
   149
            "Hashcode is the same " + jh,
jaroslav@248
   150
            StringSample.class, "hashCode__ILjava_lang_String_2",
jtulach@193
   151
            Double.valueOf(jh), j
jtulach@193
   152
        );
jtulach@193
   153
    }
jtulach@196
   154
    @Test public void stringSwitch1() throws Exception {
jtulach@196
   155
        assertExec(
jtulach@196
   156
            "Get one",
jaroslav@248
   157
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   158
            Double.valueOf(1), "jedna"
jtulach@196
   159
        );
jtulach@196
   160
    }
jtulach@196
   161
    @Test public void stringSwitch2() throws Exception {
jtulach@196
   162
        assertExec(
jtulach@196
   163
            "Get two",
jaroslav@248
   164
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   165
            Double.valueOf(2), "dve"
jtulach@196
   166
        );
jtulach@196
   167
    }
jtulach@196
   168
    @Test public void stringSwitchDefault() throws Exception {
jtulach@196
   169
        assertExec(
jtulach@196
   170
            "Get -1",
jaroslav@248
   171
            StringSample.class, "stringSwitch__ILjava_lang_String_2",
jtulach@196
   172
            Double.valueOf(-1), "none"
jtulach@196
   173
        );
jtulach@196
   174
    }
jtulach@193
   175
    
jaroslav@184
   176
    @Test public void countAB() throws Exception {
jaroslav@184
   177
        assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
jaroslav@184
   178
        assertExec(
jaroslav@184
   179
            "One A and one B adds to 3",
jaroslav@248
   180
            StringSample.class, "countAB__ILjava_lang_String_2",
jaroslav@184
   181
            Double.valueOf(3), "Ahoj Bedo!"
jaroslav@184
   182
        );
jaroslav@184
   183
        
jaroslav@184
   184
    }
jaroslav@572
   185
jaroslav@572
   186
    @Test public void compareStrings() throws Exception {
jaroslav@572
   187
        int res = StringSample.compare("Saab", "Volvo");
jaroslav@572
   188
        assertExec(
jaroslav@572
   189
            "Saab finished sooner than Volvo",
jaroslav@572
   190
            StringSample.class, "compare__ILjava_lang_String_2Ljava_lang_String_2",
jaroslav@572
   191
            Double.valueOf(res), "Saab", "Volvo"
jaroslav@572
   192
        );
jaroslav@572
   193
        
jaroslav@572
   194
    }
jaroslav@184
   195
    
jaroslav@708
   196
    private static TestVM code;
jaroslav@34
   197
    
jaroslav@103
   198
    @BeforeClass 
jaroslav@103
   199
    public void compileTheCode() throws Exception {
jaroslav@708
   200
        code = TestVM.compileClass(
jaroslav@34
   201
            "org/apidesign/vm4brwsr/StringSample",
jaroslav@34
   202
            "java/lang/String"
jaroslav@34
   203
        );
jaroslav@103
   204
    }
jaroslav@103
   205
    
jaroslav@203
   206
    private static void assertExec(String msg, 
jaroslav@203
   207
        Class<?> clazz, String method, Object expRes, Object... args
jaroslav@203
   208
    ) throws Exception {
jaroslav@708
   209
        code.assertExec(msg, clazz, method, expRes, args);
jaroslav@34
   210
    }
jaroslav@34
   211
    
jaroslav@34
   212
}