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
     1 /**
     2  * Back 2 Browser Bytecode Translator
     3  * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4  *
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, version 2 of the License.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License
    15  * along with this program. Look for COPYING file in the top folder.
    16  * If not, see http://opensource.org/licenses/GPL-2.0.
    17  */
    18 package org.apidesign.vm4brwsr;
    19 
    20 import javax.script.Invocable;
    21 import javax.script.ScriptException;
    22 import org.testng.annotations.Test;
    23 import static org.testng.Assert.*;
    24 import org.testng.annotations.BeforeClass;
    25 
    26 /**
    27  *
    28  * @author Jaroslav Tulach <jtulach@netbeans.org>
    29  */
    30 public class StringTest {
    31     @Test public void firstChar() throws Exception {
    32         assertExec(
    33             "First char in Hello is H",
    34             StringSample.class, "sayHelloCI",
    35             72, 0
    36         );
    37     }
    38 
    39     @Test public void fromChars() throws Exception {
    40         assertExec(
    41             "First char in Hello is ABC",
    42             StringSample.class, "fromCharsLjava_lang_StringCCC",
    43             "ABC", 'A', 'B', 'C'
    44         );
    45     }
    46 
    47     @Test public void concatChars() throws Exception {
    48         assertExec(
    49             "Composing yields ABC",
    50             StringSample.class, "charsLjava_lang_StringCCC",
    51             "ABC", 'A', 'B', 'C'
    52         );
    53     }
    54 
    55     @Test public void concatCharsFromInts() throws Exception {
    56         assertExec(
    57             "Composing yields ABC",
    58             StringSample.class, "charsFromNumbersLjava_lang_String",
    59             "ABC"
    60         );
    61     }
    62 
    63     @Test public void concatCharsFromChars() throws Exception {
    64         assertExec(
    65             "Composing yields ABC",
    66             StringSample.class, "charsFromCharsLjava_lang_String",
    67             "ABC"
    68         );
    69     }
    70 
    71     @Test public void instanceOfWorks() throws Exception {
    72         assertExec(
    73             "It is string",
    74             StringSample.class, "isStringInstanceZ",
    75             Double.valueOf(1.0)
    76         );
    77     }
    78 
    79     @Test(timeOut=10000) public void toStringConcatenation() throws Exception {
    80         assertExec(
    81             "Five executions should generate 5Hello World!",
    82             StringSample.class, "toStringTestLjava_lang_StringI",
    83             "Hello World!5", 5
    84         );
    85     }
    86     @Test public void toStringConcatenationJava() throws Exception {
    87         assertEquals("Hello World!5", StringSample.toStringTest(5));
    88     }
    89     
    90     @Test(timeOut=10000) public void stringStringConcat() throws Exception {
    91         assertExec(
    92             "Composes strings OK",
    93             StringSample.class, "concatStringsLjava_lang_String",
    94             "Hello World!1" + "\\\n\r\t"
    95         );
    96     }
    97 
    98     @Test public void equalsAndSubstring() throws Exception {
    99         assertExec(
   100             "Composes are OK",
   101             StringSample.class, "equalToHelloZII",
   102             true, 0, 5
   103         );
   104     }
   105     @Test public void replaceChars() throws Exception {
   106         assertExec(
   107             "Can replace slashes by underscores",
   108             StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
   109             "x_y_z", "x/y/z", '/', '_'
   110         );
   111     }
   112     @Test public void replaceIntChars() throws Exception {
   113         assertExec(
   114             "Can replace slashes by underscores",
   115             StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
   116             "x_y_z", "x/y/z", (int)'/', (int)'_'
   117         );
   118     }
   119 
   120     @Test public void insertBuilder() throws Exception {
   121         assertExec(
   122             "Can insert something into a buffer?",
   123             StringSample.class, "insertBufferLjava_lang_String",
   124             "Ahojdo!"
   125         );
   126     }
   127     
   128     @Test public void compareHashCodeHi() throws Exception {
   129         String j = "Hi";
   130         int jh = StringSample.hashCode(j);
   131         assertExec(
   132             "Hashcode is the same " +jh,
   133             StringSample.class, "hashCodeILjava_lang_String",
   134             Double.valueOf(jh), j
   135         );
   136     }
   137     @Test public void compareHashCode1() throws Exception {
   138         String j = "Hello Java!";
   139         int jh = StringSample.hashCode(j);
   140         assertExec(
   141             "Hashcode is the same " + jh,
   142             StringSample.class, "hashCodeILjava_lang_String",
   143             Double.valueOf(jh), j
   144         );
   145     }
   146     @Test public void stringSwitch1() throws Exception {
   147         assertExec(
   148             "Get one",
   149             StringSample.class, "stringSwitchILjava_lang_String",
   150             Double.valueOf(1), "jedna"
   151         );
   152     }
   153     @Test public void stringSwitch2() throws Exception {
   154         assertExec(
   155             "Get two",
   156             StringSample.class, "stringSwitchILjava_lang_String",
   157             Double.valueOf(2), "dve"
   158         );
   159     }
   160     @Test public void stringSwitchDefault() throws Exception {
   161         assertExec(
   162             "Get -1",
   163             StringSample.class, "stringSwitchILjava_lang_String",
   164             Double.valueOf(-1), "none"
   165         );
   166     }
   167     
   168     @Test public void countAB() throws Exception {
   169         assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
   170         assertExec(
   171             "One A and one B adds to 3",
   172             StringSample.class, "countABILjava_lang_String",
   173             Double.valueOf(3), "Ahoj Bedo!"
   174         );
   175         
   176     }
   177     
   178     private static CharSequence codeSeq;
   179     private static Invocable code;
   180     
   181     @BeforeClass 
   182     public void compileTheCode() throws Exception {
   183         StringBuilder sb = new StringBuilder();
   184         code = StaticMethodTest.compileClass(sb, 
   185             "org/apidesign/vm4brwsr/StringSample",
   186             "java/lang/String"
   187         );
   188         codeSeq = sb;
   189     }
   190     
   191     private static void assertExec(String msg, 
   192         Class<?> clazz, String method, Object expRes, Object... args
   193     ) throws Exception {
   194         StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args);
   195     }
   196     
   197 }