jaroslav@106: /** jaroslav@106: * Back 2 Browser Bytecode Translator jaroslav@106: * Copyright (C) 2012 Jaroslav Tulach jaroslav@106: * jaroslav@106: * This program is free software: you can redistribute it and/or modify jaroslav@106: * it under the terms of the GNU General Public License as published by jaroslav@106: * the Free Software Foundation, version 2 of the License. jaroslav@106: * jaroslav@106: * This program is distributed in the hope that it will be useful, jaroslav@106: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@106: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@106: * GNU General Public License for more details. jaroslav@106: * jaroslav@106: * You should have received a copy of the GNU General Public License jaroslav@106: * along with this program. Look for COPYING file in the top folder. jaroslav@106: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@106: */ jaroslav@34: package org.apidesign.vm4brwsr; jaroslav@34: jaroslav@34: import org.testng.annotations.Test; jaroslav@34: import static org.testng.Assert.*; jaroslav@103: import org.testng.annotations.BeforeClass; jaroslav@34: jaroslav@34: /** jaroslav@34: * jaroslav@34: * @author Jaroslav Tulach jaroslav@34: */ jaroslav@34: public class StringTest { jaroslav@34: @Test public void firstChar() throws Exception { jaroslav@34: assertExec( jaroslav@34: "First char in Hello is H", jaroslav@248: StringSample.class, "sayHello__CI", jaroslav@184: 72, 0 jaroslav@34: ); jaroslav@34: } jaroslav@36: jaroslav@45: @Test public void fromChars() throws Exception { jaroslav@45: assertExec( jaroslav@45: "First char in Hello is ABC", jaroslav@248: StringSample.class, "fromChars__Ljava_lang_String_2CCC", jaroslav@45: "ABC", 'A', 'B', 'C' jaroslav@45: ); jaroslav@45: } jaroslav@45: jaroslav@171: @Test public void concatChars() throws Exception { jaroslav@171: assertExec( jaroslav@171: "Composing yields ABC", jaroslav@248: StringSample.class, "chars__Ljava_lang_String_2CCC", jaroslav@171: "ABC", 'A', 'B', 'C' jaroslav@171: ); jaroslav@171: } jaroslav@171: jaroslav@176: @Test public void concatCharsFromInts() throws Exception { jaroslav@176: assertExec( jaroslav@176: "Composing yields ABC", jaroslav@248: StringSample.class, "charsFromNumbers__Ljava_lang_String_2", jaroslav@176: "ABC" jaroslav@176: ); jaroslav@176: } jaroslav@176: jaroslav@176: @Test public void concatCharsFromChars() throws Exception { jaroslav@176: assertExec( jaroslav@176: "Composing yields ABC", jaroslav@248: StringSample.class, "charsFromChars__Ljava_lang_String_2", jaroslav@176: "ABC" jaroslav@176: ); jaroslav@176: } jaroslav@176: jaroslav@206: @Test public void instanceOfWorks() throws Exception { jaroslav@206: assertExec( jaroslav@206: "It is string", jaroslav@248: StringSample.class, "isStringInstance__Z", jaroslav@206: Double.valueOf(1.0) jaroslav@206: ); jaroslav@206: } jaroslav@206: jaroslav@595: @Test public void getBytes() throws Exception { jaroslav@713: final String horse = "\u017dlu\u0165ou\u010dk\u00fd k\u016f\u0148"; jaroslav@595: final String expected = StringSample.getBytes(horse); jaroslav@595: assertExec( jaroslav@595: "Bytes look simplar", jaroslav@595: StringSample.class, "getBytes__Ljava_lang_String_2Ljava_lang_String_2", jaroslav@595: expected, horse jaroslav@595: ); jaroslav@595: } jaroslav@595: jaroslav@93: @Test(timeOut=10000) public void toStringConcatenation() throws Exception { jaroslav@36: assertExec( jaroslav@36: "Five executions should generate 5Hello World!", jaroslav@248: StringSample.class, "toStringTest__Ljava_lang_String_2I", jaroslav@94: "Hello World!5", 5 jaroslav@36: ); jaroslav@36: } jaroslav@94: @Test public void toStringConcatenationJava() throws Exception { jaroslav@94: assertEquals("Hello World!5", StringSample.toStringTest(5)); jaroslav@94: } jaroslav@104: jaroslav@104: @Test(timeOut=10000) public void stringStringConcat() throws Exception { jaroslav@104: assertExec( jaroslav@104: "Composes strings OK", jaroslav@248: StringSample.class, "concatStrings__Ljava_lang_String_2", jaroslav@137: "Hello World!1" + "\\\n\r\t" jaroslav@104: ); jaroslav@104: } jaroslav@116: jaroslav@175: @Test public void equalsAndSubstring() throws Exception { jaroslav@116: assertExec( jaroslav@116: "Composes are OK", jaroslav@248: StringSample.class, "equalToHello__ZII", jaroslav@175: true, 0, 5 jaroslav@116: ); jaroslav@116: } jaroslav@183: @Test public void replaceChars() throws Exception { jaroslav@183: assertExec( jaroslav@183: "Can replace slashes by underscores", jaroslav@248: StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC", jaroslav@183: "x_y_z", "x/y/z", '/', '_' jaroslav@183: ); jaroslav@183: } jaroslav@183: @Test public void replaceIntChars() throws Exception { jaroslav@183: assertExec( jaroslav@183: "Can replace slashes by underscores", jaroslav@248: StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC", jaroslav@183: "x_y_z", "x/y/z", (int)'/', (int)'_' jaroslav@183: ); jaroslav@183: } jaroslav@188: jaroslav@188: @Test public void insertBuilder() throws Exception { jaroslav@188: assertExec( jaroslav@188: "Can insert something into a buffer?", jaroslav@248: StringSample.class, "insertBuffer__Ljava_lang_String_2", jtulach@192: "Ahojdo!" jaroslav@188: ); jaroslav@188: } jaroslav@104: jtulach@193: @Test public void compareHashCodeHi() throws Exception { jtulach@193: String j = "Hi"; jtulach@193: int jh = StringSample.hashCode(j); jtulach@193: assertExec( jtulach@193: "Hashcode is the same " +jh, jaroslav@248: StringSample.class, "hashCode__ILjava_lang_String_2", jtulach@193: Double.valueOf(jh), j jtulach@193: ); jtulach@193: } jtulach@193: @Test public void compareHashCode1() throws Exception { jtulach@193: String j = "Hello Java!"; jtulach@193: int jh = StringSample.hashCode(j); jtulach@193: assertExec( jtulach@193: "Hashcode is the same " + jh, jaroslav@248: StringSample.class, "hashCode__ILjava_lang_String_2", jtulach@193: Double.valueOf(jh), j jtulach@193: ); jtulach@193: } jtulach@196: @Test public void stringSwitch1() throws Exception { jtulach@196: assertExec( jtulach@196: "Get one", jaroslav@248: StringSample.class, "stringSwitch__ILjava_lang_String_2", jtulach@196: Double.valueOf(1), "jedna" jtulach@196: ); jtulach@196: } jtulach@196: @Test public void stringSwitch2() throws Exception { jtulach@196: assertExec( jtulach@196: "Get two", jaroslav@248: StringSample.class, "stringSwitch__ILjava_lang_String_2", jtulach@196: Double.valueOf(2), "dve" jtulach@196: ); jtulach@196: } jtulach@196: @Test public void stringSwitchDefault() throws Exception { jtulach@196: assertExec( jtulach@196: "Get -1", jaroslav@248: StringSample.class, "stringSwitch__ILjava_lang_String_2", jtulach@196: Double.valueOf(-1), "none" jtulach@196: ); jtulach@196: } jtulach@193: jaroslav@184: @Test public void countAB() throws Exception { jaroslav@184: assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane"); jaroslav@184: assertExec( jaroslav@184: "One A and one B adds to 3", jaroslav@248: StringSample.class, "countAB__ILjava_lang_String_2", jaroslav@184: Double.valueOf(3), "Ahoj Bedo!" jaroslav@184: ); jaroslav@184: jaroslav@184: } jaroslav@572: jaroslav@572: @Test public void compareStrings() throws Exception { jaroslav@572: int res = StringSample.compare("Saab", "Volvo"); jaroslav@572: assertExec( jaroslav@572: "Saab finished sooner than Volvo", jaroslav@572: StringSample.class, "compare__ILjava_lang_String_2Ljava_lang_String_2", jaroslav@572: Double.valueOf(res), "Saab", "Volvo" jaroslav@572: ); jaroslav@572: jaroslav@572: } jaroslav@184: jaroslav@708: private static TestVM code; jaroslav@34: jaroslav@103: @BeforeClass jaroslav@103: public void compileTheCode() throws Exception { jaroslav@708: code = TestVM.compileClass( jaroslav@34: "org/apidesign/vm4brwsr/StringSample", jaroslav@34: "java/lang/String" jaroslav@34: ); jaroslav@103: } jaroslav@103: jaroslav@203: private static void assertExec(String msg, jaroslav@203: Class clazz, String method, Object expRes, Object... args jaroslav@203: ) throws Exception { jaroslav@708: code.assertExec(msg, clazz, method, expRes, args); jaroslav@34: } jaroslav@34: jaroslav@34: }