# HG changeset patch # User Jaroslav Tulach # Date 1357208440 -3600 # Node ID e41809be6106c844f205c5e4e982f3512e315679 # Parent dd2f85a6bbba8e793dbaa41ee3931011afe27749 Using 's' instead of Ljava_lang_String_2 diff -r dd2f85a6bbba -r e41809be6106 emul/src/main/java/java/lang/reflect/Method.java --- a/emul/src/main/java/java/lang/reflect/Method.java Thu Jan 03 11:13:40 2013 +0100 +++ b/emul/src/main/java/java/lang/reflect/Method.java Thu Jan 03 11:20:40 2013 +0100 @@ -148,6 +148,7 @@ case 'B': return Byte.TYPE; case 'Z': return Boolean.TYPE; case 'S': return Short.TYPE; + case 's': return String.class; // case 'V': return Void.TYPE; case 'L': try { int up = sig.indexOf("_2"); diff -r dd2f85a6bbba -r e41809be6106 javap/src/main/java/org/apidesign/javap/AnnotationParser.java --- a/javap/src/main/java/org/apidesign/javap/AnnotationParser.java Thu Jan 03 11:13:40 2013 +0100 +++ b/javap/src/main/java/org/apidesign/javap/AnnotationParser.java Thu Jan 03 11:20:40 2013 +0100 @@ -99,7 +99,7 @@ String val = cd.stringValue(primitive, textual); String attrType; if (type == 's') { - attrType = "Ljava_lang_String_2"; + attrType = "s"; if (textual) { val = '"' + val + '"'; } diff -r dd2f85a6bbba -r e41809be6106 launcher/src/main/java/org/apidesign/bck2brwsr/launcher/JSLauncher.java --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/JSLauncher.java Thu Jan 03 11:13:40 2013 +0100 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/JSLauncher.java Thu Jan 03 11:20:40 2013 +0100 @@ -49,7 +49,7 @@ try { mi.result(code.invokeMethod( console, - "invoke__Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2", + "invoke__sss", mi.className, mi.methodName).toString(), null); } catch (ScriptException | NoSuchMethodException ex) { mi.result(null, ex); diff -r dd2f85a6bbba -r e41809be6106 launcher/src/main/resources/org/apidesign/bck2brwsr/launcher/harness.xhtml --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/launcher/harness.xhtml Thu Jan 03 11:13:40 2013 +0100 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/launcher/harness.xhtml Thu Jan 03 11:20:40 2013 +0100 @@ -33,7 +33,7 @@ diff -r dd2f85a6bbba -r e41809be6106 vm/src/main/java/org/apidesign/vm4brwsr/Bck2Brwsr.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/Bck2Brwsr.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/Bck2Brwsr.java Thu Jan 03 11:20:40 2013 +0100 @@ -28,7 +28,7 @@ * be used to bootstrap and load the virtual machine:
  * var vm = bck2brwsr();
  * var main = vm.loadClass('org.your.pkg.Main');
- * main.main__V_3Ljava_lang_String_2(null);
+ * main.main__V_3s(null);
  * 
