rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java
branchLibraries
changeset 1974 a5fc49f9ef40
parent 1972 a83ae75ebf89
     1.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java	Fri Jun 10 06:27:01 2016 +0200
     1.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java	Fri Jun 10 08:24:36 2016 +0200
     1.3 @@ -17,6 +17,7 @@
     1.4   */
     1.5  package org.apidesign.vm4brwsr;
     1.6  
     1.7 +import net.java.html.js.JavaScriptBody;
     1.8  import net.java.html.lib.Date;
     1.9  import static net.java.html.lib.Exports.NaN;
    1.10  import static net.java.html.lib.Exports.eval;
    1.11 @@ -63,4 +64,75 @@
    1.12          return eleven.getFullYear() + eleven.getMonth();
    1.13      }
    1.14  
    1.15 +    public static double arrayForEach() throws Exception {
    1.16 +        net.java.html.lib.Array<java.lang.Number> arr = new net.java.html.lib.Array<>();
    1.17 +        assertNumber(arr.length.get(), 0.0, "Empty at first");
    1.18 +        arr.push(1.1, 2.2, 3);
    1.19 +        assertNumber(arr.$get(0), 1.1, "1.1 is on position 0");
    1.20 +        assertNumber(arr.$get(1), 2.2, "2.2 is on position 1");
    1.21 +        assertNumber(arr.$get(2), 3.0, "3 is on position 2");
    1.22 +        final boolean[] called = { false };
    1.23 +        final double[] sum = { 0.0 };
    1.24 +        arr.forEach(new net.java.html.lib.Function.A1<java.lang.Number,Void>() {
    1.25 +            @Override
    1.26 +            public Void call(java.lang.Number p1) {
    1.27 +                called[0] = true;
    1.28 +                sum[0] += p1.doubleValue();
    1.29 +                return null;
    1.30 +            }
    1.31 +
    1.32 +            @Override
    1.33 +            public Void call(Number p1, Object p2) {
    1.34 +                return call(p1);
    1.35 +            }
    1.36 +
    1.37 +            @Override
    1.38 +            public Void call(Number p1, Object p2, Object p3) {
    1.39 +                return call(p1);
    1.40 +            }
    1.41 +
    1.42 +            @Override
    1.43 +            public Void call(Number p1, Object p2, Object p3, Object p4) {
    1.44 +                return call(p1);
    1.45 +            }
    1.46 +
    1.47 +            @Override
    1.48 +            public Void call(Number p1, Object p2, Object p3, Object p4, Object p5) {
    1.49 +                return call(p1);
    1.50 +            }
    1.51 +        });
    1.52 +        assertTrue(called[0], "forEach invoked");
    1.53 +        assertEquals(sum[0], 6.3, 0.1, "Sum computed");
    1.54 +
    1.55 +        return sum[0];
    1.56 +    }
    1.57 +
    1.58 +    private static void assertEquals(double real, double expected, double delta, String msg) {
    1.59 +        if (expected - delta < real && real < expected + delta) {
    1.60 +            return;
    1.61 +        }
    1.62 +        raise(msg + " exp: " + expected + " but was: " + real);
    1.63 +    }
    1.64 +
    1.65 +    @JavaScriptBody(args = { "msg" }, body = "throw msg;")
    1.66 +    private static native void raise(String msg);
    1.67 +
    1.68 +    private static void assertNumber(Object value, double expected, String msg) {
    1.69 +        if (value instanceof Number) {
    1.70 +            assertEquals(((Number)value).doubleValue(), expected, 0.1, msg);
    1.71 +        } else {
    1.72 +            if (value == null) {
    1.73 +                raise("null is not a number");
    1.74 +                return;
    1.75 +            }
    1.76 +            raise("Not a number: " + value + " type: " + value.getClass());
    1.77 +        }
    1.78 +    }
    1.79 +
    1.80 +    private static void assertTrue(boolean b, String msg) {
    1.81 +        if (!b) {
    1.82 +            raise(msg);
    1.83 +        }
    1.84 +    }
    1.85 +
    1.86  }