1.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Fri Dec 07 10:35:31 2012 +0100
1.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Mon Dec 10 11:26:32 2012 +0100
1.3 @@ -73,7 +73,7 @@
1.4 if (v1 instanceof Number) {
1.5 v1 = ((Number)v1).doubleValue();
1.6 }
1.7 - Assert.assertEquals(v1, v2, "Comparing results");
1.8 + Assert.assertEquals(v2, v1, "Comparing results");
1.9 }
1.10
1.11 @Override
1.12 @@ -130,7 +130,7 @@
1.13 try {
1.14 compileTheCode(m.getDeclaringClass());
1.15 Object inst = code.invokeFunction(m.getDeclaringClass().getName().replace('.', '_'), false);
1.16 - value = code.invokeMethod(inst, m.getName() + "__I");
1.17 + value = code.invokeMethod(inst, m.getName() + "__" + computeSignature(m));
1.18 } catch (Exception ex) {
1.19 throw new AssertionError(StaticMethodTest.dumpJS(codeSeq)).initCause(ex);
1.20 }
1.21 @@ -142,5 +142,56 @@
1.22 public String getTestName() {
1.23 return m.getName() + (js ? "[JavaScript]" : "[Java]");
1.24 }
1.25 +
1.26 + private static String computeSignature(Method m) {
1.27 + StringBuilder sb = new StringBuilder();
1.28 + appendType(sb, m.getReturnType());
1.29 + for (Class<?> c : m.getParameterTypes()) {
1.30 + appendType(sb, c);
1.31 + }
1.32 + return sb.toString();
1.33 + }
1.34 +
1.35 + private static void appendType(StringBuilder sb, Class<?> t) {
1.36 + if (t == null) {
1.37 + sb.append('V');
1.38 + return;
1.39 + }
1.40 + if (t.isPrimitive()) {
1.41 + int ch = -1;
1.42 + if (t == int.class) {
1.43 + ch = 'I';
1.44 + }
1.45 + if (t == short.class) {
1.46 + ch = 'S';
1.47 + }
1.48 + if (t == byte.class) {
1.49 + ch = 'B';
1.50 + }
1.51 + if (t == boolean.class) {
1.52 + ch = 'Z';
1.53 + }
1.54 + if (t == long.class) {
1.55 + ch = 'J';
1.56 + }
1.57 + if (t == float.class) {
1.58 + ch = 'F';
1.59 + }
1.60 + if (t == double.class) {
1.61 + ch = 'D';
1.62 + }
1.63 + assert ch != -1 : "Unknown primitive type " + t;
1.64 + sb.append((char)ch);
1.65 + return;
1.66 + }
1.67 + if (t.isArray()) {
1.68 + sb.append("_3");
1.69 + appendType(sb, t.getComponentType());
1.70 + return;
1.71 + }
1.72 + sb.append('L');
1.73 + sb.append(t.getName().replace('.', '_'));
1.74 + sb.append("_2");
1.75 + }
1.76 }
1.77 }