Including failing arrayForEach test Libraries
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 10 Jun 2016 08:24:36 +0200
branchLibraries
changeset 1974a5fc49f9ef40
parent 1973 720f1f8bc9c8
child 1975 0e230308c26f
Including failing arrayForEach test
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jun 10 06:41:04 2016 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jun 10 08:24:36 2016 +0200
     1.3 @@ -1908,14 +1908,20 @@
     1.4  
     1.5          i += 2;
     1.6          if (DirectlLibraries.isScriptLibrary(mi[0])) {
     1.7 -            if ("$get__Ljava_lang_Object_2Ljava_lang_String_2".equals(mn)) {
     1.8 +            if (
     1.9 +                "$get__Ljava_lang_Object_2Ljava_lang_String_2".equals(mn) ||
    1.10 +                "$get__Ljava_lang_Object_2D".equals(mn)
    1.11 +            ) {
    1.12                  append(vars[0].toString())
    1.13                      .append('[')
    1.14                      .append(vars[1])
    1.15                      .append("];");
    1.16                  return i;
    1.17              }
    1.18 -            if ("$set__VLjava_lang_String_2Ljava_lang_Object_2".equals(mn)) {
    1.19 +            if (
    1.20 +                "$set__VLjava_lang_String_2Ljava_lang_Object_2".equals(mn) ||
    1.21 +                "$set__VDLjava_lang_Object_2".equals(mn)
    1.22 +            ) {
    1.23                  append(vars[0].toString())
    1.24                      .append('[')
    1.25                      .append(vars[1])
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java	Fri Jun 10 06:41:04 2016 +0200
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java	Fri Jun 10 08:24:36 2016 +0200
     2.3 @@ -17,6 +17,7 @@
     2.4   */
     2.5  package org.apidesign.vm4brwsr;
     2.6  
     2.7 +import net.java.html.js.JavaScriptBody;
     2.8  import net.java.html.lib.Date;
     2.9  import static net.java.html.lib.Exports.NaN;
    2.10  import static net.java.html.lib.Exports.eval;
    2.11 @@ -63,4 +64,75 @@
    2.12          return eleven.getFullYear() + eleven.getMonth();
    2.13      }
    2.14  
    2.15 +    public static double arrayForEach() throws Exception {
    2.16 +        net.java.html.lib.Array<java.lang.Number> arr = new net.java.html.lib.Array<>();
    2.17 +        assertNumber(arr.length.get(), 0.0, "Empty at first");
    2.18 +        arr.push(1.1, 2.2, 3);
    2.19 +        assertNumber(arr.$get(0), 1.1, "1.1 is on position 0");
    2.20 +        assertNumber(arr.$get(1), 2.2, "2.2 is on position 1");
    2.21 +        assertNumber(arr.$get(2), 3.0, "3 is on position 2");
    2.22 +        final boolean[] called = { false };
    2.23 +        final double[] sum = { 0.0 };
    2.24 +        arr.forEach(new net.java.html.lib.Function.A1<java.lang.Number,Void>() {
    2.25 +            @Override
    2.26 +            public Void call(java.lang.Number p1) {
    2.27 +                called[0] = true;
    2.28 +                sum[0] += p1.doubleValue();
    2.29 +                return null;
    2.30 +            }
    2.31 +
    2.32 +            @Override
    2.33 +            public Void call(Number p1, Object p2) {
    2.34 +                return call(p1);
    2.35 +            }
    2.36 +
    2.37 +            @Override
    2.38 +            public Void call(Number p1, Object p2, Object p3) {
    2.39 +                return call(p1);
    2.40 +            }
    2.41 +
    2.42 +            @Override
    2.43 +            public Void call(Number p1, Object p2, Object p3, Object p4) {
    2.44 +                return call(p1);
    2.45 +            }
    2.46 +
    2.47 +            @Override
    2.48 +            public Void call(Number p1, Object p2, Object p3, Object p4, Object p5) {
    2.49 +                return call(p1);
    2.50 +            }
    2.51 +        });
    2.52 +        assertTrue(called[0], "forEach invoked");
    2.53 +        assertEquals(sum[0], 6.3, 0.1, "Sum computed");
    2.54 +
    2.55 +        return sum[0];
    2.56 +    }
    2.57 +
    2.58 +    private static void assertEquals(double real, double expected, double delta, String msg) {
    2.59 +        if (expected - delta < real && real < expected + delta) {
    2.60 +            return;
    2.61 +        }
    2.62 +        raise(msg + " exp: " + expected + " but was: " + real);
    2.63 +    }
    2.64 +
    2.65 +    @JavaScriptBody(args = { "msg" }, body = "throw msg;")
    2.66 +    private static native void raise(String msg);
    2.67 +
    2.68 +    private static void assertNumber(Object value, double expected, String msg) {
    2.69 +        if (value instanceof Number) {
    2.70 +            assertEquals(((Number)value).doubleValue(), expected, 0.1, msg);
    2.71 +        } else {
    2.72 +            if (value == null) {
    2.73 +                raise("null is not a number");
    2.74 +                return;
    2.75 +            }
    2.76 +            raise("Not a number: " + value + " type: " + value.getClass());
    2.77 +        }
    2.78 +    }
    2.79 +
    2.80 +    private static void assertTrue(boolean b, String msg) {
    2.81 +        if (!b) {
    2.82 +            raise(msg);
    2.83 +        }
    2.84 +    }
    2.85 +
    2.86  }
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java	Fri Jun 10 06:41:04 2016 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java	Fri Jun 10 08:24:36 2016 +0200
     3.3 @@ -91,4 +91,13 @@
     3.4              2017.0
     3.5          );
     3.6      }
     3.7 +
     3.8 +    @Test
     3.9 +    public void directArray() throws Exception {
    3.10 +        code.assertExec(
    3.11 +            "Create and read date", LibUse.class,
    3.12 +            "arrayForEach__D",
    3.13 +            6.3
    3.14 +        );
    3.15 +    }
    3.16  }