* In case one wants to initialize the virtual machine with ability to * load classes lazily when needed, one can provide a loader function to diff -r dd2f85a6bbba -r e41809be6106 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 03 11:20:40 2013 +0100 @@ -19,6 +19,7 @@ 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; @@ -1271,9 +1272,18 @@ default: sb.append(ch); break; } } + final String strng = "Ljava_lang_String_2"; + for(;;) { + int pos = sb.indexOf(strng); + if (pos == -1) { + break; + } + sb.delete(pos, pos + strng.length()); + sb.insert(pos, 's'); + } return sb.toString(); } - + private static String findMethodName(MethodData m, StringBuilder cnt) { StringBuilder name = new StringBuilder(); if ("".equals(m.getName())) { // NOI18N diff -r dd2f85a6bbba -r e41809be6106 vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu Jan 03 11:20:40 2013 +0100 @@ -117,12 +117,12 @@ + " var loader = {};\n" + " loader.vm = vm;\n" + " loader.loadClass = function(name) {\n" - + " var attr = name.replace__Ljava_lang_String_2CC(name, '.','_');\n" + + " var attr = name.replace__sCC(name, '.','_');\n" + " var fn = vm[attr];\n" + " if (fn) return fn(false);\n" + " if (!args[0]) throw 'bck2brwsr initialized without loader function, cannot load ' + name;\n" + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n" - + " load___3Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n" + + " load___3Ljava_lang_Object_2Ljava_lang_Object_2s_3Ljava_lang_Object_2(loader, name, args);\n" + " }\n" + " if (args[0]) vm.loadClass = loader.loadClass;\n" + " return loader;\n" diff -r dd2f85a6bbba -r e41809be6106 vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Thu Jan 03 11:20:40 2013 +0100 @@ -86,7 +86,7 @@ /* possibly not needed: @JavaScriptBody(args = {"loader", "n" }, body = - "var cls = n.replace__Ljava_lang_String_2CC(n, '.','_').toString();" + + "var cls = n.replace__sCC(n, '.','_').toString();" + "loader.vm[cls] = true;\n" ) private static native void beingDefined(Object loader, String name); @@ -114,15 +114,15 @@ @JavaScriptBody(args = {"self", "n"}, body = - "var cls = n.replace__Ljava_lang_String_2CC(n, '/','_').toString();" - + "\nvar dot = n.replace__Ljava_lang_String_2CC(n,'/','.').toString();" + "var cls = n.replace__sCC(n, '/','_').toString();" + + "\nvar dot = n.replace__sCC(n,'/','.').toString();" + "\nvar lazy = self.fld_lazy;" + "\nvar loader = lazy.fld_loader;" + "\nvar vm = loader.vm;" + "\nif (vm[cls]) return false;" + "\nvm[cls] = function() {" + "\n var instance = arguments.length == 0 || arguments[0] === true;" - + "\n return lazy.load__Ljava_lang_Object_2Ljava_lang_String_2Z(lazy, dot, instance);" + + "\n return lazy.load__Ljava_lang_Object_2sZ(lazy, dot, instance);" + "\n};" + "\nreturn true;") @Override diff -r dd2f85a6bbba -r e41809be6106 vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java Thu Jan 03 11:20:40 2013 +0100 @@ -38,7 +38,7 @@ }, cnt, returnType); assertEquals(cnt.toString(), "000", "No doubles or longs"); assertTrue(returnType[0] != 'V', "Returns string"); - assertEquals(ret, "replace__Ljava_lang_String_2Ljava_lang_String_2CC"); + assertEquals(ret, "replace__ssCC"); } @Test @@ -50,6 +50,17 @@ }, cnt, returnType); assertEquals(cnt.toString(), "0", "No doubles or longs"); assertTrue(returnType[0] != 'V', "Returns string"); - assertEquals(ret, "toJavaScript__Ljava_lang_String_2_3B"); + assertEquals(ret, "toJavaScript__s_3B"); + } + @Test + public void manglingProblemWithInteger() { + StringBuilder cnt = new StringBuilder(); + char[] returnType = { 'V' }; + String ret = ByteCodeToJavaScript.findMethodName(new String[] { + "VMinVM", "toJavaScript", "(II)Ljava/lang/String;" + }, cnt, returnType); + assertEquals(cnt.toString(), "00", "No doubles or longs"); + assertTrue(returnType[0] != 'V', "Returns string"); + assertEquals(ret, "toJavaScript__sII"); } } diff -r dd2f85a6bbba -r e41809be6106 vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Thu Jan 03 11:20:40 2013 +0100 @@ -48,25 +48,25 @@ assertEquals(Classes.classForInstance(), "java.io.IOException"); } @Test public void jsInstanceName() throws Exception { - assertExec("I/O name", Classes.class, "classForInstance__Ljava_lang_String_2", "java.io.IOException"); + assertExec("I/O name", Classes.class, "classForInstance__s", "java.io.IOException"); } @Test public void javaName() throws Exception { assertEquals(Classes.name(), "java.io.IOException"); } @Test public void jsName() throws Exception { - assertExec("I/O name", Classes.class, "name__Ljava_lang_String_2", "java.io.IOException"); + assertExec("I/O name", Classes.class, "name__s", "java.io.IOException"); } @Test public void javaSimpleName() throws Exception { assertEquals(Classes.simpleName(), "IOException"); } @Test public void jsGetsSimpleName() throws Exception { - assertExec("I/O simple name", Classes.class, "simpleName__Ljava_lang_String_2", "IOException"); + assertExec("I/O simple name", Classes.class, "simpleName__s", "IOException"); } @Test public void javaCanonicalName() { assertEquals(Classes.canonicalName(), "java.io.IOException"); } @Test public void jsCanonicalName() throws Exception { - assertExec("I/O simple name", Classes.class, "canonicalName__Ljava_lang_String_2", "java.io.IOException"); + assertExec("I/O simple name", Classes.class, "canonicalName__s", "java.io.IOException"); } @Test public void javaNewInstance() throws Exception { assertTrue(Classes.newInstance()); @@ -80,7 +80,7 @@ ); } @Test public void jsNoNewInstance() throws Exception { - assertExec("Check problems with new instance", Classes.class, "newInstanceNoPubConstructor__Ljava_lang_String_2", + assertExec("Check problems with new instance", Classes.class, "newInstanceNoPubConstructor__s", "java.lang.InstantiationException:java.lang.Float" ); } @@ -88,17 +88,17 @@ assertExec("Check class annotation", Classes.class, "getMarker__I", Double.valueOf(10)); } @Test public void jsStringAnnotation() throws Exception { - assertExec("Check class annotation", Classes.class, "getNamer__Ljava_lang_String_2Z", "my text", true); + assertExec("Check class annotation", Classes.class, "getNamer__sZ", "my text", true); } @Test public void jsStringAnnotationFromArray() throws Exception { - assertExec("Check class annotation", Classes.class, "getNamer__Ljava_lang_String_2Z", "my text", false); + assertExec("Check class annotation", Classes.class, "getNamer__sZ", "my text", false); } @Test public void javaInvokeMethod() throws Exception { assertEquals(Classes.reflectiveMethodCall(true, "name"), "java.io.IOException", "Calls the name() method via reflection"); } @Test public void jsInvokeMethod() throws Exception { assertExec("Calls the name() method via reflection", Classes.class, - "reflectiveMethodCall__Ljava_lang_Object_2ZLjava_lang_String_2", + "reflectiveMethodCall__Ljava_lang_Object_2Zs", "java.io.IOException", true, "name" ); } @@ -107,19 +107,19 @@ } @Test public void jsFindMethod() throws Exception { assertExec("Calls the name() method via reflection", Classes.class, - "reflectiveMethodCall__Ljava_lang_Object_2ZLjava_lang_String_2", + "reflectiveMethodCall__Ljava_lang_Object_2Zs", "java.io.IOException", false, "name" ); } @Test public void primitiveReturnType() throws Exception { assertExec("Tries to get an integer via reflection", Classes.class, - "primitiveType__Ljava_lang_String_2Ljava_lang_String_2", + "primitiveType__ss", Classes.primitiveType("primitive"), "primitive" ); } @Test public void primitiveBoolReturnType() throws Exception { assertExec("Tries to get an integer via reflection", Classes.class, - "primitiveType__Ljava_lang_String_2Ljava_lang_String_2", + "primitiveType__ss", Classes.primitiveType("primitiveB"), "primitiveB" ); } @@ -128,33 +128,33 @@ } @Test public void jsAnnotatedMethod() throws Exception { assertExec("Calls the name() method via reflection", Classes.class, - "reflectiveMethodCall__Ljava_lang_Object_2ZLjava_lang_String_2", + "reflectiveMethodCall__Ljava_lang_Object_2Zs", "java.io.IOException", false, null ); } @Test public void jsClassParam() throws Exception { assertExec("Calls the nameOfIO()", Classes.class, - "nameOfIO__Ljava_lang_String_2", + "nameOfIO__s", "java.io.IOException" ); } @Test public void noInterface() throws Exception { assertExec("Calls Class.isInterface", Classes.class, - "isInterface__ZLjava_lang_String_2", + "isInterface__Zs", 0.0, "java.lang.String" ); } /* @Test public void isInterface() throws Exception { assertExec("Calls Class.isInterface", Classes.class, - "isInterface__ZLjava_lang_String_2", + "isInterface__Zs", 1.0, "java.lang.Runnable" ); } */ @Test public void integerType() throws Exception { assertExec("Computes the type", Classes.class, - "intType__Ljava_lang_String_2", + "intType__s", Classes.intType() ); } diff -r dd2f85a6bbba -r e41809be6106 vm/src/test/java/org/apidesign/vm4brwsr/ExceptionsTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ExceptionsTest.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ExceptionsTest.java Thu Jan 03 11:20:40 2013 +0100 @@ -48,7 +48,7 @@ @Test public void createObject() throws Exception { assertExec("Object created", Exceptions.class, - "newInstance__Ljava_lang_String_2Ljava_lang_String_2", + "newInstance__ss", "java.lang.Object", "java.lang.Object" ); @@ -56,7 +56,7 @@ @Test public void createFloatFails() throws Exception { assertExec("Float not created", Exceptions.class, - "newInstance__Ljava_lang_String_2Ljava_lang_String_2", + "newInstance__ss", "java.lang.Float", "java.lang.Float" ); @@ -64,7 +64,7 @@ @Test public void createUnknownFails() throws Exception { assertExec("Object created", Exceptions.class, - "newInstance__Ljava_lang_String_2Ljava_lang_String_2", + "newInstance__ss", "CNFE:org.apidesign.Unknown", "org.apidesign.Unknown" ); @@ -74,7 +74,7 @@ Object vm = code.invokeFunction("bck2brwsr"); Object clazz = code.invokeMethod(vm, "loadClass", Exceptions.class.getName()); - String method = "readCounter__ILjava_lang_String_2"; + String method = "readCounter__Is"; try { Object ret = code.invokeMethod(clazz, method, "org.apidesign.Unknown"); diff -r dd2f85a6bbba -r e41809be6106 vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Thu Jan 03 11:20:40 2013 +0100 @@ -29,19 +29,19 @@ */ public class NumberTest { @Test public void integerFromString() throws Exception { - assertExec("Can convert string to integer", Integer.class, "parseInt__ILjava_lang_String_2", + assertExec("Can convert string to integer", Integer.class, "parseInt__Is", Double.valueOf(333), "333" ); } @Test public void doubleFromString() throws Exception { - assertExec("Can convert string to double", Double.class, "parseDouble__DLjava_lang_String_2", + assertExec("Can convert string to double", Double.class, "parseDouble__Ds", Double.valueOf(33.3), "33.3" ); } @Test public void autoboxDouble() throws Exception { - assertExec("Autoboxing of doubles is OK", Numbers.class, "autoboxDblToString__Ljava_lang_String_2", + assertExec("Autoboxing of doubles is OK", Numbers.class, "autoboxDblToString__s", "3.3" ); } @@ -131,7 +131,7 @@ @Test public void fiveInStringJS() throws Exception { String s = Numbers.intToString(); assertExec("Should be the same: " + s, - Numbers.class, "intToString__Ljava_lang_String_2", + Numbers.class, "intToString__s", s ); } @@ -139,7 +139,7 @@ @Test public void sevenInStringJS() throws Exception { String s = Numbers.floatToString(); assertExec("Should be the same: " + s, - Numbers.class, "floatToString__Ljava_lang_String_2", + Numbers.class, "floatToString__s", s ); } diff -r dd2f85a6bbba -r e41809be6106 vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Thu Jan 03 11:20:40 2013 +0100 @@ -201,7 +201,7 @@ @Test public void javaScriptBody() throws Exception { assertExec( "JavaScript string", - StaticMethod.class, "i2s__Ljava_lang_String_2II", + StaticMethod.class, "i2s__sII", "333", 330, 3 ); @@ -210,7 +210,7 @@ @Test public void switchJarda() throws Exception { assertExec( "The expected value", - StaticMethod.class, "swtch__Ljava_lang_String_2I", + StaticMethod.class, "swtch__sI", "Jarda", 0 ); @@ -219,7 +219,7 @@ @Test public void switchDarda() throws Exception { assertExec( "The expected value", - StaticMethod.class, "swtch__Ljava_lang_String_2I", + StaticMethod.class, "swtch__sI", "Darda", 1 ); @@ -227,7 +227,7 @@ @Test public void switchParda() throws Exception { assertExec( "The expected value", - StaticMethod.class, "swtch2__Ljava_lang_String_2I", + StaticMethod.class, "swtch2__sI", "Parda", 22 ); @@ -235,7 +235,7 @@ @Test public void switchMarda() throws Exception { assertExec( "The expected value", - StaticMethod.class, "swtch__Ljava_lang_String_2I", + StaticMethod.class, "swtch__sI", "Marda", -433 ); @@ -243,7 +243,7 @@ @Test public void checkNullCast() throws Exception { assertExec("Null can be cast to any type", - StaticMethod.class, "castNull__Ljava_lang_String_2Z", + StaticMethod.class, "castNull__sZ", null, true ); } diff -r dd2f85a6bbba -r e41809be6106 vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Thu Jan 03 11:20:40 2013 +0100 @@ -97,6 +97,20 @@ return -1; } + public static String replaceWithS(String value) { + StringBuilder sb = new StringBuilder(value); + final String strng = "Ljava_lang_String_2"; + for (;;) { + int pos = sb.indexOf(strng); + if (pos == -1) { + break; + } + sb.delete(pos, strng.length()); + sb.insert(pos, 's'); + } + return sb.toString().toString(); + } + public static String toStringTest(int howMuch) { counter = 0; StringSample ss = null; diff -r dd2f85a6bbba -r e41809be6106 vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Thu Jan 03 11:20:40 2013 +0100 @@ -38,7 +38,7 @@ @Test public void fromChars() throws Exception { assertExec( "First char in Hello is ABC", - StringSample.class, "fromChars__Ljava_lang_String_2CCC", + StringSample.class, "fromChars__sCCC", "ABC", 'A', 'B', 'C' ); } @@ -46,7 +46,7 @@ @Test public void concatChars() throws Exception { assertExec( "Composing yields ABC", - StringSample.class, "chars__Ljava_lang_String_2CCC", + StringSample.class, "chars__sCCC", "ABC", 'A', 'B', 'C' ); } @@ -54,7 +54,7 @@ @Test public void concatCharsFromInts() throws Exception { assertExec( "Composing yields ABC", - StringSample.class, "charsFromNumbers__Ljava_lang_String_2", + StringSample.class, "charsFromNumbers__s", "ABC" ); } @@ -62,7 +62,7 @@ @Test public void concatCharsFromChars() throws Exception { assertExec( "Composing yields ABC", - StringSample.class, "charsFromChars__Ljava_lang_String_2", + StringSample.class, "charsFromChars__s", "ABC" ); } @@ -78,7 +78,7 @@ @Test(timeOut=10000) public void toStringConcatenation() throws Exception { assertExec( "Five executions should generate 5Hello World!", - StringSample.class, "toStringTest__Ljava_lang_String_2I", + StringSample.class, "toStringTest__sI", "Hello World!5", 5 ); } @@ -89,7 +89,7 @@ @Test(timeOut=10000) public void stringStringConcat() throws Exception { assertExec( "Composes strings OK", - StringSample.class, "concatStrings__Ljava_lang_String_2", + StringSample.class, "concatStrings__s", "Hello World!1" + "\\\n\r\t" ); } @@ -104,14 +104,14 @@ @Test public void replaceChars() throws Exception { assertExec( "Can replace slashes by underscores", - StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC", + StringSample.class, "replace__ssCC", "x_y_z", "x/y/z", '/', '_' ); } @Test public void replaceIntChars() throws Exception { assertExec( "Can replace slashes by underscores", - StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC", + StringSample.class, "replace__ssCC", "x_y_z", "x/y/z", (int)'/', (int)'_' ); } @@ -119,7 +119,7 @@ @Test public void insertBuilder() throws Exception { assertExec( "Can insert something into a buffer?", - StringSample.class, "insertBuffer__Ljava_lang_String_2", + StringSample.class, "insertBuffer__s", "Ahojdo!" ); } @@ -129,7 +129,7 @@ int jh = StringSample.hashCode(j); assertExec( "Hashcode is the same " +jh, - StringSample.class, "hashCode__ILjava_lang_String_2", + StringSample.class, "hashCode__Is", Double.valueOf(jh), j ); } @@ -138,28 +138,28 @@ int jh = StringSample.hashCode(j); assertExec( "Hashcode is the same " + jh, - StringSample.class, "hashCode__ILjava_lang_String_2", + StringSample.class, "hashCode__Is", Double.valueOf(jh), j ); } @Test public void stringSwitch1() throws Exception { assertExec( "Get one", - StringSample.class, "stringSwitch__ILjava_lang_String_2", + StringSample.class, "stringSwitch__Is", Double.valueOf(1), "jedna" ); } @Test public void stringSwitch2() throws Exception { assertExec( "Get two", - StringSample.class, "stringSwitch__ILjava_lang_String_2", + StringSample.class, "stringSwitch__Is", Double.valueOf(2), "dve" ); } @Test public void stringSwitchDefault() throws Exception { assertExec( "Get -1", - StringSample.class, "stringSwitch__ILjava_lang_String_2", + StringSample.class, "stringSwitch__Is", Double.valueOf(-1), "none" ); } @@ -168,12 +168,22 @@ assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane"); assertExec( "One A and one B adds to 3", - StringSample.class, "countAB__ILjava_lang_String_2", + StringSample.class, "countAB__Is", Double.valueOf(3), "Ahoj Bedo!" ); } + @Test public void replaceInSB() throws Exception { + final String text = "Ljava_lang_String_2"; + String exp = StringSample.replaceWithS(text); + assertExec( + "Also replaces the text", + StringSample.class, "replaceWithS__ss", + exp, text + ); + } + private static CharSequence codeSeq; private static Invocable code; diff -r dd2f85a6bbba -r e41809be6106 vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Thu Jan 03 11:13:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Thu Jan 03 11:20:40 2013 +0100 @@ -59,7 +59,7 @@ try { ret = code.invokeFunction("bck2brwsr"); ret = code.invokeMethod(ret, "loadClass", VMinVM.class.getName()); - ret = code.invokeMethod(ret, "toJavaScript__Ljava_lang_String_2_3B", arr); + ret = code.invokeMethod(ret, "toJavaScript__s_3B", arr); } catch (Exception ex) { File f = File.createTempFile("execution", ".js"); FileWriter w = new FileWriter(f);