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 }