# HG changeset patch # User Jaroslav Tulach # Date 1353881698 -3600 # Node ID c6a0b5b64133b1174389e847bec0d092f8d6e1ba # Parent d059e6eccb8025248448f17210611d462e87fd43 Enclosing definition of all the methods inside the proto() function diff -r d059e6eccb80 -r c6a0b5b64133 emul/src/main/java/java/lang/AbstractStringBuilder.java --- a/emul/src/main/java/java/lang/AbstractStringBuilder.java Sun Nov 25 21:31:51 2012 +0100 +++ b/emul/src/main/java/java/lang/AbstractStringBuilder.java Sun Nov 25 23:14:58 2012 +0100 @@ -602,7 +602,7 @@ */ @JavaScriptBody( args={ "self", "i" }, - body="return java_lang_AbstractStringBuilder_appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());" + body="return java_lang_AbstractStringBuilder_proto().appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());" ) public AbstractStringBuilder append(int i) { if (i == Integer.MIN_VALUE) { diff -r d059e6eccb80 -r c6a0b5b64133 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Nov 25 21:31:51 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Nov 25 23:14:58 2012 +0100 @@ -19,7 +19,6 @@ import java.io.IOException; import java.io.InputStream; -import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.javap.AnnotationParser; import org.apidesign.javap.ClassData; import org.apidesign.javap.FieldData; @@ -74,13 +73,6 @@ } } StringArray toInitilize = new StringArray(); - for (MethodData m : jc.getMethods()) { - if (m.isStatic()) { - generateStaticMethod(m, toInitilize); - } else { - generateInstanceMethod(m); - } - } final String className = className(jc); out.append("\nfunction ").append(className); out.append("() {"); @@ -90,7 +82,8 @@ append(v.getName()).append(initField(v)); } } - out.append("\n}\n\nfunction ").append(className).append("_proto() {"); + out.append("\n}"); + out.append("\n\nfunction ").append(className).append("_proto() {"); out.append("\n if (").append(className). append(".prototype.$instOf_").append(className).append(") {"); out.append("\n return new ").append(className).append(";"); @@ -110,8 +103,10 @@ out.append("\n var p = ").append(className).append(".prototype;"); } for (MethodData m : jc.getMethods()) { - if (!m.getName().contains("")) { - generateMethodReference("\n p.", m); + if (m.isStatic()) { + generateStaticMethod("\n p.", m, toInitilize); + } else { + generateInstanceMethod("\n p.", m); } } out.append("\n p.$instOf_").append(className).append(" = true;"); @@ -127,17 +122,15 @@ } return sb.toString(); } - private void generateStaticMethod(MethodData m, StringArray toInitilize) throws IOException { - if (javaScriptBody(m, true)) { + private void generateStaticMethod(String prefix, MethodData m, StringArray toInitilize) throws IOException { + if (javaScriptBody(prefix, m, true)) { return; } StringBuilder argsCnt = new StringBuilder(); final String mn = findMethodName(m, argsCnt); - out.append("\nfunction ").append( - className(jc) - ).append('_').append(mn); + out.append(prefix).append(mn).append(" = function"); if (mn.equals("classV")) { - toInitilize.add(className(jc) + '_' + mn); + toInitilize.add(className(jc) + "_proto()." + mn); } out.append('('); String space = ""; @@ -165,24 +158,16 @@ } else { out.append(" /* no code found for ").append(m.getInternalSig()).append(" */\n"); } - out.append("}"); + out.append("};"); } - private void generateMethodReference(String prefix, MethodData m) throws IOException { - final String name = findMethodName(m, new StringBuilder()); - out.append(prefix).append(name).append(" = ") - .append(className(jc)) - .append('_').append(name).append(";"); - } - - private void generateInstanceMethod(MethodData m) throws IOException { - if (javaScriptBody(m, false)) { + private void generateInstanceMethod(String prefix, MethodData m) throws IOException { + if (javaScriptBody(prefix, m, false)) { return; } StringBuilder argsCnt = new StringBuilder(); - out.append("\nfunction ").append( - className(jc) - ).append('_').append(findMethodName(m, argsCnt)); + final String mn = findMethodName(m, argsCnt); + out.append(prefix).append(mn).append(" = function"); out.append("(arg0"); String space = ","; for (int index = 1, i = 0; i < argsCnt.length(); i++) { @@ -207,7 +192,7 @@ } else { out.append(" /* no code found for ").append(m.getInternalSig()).append(" */\n"); } - out.append("}"); + out.append("};"); } private void produceCode(byte[] byteCodes) throws IOException { @@ -980,7 +965,7 @@ return d.replace('[', 'A'); } - private boolean javaScriptBody(MethodData m, boolean isStatic) throws IOException { + private boolean javaScriptBody(String prefix, MethodData m, boolean isStatic) throws IOException { byte[] arr = m.findAnnotationData(true); if (arr == null) { return false; @@ -1010,9 +995,8 @@ return false; } StringBuilder cnt = new StringBuilder(); - out.append("\nfunction ").append(className(jc)).append('_'). - append(findMethodName(m, cnt)); - out.append("("); + out.append(prefix).append(findMethodName(m, cnt)); + out.append(" = function("); String space; int index; if (!isStatic) { diff -r d059e6eccb80 -r c6a0b5b64133 vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Sun Nov 25 21:31:51 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Sun Nov 25 23:14:58 2012 +0100 @@ -29,7 +29,7 @@ */ public class ArrayTest { @Test public void verifySimpleIntOperation() throws Exception { - assertExec("CheckTheSum", "org_apidesign_vm4brwsr_Array_simpleI", + assertExec("CheckTheSum", Array.class, "simpleI", Double.valueOf(15) ); } @@ -39,13 +39,13 @@ } @Test public void verifyOperationsOnArrays() throws Exception { - assertExec("The sum is 105", "org_apidesign_vm4brwsr_Array_sumD", + assertExec("The sum is 105", Array.class, "sumD", Double.valueOf(105) ); } @Test public void doesCopyArrayWork() throws Exception { - assertExec("Returns 'a'", "org_apidesign_vm4brwsr_Array_copyArrayC", Double.valueOf('a')); + assertExec("Returns 'a'", Array.class, "copyArrayC", Double.valueOf('a')); } private static CharSequence codeSeq; @@ -59,21 +59,7 @@ ); codeSeq = sb; } - private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { - Object ret = null; - try { - ret = code.invokeFunction(methodName, args); - } catch (ScriptException ex) { - fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } - if (ret == null && expRes == null) { - return; - } - if (expRes.equals(ret)) { - return; - } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq); + private static void assertExec(String msg, Class clazz, String method, Object expRes, Object... args) throws Exception { + StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args); } } diff -r d059e6eccb80 -r c6a0b5b64133 vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java Sun Nov 25 21:31:51 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java Sun Nov 25 23:14:58 2012 +0100 @@ -31,42 +31,42 @@ @Test public void verifyDefaultDoubleValue() throws Exception { assertExec( "Will be zero", - "org_apidesign_vm4brwsr_Instance_defaultDblValueD", + Instance.class, "defaultDblValueD", Double.valueOf(0) ); } @Test public void verifyStaticMethodCall() throws Exception { assertExec( "Will be zero", - "org_apidesign_vm4brwsr_InstanceSub_recallDblD", + InstanceSub.class, "recallDblD", Double.valueOf(0) ); } @Test public void verifyAssignedByteValue() throws Exception { assertExec( "Will one thirty one", - "org_apidesign_vm4brwsr_Instance_assignedByteValueB", + Instance.class, "assignedByteValueB", Double.valueOf(31) ); } @Test public void verifyMagicOne() throws Exception { assertExec( "Should be three and something", - "org_apidesign_vm4brwsr_Instance_magicOneD", + Instance.class, "magicOneD", Double.valueOf(3.3) ); } @Test public void verifyInstanceMethods() throws Exception { assertExec( "Should be eleven as we invoke overwritten method, plus 44", - "org_apidesign_vm4brwsr_Instance_virtualBytesI", + Instance.class, "virtualBytesI", Double.valueOf(55) ); } @Test public void verifyInterfaceMethods() throws Exception { assertExec( "Retruns default value", - "org_apidesign_vm4brwsr_Instance_interfaceBytesF", + Instance.class, "interfaceBytesF", Double.valueOf(31) ); } @@ -74,7 +74,7 @@ @Test public void isNull() throws Exception { assertExec( "Yes, we are instance", - "org_apidesign_vm4brwsr_Instance_isNullZ", + Instance.class, "isNullZ", Double.valueOf(0.0) ); } @@ -82,7 +82,7 @@ @Test public void isInstanceOf() throws Exception { assertExec( "Yes, we are instance", - "org_apidesign_vm4brwsr_Instance_instanceOfZZ", + Instance.class, "instanceOfZZ", Double.valueOf(1.0), true ); } @@ -90,7 +90,7 @@ @Test public void notInstanceOf() throws Exception { assertExec( "No, we are not an instance", - "org_apidesign_vm4brwsr_Instance_instanceOfZZ", + Instance.class, "instanceOfZZ", Double.valueOf(0.0), false ); } @@ -98,14 +98,14 @@ @Test public void verifyCastToClass() throws Exception { assertExec( "Five signals all is good", - "org_apidesign_vm4brwsr_Instance_castsWorkIZ", + Instance.class, "castsWorkIZ", Double.valueOf(5.0), false ); } @Test public void verifyCastToInterface() throws Exception { assertExec( "Five signals all is good", - "org_apidesign_vm4brwsr_Instance_castsWorkIZ", + Instance.class, "castsWorkIZ", Double.valueOf(5.0), true ); } @@ -127,25 +127,9 @@ } private void assertExec( - String msg, String methodName, Object expRes, Object... args + String msg, Class clazz, String method, Object expRes, Object... args ) throws Exception { - - Object ret = null; - try { - ret = code.invokeFunction(methodName, args); - } catch (ScriptException ex) { - fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } - if (ret == null && expRes == null) { - return; - } - if (expRes.equals(ret)) { - return; - } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq)); - + StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args); } } diff -r d059e6eccb80 -r c6a0b5b64133 vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Sun Nov 25 21:31:51 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Sun Nov 25 23:14:58 2012 +0100 @@ -17,11 +17,6 @@ */ package org.apidesign.vm4brwsr; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; import javax.script.Invocable; import javax.script.ScriptException; import static org.testng.Assert.*; @@ -34,19 +29,19 @@ */ public class NumberTest { @Test public void integerFromString() throws Exception { - assertExec("Can convert string to integer", "java_lang_Integer_parseIntILjava_lang_String", + assertExec("Can convert string to integer", Integer.class, "parseIntILjava_lang_String", Double.valueOf(333), "333" ); } @Test public void doubleFromString() throws Exception { - assertExec("Can convert string to double", "java_lang_Double_parseDoubleDLjava_lang_String", + assertExec("Can convert string to double", Double.class, "parseDoubleDLjava_lang_String", Double.valueOf(33.3), "33.3" ); } @Test public void autoboxDouble() throws Exception { - assertExec("Autoboxing of doubles is OK", "org_apidesign_vm4brwsr_Numbers_autoboxDblToStringLjava_lang_String", + assertExec("Autoboxing of doubles is OK", Numbers.class, "autoboxDblToStringLjava_lang_String", "3.3" ); } @@ -56,7 +51,7 @@ } @Test public void jslog1000() throws Exception { - assertExec("log_10(1000) == 3", "java_lang_Math_log10DD", + assertExec("log_10(1000) == 3", Math.class, "log10DD", Double.valueOf(3.0), 1000.0 ); } @@ -65,20 +60,20 @@ assertEquals(3, Numbers.rem(303, 10)); } @Test public void jsRem() throws Exception { - assertExec("Should be three", "org_apidesign_vm4brwsr_Numbers_remIII", + assertExec("Should be three", Numbers.class, "remIII", Double.valueOf(3.0), 303, 10 ); } @Test public void deserializeInt() throws Exception { int exp = Numbers.deserInt(); - assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserIntI", + assertExec("Should be the same", Numbers.class, "deserIntI", Double.valueOf(exp) ); } @Test public void deserializeSimpleLong() throws Exception { - assertExec("Should be 3454", "org_apidesign_vm4brwsr_Numbers_deserLongJAB", + assertExec("Should be 3454", Numbers.class, "deserLongJAB", Double.valueOf(3454), new byte[] { (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)13, (byte)126 } ); @@ -102,7 +97,7 @@ @Test public void deserializeFloatInJS() throws Exception { float f = 54324.32423f; - assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserFloatF", + assertExec("Should be the same", Numbers.class, "deserFloatF", Double.valueOf(f) ); } @@ -115,7 +110,7 @@ @Test public void deserializeDoubleInJS() throws Exception { double f = 3.0; - assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserDoubleD", f); + assertExec("Should be the same", Numbers.class, "deserDoubleD", f); } /* @Test public void serDouble() throws IOException { @@ -136,7 +131,7 @@ @Test public void fiveInStringJS() throws Exception { String s = Numbers.intToString(); assertExec("Should be the same: " + s, - "org_apidesign_vm4brwsr_Numbers_intToStringLjava_lang_String", + Numbers.class, "intToStringLjava_lang_String", s ); } @@ -144,7 +139,7 @@ @Test public void sevenInStringJS() throws Exception { String s = Numbers.floatToString(); assertExec("Should be the same: " + s, - "org_apidesign_vm4brwsr_Numbers_floatToStringLjava_lang_String", + Numbers.class, "floatToStringLjava_lang_String", s ); } @@ -162,15 +157,16 @@ } private static void assertExec( - String msg, String methodName, Object expRes, Object... args) throws Exception { + String msg, Class clazz, String method, Object expRes, Object... args) throws Exception { Object ret = null; try { - ret = code.invokeFunction(methodName, args); + ret = code.invokeFunction(clazz.getName().replace('.', '_') + "_proto"); + ret = code.invokeMethod(ret, method, args); } catch (ScriptException ex) { - fail("Execution failed in\n" + codeSeq, ex); + fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + codeSeq, ex); + fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex); } if (ret == null && expRes == null) { return; @@ -181,10 +177,10 @@ if (expRes instanceof Double && ret instanceof Double) { double expD = ((Double)expRes).doubleValue(); double retD = ((Double)ret).doubleValue(); - assertEquals(retD, expD, 0.000004, msg + " was " + ret + "\n" + codeSeq); + assertEquals(retD, expD, 0.000004, msg + " was " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq)); return; } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq); + assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq)); } } diff -r d059e6eccb80 -r c6a0b5b64133 vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Sun Nov 25 21:31:51 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Sun Nov 25 23:14:58 2012 +0100 @@ -36,7 +36,7 @@ @Test public void threePlusFour() throws Exception { assertExec( "Should be seven", - "org_apidesign_vm4brwsr_StaticMethod_sumIII", + StaticMethod.class, "sumIII", Double.valueOf(7), 3, 4 ); @@ -45,7 +45,7 @@ @Test public void checkReallyInitializedValues() throws Exception { assertExec( "Return true", - "org_apidesign_vm4brwsr_StaticMethod_isNullZ", + StaticMethod.class, "isNullZ", Double.valueOf(1) ); } @@ -53,7 +53,7 @@ @Test public void powerOfThree() throws Exception { assertExec( "Should be nine", - "org_apidesign_vm4brwsr_StaticMethod_powerFF", + StaticMethod.class, "powerFF", Double.valueOf(9), 3.0f ); @@ -62,7 +62,7 @@ @Test public void minusOne() throws Exception { assertExec( "Should be minus one", - "org_apidesign_vm4brwsr_StaticMethod_minusOneI", + StaticMethod.class, "minusOneI", Double.valueOf(-1) ); } @@ -70,7 +70,7 @@ @Test public void doubleWithoutLong() throws Exception { assertExec( "Should be two", - "org_apidesign_vm4brwsr_StaticMethod_minusDDJ", + StaticMethod.class, "minusDDJ", Double.valueOf(2), 3.0d, 1l ); @@ -79,7 +79,7 @@ @Test public void divAndRound() throws Exception { assertExec( "Should be rounded to one", - "org_apidesign_vm4brwsr_StaticMethod_divIBD", + StaticMethod.class, "divIBD", Double.valueOf(1), 3, 3.75 ); @@ -87,7 +87,7 @@ @Test public void mixedMethodFourParams() throws Exception { assertExec( "Should be two", - "org_apidesign_vm4brwsr_StaticMethod_mixIIJBD", + StaticMethod.class, "mixIIJBD", Double.valueOf(20), 2, 10l, 5, 2.0 ); @@ -95,7 +95,7 @@ @Test public void factRec() throws Exception { assertExec( "Factorial of 5 is 120", - "org_apidesign_vm4brwsr_StaticMethod_factRecJI", + StaticMethod.class, "factRecJI", Double.valueOf(120), 5 ); @@ -103,7 +103,7 @@ @Test public void factIter() throws Exception { assertExec( "Factorial of 5 is 120", - "org_apidesign_vm4brwsr_StaticMethod_factIterJI", + StaticMethod.class, "factIterJI", Double.valueOf(120), 5 ); @@ -112,7 +112,7 @@ @Test public void xor() throws Exception { assertExec( "Xor is 4", - "org_apidesign_vm4brwsr_StaticMethod_xorJIJ", + StaticMethod.class, "xorJIJ", Double.valueOf(4), 7, 3 @@ -122,7 +122,7 @@ @Test public void or() throws Exception { assertExec( "Or will be 7", - "org_apidesign_vm4brwsr_StaticMethod_orOrAndJZII", + StaticMethod.class, "orOrAndJZII", Double.valueOf(7), true, 4, @@ -132,14 +132,14 @@ @Test public void nullCheck() throws Exception { assertExec( "Returns nothing", - "org_apidesign_vm4brwsr_StaticMethod_noneLjava_lang_ObjectII", + StaticMethod.class, "noneLjava_lang_ObjectII", null, 1, 3 ); } @Test public void and() throws Exception { assertExec( "And will be 3", - "org_apidesign_vm4brwsr_StaticMethod_orOrAndJZII", + StaticMethod.class, "orOrAndJZII", Double.valueOf(3), false, 7, @@ -149,7 +149,7 @@ @Test public void inc4() throws Exception { assertExec( "It will be 4", - "org_apidesign_vm4brwsr_StaticMethod_inc4I", + StaticMethod.class, "inc4I", Double.valueOf(4) ); } @@ -162,7 +162,7 @@ @Test public void shiftLeftInJS() throws Exception { assertExec( "Setting 9th bit", - "org_apidesign_vm4brwsr_StaticMethod_shiftLeftIII", + StaticMethod.class, "shiftLeftIII", Double.valueOf(256), 1, 8 ); @@ -176,7 +176,7 @@ @Test public void shiftRightInJS() throws Exception { assertExec( "Get -1", - "org_apidesign_vm4brwsr_StaticMethod_shiftArithmRightIIIZ", + StaticMethod.class, "shiftArithmRightIIIZ", Double.valueOf(-1), -8, 3, true ); @@ -189,7 +189,7 @@ @Test public void unsignedShiftRightInJS() throws Exception { assertExec( "Get -1", - "org_apidesign_vm4brwsr_StaticMethod_shiftArithmRightIIIZ", + StaticMethod.class, "shiftArithmRightIIIZ", Double.valueOf(1), 8, 3, false ); @@ -198,7 +198,7 @@ @Test public void javaScriptBody() throws Exception { assertExec( "JavaScript string", - "org_apidesign_vm4brwsr_StaticMethod_i2sLjava_lang_StringII", + StaticMethod.class, "i2sLjava_lang_StringII", "333", 330, 3 ); @@ -207,7 +207,7 @@ @Test public void switchJarda() throws Exception { assertExec( "The expected value", - "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI", + StaticMethod.class, "swtchLjava_lang_StringI", "Jarda", 0 ); @@ -216,7 +216,7 @@ @Test public void switchDarda() throws Exception { assertExec( "The expected value", - "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI", + StaticMethod.class, "swtchLjava_lang_StringI", "Darda", 1 ); @@ -224,7 +224,7 @@ @Test public void switchParda() throws Exception { assertExec( "The expected value", - "org_apidesign_vm4brwsr_StaticMethod_swtch2Ljava_lang_StringI", + StaticMethod.class, "swtch2Ljava_lang_StringI", "Parda", 22 ); @@ -232,7 +232,7 @@ @Test public void switchMarda() throws Exception { assertExec( "The expected value", - "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI", + StaticMethod.class, "swtchLjava_lang_StringI", "Marda", -433 ); @@ -249,16 +249,25 @@ } - private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { - StringBuilder sb = new StringBuilder(); - + private static void assertExec( + String msg, Class clazz, String method, + Object expRes, Object... args + ) throws Exception { + assertExec(code, codeSeq, msg, clazz, method, expRes, args); + } + static void assertExec( + Invocable toRun, CharSequence theCode, + String msg, Class clazz, String method, + Object expRes, Object... args + ) throws Exception { Object ret = null; try { - ret = code.invokeFunction(methodName, args); + ret = toRun.invokeFunction(clazz.getName().replace('.', '_') + "_proto"); + ret = toRun.invokeMethod(ret, method, args); } catch (ScriptException ex) { - fail("Execution failed in\n" + codeSeq, ex); + fail("Execution failed in\n" + dumpJS(theCode), ex); } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + codeSeq, ex); + fail("Cannot find method in\n" + dumpJS(theCode), ex); } if (ret == null && expRes == null) { return; @@ -266,7 +275,7 @@ if (expRes != null && expRes.equals(ret)) { return; } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq); + assertEquals(ret, expRes, msg + "was: " + ret + "\n" + dumpJS(theCode)); } @@ -293,7 +302,7 @@ if (sb.length() > 2000) { sb = dumpJS(sb); } - fail("Could not compile:\n" + sb, ex); + fail("Could not evaluate:\n" + sb, ex); return null; } } diff -r d059e6eccb80 -r c6a0b5b64133 vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Sun Nov 25 21:31:51 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Sun Nov 25 23:14:58 2012 +0100 @@ -31,7 +31,7 @@ @Test public void firstChar() throws Exception { assertExec( "First char in Hello is H", - "org_apidesign_vm4brwsr_StringSample_sayHelloCI", + StringSample.class, "sayHelloCI", 72, 0 ); } @@ -39,7 +39,7 @@ @Test public void fromChars() throws Exception { assertExec( "First char in Hello is ABC", - "org_apidesign_vm4brwsr_StringSample_fromCharsLjava_lang_StringCCC", + StringSample.class, "fromCharsLjava_lang_StringCCC", "ABC", 'A', 'B', 'C' ); } @@ -47,7 +47,7 @@ @Test public void concatChars() throws Exception { assertExec( "Composing yields ABC", - "org_apidesign_vm4brwsr_StringSample_charsLjava_lang_StringCCC", + StringSample.class, "charsLjava_lang_StringCCC", "ABC", 'A', 'B', 'C' ); } @@ -55,7 +55,7 @@ @Test public void concatCharsFromInts() throws Exception { assertExec( "Composing yields ABC", - "org_apidesign_vm4brwsr_StringSample_charsFromNumbersLjava_lang_String", + StringSample.class, "charsFromNumbersLjava_lang_String", "ABC" ); } @@ -63,7 +63,7 @@ @Test public void concatCharsFromChars() throws Exception { assertExec( "Composing yields ABC", - "org_apidesign_vm4brwsr_StringSample_charsFromCharsLjava_lang_String", + StringSample.class, "charsFromCharsLjava_lang_String", "ABC" ); } @@ -71,7 +71,7 @@ @Test(timeOut=10000) public void toStringConcatenation() throws Exception { assertExec( "Five executions should generate 5Hello World!", - "org_apidesign_vm4brwsr_StringSample_toStringTestLjava_lang_StringI", + StringSample.class, "toStringTestLjava_lang_StringI", "Hello World!5", 5 ); } @@ -82,7 +82,7 @@ @Test(timeOut=10000) public void stringStringConcat() throws Exception { assertExec( "Composes strings OK", - "org_apidesign_vm4brwsr_StringSample_concatStringsLjava_lang_String", + StringSample.class, "concatStringsLjava_lang_String", "Hello World!1" + "\\\n\r\t" ); } @@ -90,21 +90,21 @@ @Test public void equalsAndSubstring() throws Exception { assertExec( "Composes are OK", - "org_apidesign_vm4brwsr_StringSample_equalToHelloZII", + StringSample.class, "equalToHelloZII", true, 0, 5 ); } @Test public void replaceChars() throws Exception { assertExec( "Can replace slashes by underscores", - "org_apidesign_vm4brwsr_StringSample_replaceLjava_lang_StringLjava_lang_StringCC", + StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC", "x_y_z", "x/y/z", '/', '_' ); } @Test public void replaceIntChars() throws Exception { assertExec( "Can replace slashes by underscores", - "org_apidesign_vm4brwsr_StringSample_replaceLjava_lang_StringLjava_lang_StringCC", + StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC", "x_y_z", "x/y/z", (int)'/', (int)'_' ); } @@ -112,7 +112,7 @@ @Test public void insertBuilder() throws Exception { assertExec( "Can insert something into a buffer?", - "org_apidesign_vm4brwsr_StringSample_insertBufferLjava_lang_String", + StringSample.class, "insertBufferLjava_lang_String", "Ahojdo!" ); } @@ -122,7 +122,7 @@ int jh = StringSample.hashCode(j); assertExec( "Hashcode is the same " +jh, - "org_apidesign_vm4brwsr_StringSample_hashCodeILjava_lang_String", + StringSample.class, "hashCodeILjava_lang_String", Double.valueOf(jh), j ); } @@ -131,28 +131,28 @@ int jh = StringSample.hashCode(j); assertExec( "Hashcode is the same " + jh, - "org_apidesign_vm4brwsr_StringSample_hashCodeILjava_lang_String", + StringSample.class, "hashCodeILjava_lang_String", Double.valueOf(jh), j ); } @Test public void stringSwitch1() throws Exception { assertExec( "Get one", - "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String", + StringSample.class, "stringSwitchILjava_lang_String", Double.valueOf(1), "jedna" ); } @Test public void stringSwitch2() throws Exception { assertExec( "Get two", - "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String", + StringSample.class, "stringSwitchILjava_lang_String", Double.valueOf(2), "dve" ); } @Test public void stringSwitchDefault() throws Exception { assertExec( "Get -1", - "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String", + StringSample.class, "stringSwitchILjava_lang_String", Double.valueOf(-1), "none" ); } @@ -161,7 +161,7 @@ assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane"); assertExec( "One A and one B adds to 3", - "org_apidesign_vm4brwsr_StringSample_countABILjava_lang_String", + StringSample.class, "countABILjava_lang_String", Double.valueOf(3), "Ahoj Bedo!" ); @@ -180,23 +180,10 @@ codeSeq = sb; } - private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { - Object ret = null; - try { - ret = code.invokeFunction(methodName, args); - } catch (ScriptException ex) { - fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } - if (ret == null && expRes == null) { - return; - } - if (expRes.equals(ret)) { - return; - } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq)); - + private static void assertExec(String msg, + Class clazz, String method, Object expRes, Object... args + ) throws Exception { + StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args); } } diff -r d059e6eccb80 -r c6a0b5b64133 vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Sun Nov 25 21:31:51 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Sun Nov 25 23:14:58 2012 +0100 @@ -41,10 +41,8 @@ Object ret; try { - ret = code.invokeFunction( - "org_apidesign_vm4brwsr_VMinVM_toJavaScriptLjava_lang_StringAB", - arr - ); + ret = code.invokeFunction(VMinVM.class.getName().replace('.', '_') + "_proto"); + ret = code.invokeMethod(ret, "toJavaScriptLjava_lang_StringAB", arr); } catch (Exception ex) { File f = File.createTempFile("execution", ".js"); FileWriter w = new FileWriter(f);