vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java
changeset 296 fbf8eb98a8ef
parent 280 21c0cf272b05
child 297 a20721a10717
     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  }