vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 25 Nov 2012 23:14:58 +0100
branchlazy
changeset 203 c6a0b5b64133
parent 196 e7ea061e669c
child 206 84920274cb32
permissions -rw-r--r--
Enclosing definition of all the methods inside the proto() function
     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(timeOut=10000) public void toStringConcatenation() throws Exception {
    72         assertExec(
    73             "Five executions should generate 5Hello World!",
    74             StringSample.class, "toStringTestLjava_lang_StringI",
    75             "Hello World!5", 5
    76         );
    77     }
    78     @Test public void toStringConcatenationJava() throws Exception {
    79         assertEquals("Hello World!5", StringSample.toStringTest(5));
    80     }
    81     
    82     @Test(timeOut=10000) public void stringStringConcat() throws Exception {
    83         assertExec(
    84             "Composes strings OK",
    85             StringSample.class, "concatStringsLjava_lang_String",
    86             "Hello World!1" + "\\\n\r\t"
    87         );
    88     }
    89 
    90     @Test public void equalsAndSubstring() throws Exception {
    91         assertExec(
    92             "Composes are OK",
    93             StringSample.class, "equalToHelloZII",
    94             true, 0, 5
    95         );
    96     }
    97     @Test public void replaceChars() throws Exception {
    98         assertExec(
    99             "Can replace slashes by underscores",
   100             StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
   101             "x_y_z", "x/y/z", '/', '_'
   102         );
   103     }
   104     @Test public void replaceIntChars() throws Exception {
   105         assertExec(
   106             "Can replace slashes by underscores",
   107             StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
   108             "x_y_z", "x/y/z", (int)'/', (int)'_'
   109         );
   110     }
   111 
   112     @Test public void insertBuilder() throws Exception {
   113         assertExec(
   114             "Can insert something into a buffer?",
   115             StringSample.class, "insertBufferLjava_lang_String",
   116             "Ahojdo!"
   117         );
   118     }
   119     
   120     @Test public void compareHashCodeHi() throws Exception {
   121         String j = "Hi";
   122         int jh = StringSample.hashCode(j);
   123         assertExec(
   124             "Hashcode is the same " +jh,
   125             StringSample.class, "hashCodeILjava_lang_String",
   126             Double.valueOf(jh), j
   127         );
   128     }
   129     @Test public void compareHashCode1() throws Exception {
   130         String j = "Hello Java!";
   131         int jh = StringSample.hashCode(j);
   132         assertExec(
   133             "Hashcode is the same " + jh,
   134             StringSample.class, "hashCodeILjava_lang_String",
   135             Double.valueOf(jh), j
   136         );
   137     }
   138     @Test public void stringSwitch1() throws Exception {
   139         assertExec(
   140             "Get one",
   141             StringSample.class, "stringSwitchILjava_lang_String",
   142             Double.valueOf(1), "jedna"
   143         );
   144     }
   145     @Test public void stringSwitch2() throws Exception {
   146         assertExec(
   147             "Get two",
   148             StringSample.class, "stringSwitchILjava_lang_String",
   149             Double.valueOf(2), "dve"
   150         );
   151     }
   152     @Test public void stringSwitchDefault() throws Exception {
   153         assertExec(
   154             "Get -1",
   155             StringSample.class, "stringSwitchILjava_lang_String",
   156             Double.valueOf(-1), "none"
   157         );
   158     }
   159     
   160     @Test public void countAB() throws Exception {
   161         assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
   162         assertExec(
   163             "One A and one B adds to 3",
   164             StringSample.class, "countABILjava_lang_String",
   165             Double.valueOf(3), "Ahoj Bedo!"
   166         );
   167         
   168     }
   169     
   170     private static CharSequence codeSeq;
   171     private static Invocable code;
   172     
   173     @BeforeClass 
   174     public void compileTheCode() throws Exception {
   175         StringBuilder sb = new StringBuilder();
   176         code = StaticMethodTest.compileClass(sb, 
   177             "org/apidesign/vm4brwsr/StringSample",
   178             "java/lang/String"
   179         );
   180         codeSeq = sb;
   181     }
   182     
   183     private static void assertExec(String msg, 
   184         Class<?> clazz, String method, Object expRes, Object... args
   185     ) throws Exception {
   186         StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args);
   187     }
   188     
   189 }