jaroslav@34: package org.apidesign.vm4brwsr; jaroslav@34: jaroslav@34: import javax.script.Invocable; jaroslav@34: import javax.script.ScriptException; jaroslav@34: import org.testng.annotations.Test; jaroslav@34: import static org.testng.Assert.*; 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@34: "org_apidesign_vm4brwsr_StringSample_sayHelloCI", jaroslav@35: "H", 0 jaroslav@34: ); jaroslav@34: } jaroslav@36: jaroslav@36: @Test public void toStringConcatenation() throws Exception { jaroslav@36: assertExec( jaroslav@36: "Five executions should generate 5Hello World!", jaroslav@36: "org_apidesign_vm4brwsr_StringSample_toStringTestLjava_lang_StringI", jaroslav@36: "5Hello World!", 5 jaroslav@36: ); jaroslav@36: } jaroslav@34: jaroslav@34: private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { jaroslav@34: StringBuilder sb = new StringBuilder(); jaroslav@34: Invocable i = StaticMethodTest.compileClass(sb, jaroslav@34: "org/apidesign/vm4brwsr/StringSample", jaroslav@34: "java/lang/String" jaroslav@34: ); jaroslav@34: jaroslav@34: Object ret = null; jaroslav@34: try { jaroslav@34: ret = i.invokeFunction(methodName, args); jaroslav@34: } catch (ScriptException ex) { jaroslav@34: fail("Execution failed in " + sb, ex); jaroslav@34: } catch (NoSuchMethodException ex) { jaroslav@34: fail("Cannot find method in " + sb, ex); jaroslav@34: } jaroslav@34: if (ret == null && expRes == null) { jaroslav@34: return; jaroslav@34: } jaroslav@34: if (expRes.equals(ret)) { jaroslav@34: return; jaroslav@34: } jaroslav@34: assertEquals(ret, expRes, msg + "was: " + ret + "\n" + sb); jaroslav@34: jaroslav@34: } jaroslav@34: jaroslav@34: }