You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by jt...@apache.org on 2022/06/11 05:41:26 UTC

[netbeans-html4j] branch master updated: Only expect promises and results when invoking AsyncJavaTest

This is an automated email from the ASF dual-hosted git repository.

jtulach pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-html4j.git


The following commit(s) were added to refs/heads/master by this push:
     new c8cf8085 Only expect promises and results when invoking AsyncJavaTest
     new 25ade6fd Merge pull request #47 from jtulach/jtulach/OnlyPromises
c8cf8085 is described below

commit c8cf80859afe0550e327fac6b7023d2ee7d3be89
Author: Jaroslav Tulach <ja...@apidesign.org>
AuthorDate: Sun May 22 14:17:18 2022 +0200

    Only expect promises and results when invoking AsyncJavaTest
---
 .../presenters/spi/test/AsyncJavaOnlyTest.java     | 53 ++++++++++++++++++++++
 .../html/presenters/spi/test/GenericTest.java      | 25 ++++++----
 .../netbeans/html/presenters/spi/test/Testing.java | 14 ++++--
 .../java/html/js/tests/AsyncJavaScriptAction.java  | 17 ++++++-
 .../java/net/java/html/js/tests/AsyncJavaTest.java | 17 ++++++-
 5 files changed, 109 insertions(+), 17 deletions(-)

diff --git a/generic/src/test/java/org/netbeans/html/presenters/spi/test/AsyncJavaOnlyTest.java b/generic/src/test/java/org/netbeans/html/presenters/spi/test/AsyncJavaOnlyTest.java
new file mode 100644
index 00000000..c9cd481e
--- /dev/null
+++ b/generic/src/test/java/org/netbeans/html/presenters/spi/test/AsyncJavaOnlyTest.java
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.html.presenters.spi.test;
+
+import net.java.html.js.tests.AsyncJavaTest;
+import org.netbeans.html.json.tck.KOTest;
+import static org.netbeans.html.presenters.spi.test.GenericTest.createTests;
+import org.testng.annotations.Factory;
+
+public class AsyncJavaOnlyTest {
+    @Factory
+    public static Object[] compatibilityTests() throws Exception {
+        return createTests(new PromisesOnly(), (m) -> {
+            if (m.getDeclaringClass() == AsyncJavaTest.class) {
+                return m.getAnnotation(KOTest.class) != null;
+            }
+            return false;
+        });
+    }
+
+    private static final class PromisesOnly extends Testing {
+        @Override
+        protected String js2java(String method, Object a1, Object a2, Object a3, Object a4) throws Exception {
+            switch (method) {
+                case "p":
+                    // promise is OK
+                    break;
+                case "r":
+                    // result of JavaScript evaluation
+                    break;
+                default:
+                    throw new IllegalStateException("Unexpected method " + method + "(" + a1 + ", " + a2 + ", " + a3 + ", " + a4 + "). Expecting only promises!");
+            }
+            return super.js2java(method, a1, a2, a3, a4);
+        }
+    }
+}
diff --git a/generic/src/test/java/org/netbeans/html/presenters/spi/test/GenericTest.java b/generic/src/test/java/org/netbeans/html/presenters/spi/test/GenericTest.java
index f9aae5b1..49145072 100644
--- a/generic/src/test/java/org/netbeans/html/presenters/spi/test/GenericTest.java
+++ b/generic/src/test/java/org/netbeans/html/presenters/spi/test/GenericTest.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Executors;
+import java.util.function.Predicate;
 import net.java.html.boot.BrowserBuilder;
 import org.netbeans.html.boot.spi.Fn;
 import org.netbeans.html.json.tck.KOTest;
@@ -30,7 +31,7 @@ import org.testng.annotations.Factory;
 
 public class GenericTest {
     private static Class<?> browserClass;
-    
+
     public GenericTest() {
     }
 
@@ -41,8 +42,12 @@ public class GenericTest {
     @Factory public static Object[] compatibilityTests() throws Exception {
         return createTests(new Testing());
     }
-    
+
     static Object[] createTests(Testing t) throws Exception {
+        return createTests(t, null);
+    }
+
+    static Object[] createTests(Testing t, Predicate<Method> accept) throws Exception {
         Fn.Presenter presenter = t.presenter;
 
         final BrowserBuilder bb = BrowserBuilder.newBrowser(presenter).loadClass(GenericTest.class).
@@ -57,20 +62,24 @@ public class GenericTest {
         });
 
         List<Object> res = new ArrayList<>();
-        Class<? extends Annotation> test = 
+        Class<? extends Annotation> test =
             loadClass().getClassLoader().loadClass(KOTest.class.getName()).
             asSubclass(Annotation.class);
 
+        if (accept == null) {
+            accept = (m) -> m.getAnnotation(test) != null;
+        }
+
         Class[] arr = (Class[]) loadClass().getDeclaredMethod("tests").invoke(null);
         for (Class c : arr) {
-            addTestMethods(c, test, res, t);
+            addTestMethods(c, accept, res, t);
         }
         return res.toArray();
     }
 
-    private static void addTestMethods(Class c, Class<? extends Annotation> test, List<Object> res, Testing t) throws SecurityException {
+    private static void addTestMethods(Class c, Predicate<Method> accept, List<Object> res, Testing t) throws SecurityException {
         for (Method m : c.getMethods()) {
-            if (m.getAnnotation(test) != null) {
+            if (accept.test(m)) {
                 res.add(new Case(t, m));
             }
         }
@@ -82,12 +91,12 @@ public class GenericTest {
         }
         return browserClass;
     }
-    
+
     public static synchronized void ready(Class<?> browserCls) throws Exception {
         browserClass = browserCls;
         GenericTest.class.notifyAll();
     }
-    
+
     public static void initialized() throws Exception {
         Class<?> classpathClass = ClassLoader.getSystemClassLoader().loadClass(GenericTest.class.getName());
         Method m = classpathClass.getMethod("ready", Class.class);
diff --git a/generic/src/test/java/org/netbeans/html/presenters/spi/test/Testing.java b/generic/src/test/java/org/netbeans/html/presenters/spi/test/Testing.java
index da3bb7ba..30fa7892 100644
--- a/generic/src/test/java/org/netbeans/html/presenters/spi/test/Testing.java
+++ b/generic/src/test/java/org/netbeans/html/presenters/spi/test/Testing.java
@@ -91,16 +91,20 @@ class Testing {
         return Level.FINE;
     }
 
+    private String ts(Object o) {
+        return o == null ? null : o.toString();
+    }
+
+    protected String js2java(String method, Object a1, Object a2, Object a3, Object a4) throws Exception {
+        return presenter.js2java(method, ts(a1), ts(a2), ts(a3), ts(a4));
+    }
+
     public final class Clbk {
         private Clbk() {
         }
 
-        private String ts(Object o) {
-            return o == null ? null : o.toString();
-        }
-
         public String pass(String method, Object a1, Object a2, Object a3, Object a4) throws Exception {
-            return presenter.js2java(method, ts(a1), ts(a2), ts(a3), ts(a4));
+            return js2java(method, ts(a1), ts(a2), ts(a3), ts(a4));
         }
     }
     private final Clbk clbk = new Clbk();
diff --git a/json-tck/src/main/java/net/java/html/js/tests/AsyncJavaScriptAction.java b/json-tck/src/main/java/net/java/html/js/tests/AsyncJavaScriptAction.java
index c7d867ad..7cf1d667 100644
--- a/json-tck/src/main/java/net/java/html/js/tests/AsyncJavaScriptAction.java
+++ b/json-tck/src/main/java/net/java/html/js/tests/AsyncJavaScriptAction.java
@@ -26,9 +26,13 @@ final class AsyncJavaScriptAction {
     private AsyncJavaScriptAction() {
     }
 
-    static AsyncJavaScriptAction defineCallback() {
+    static AsyncJavaScriptAction defineCallback(boolean wait4js) {
         AsyncJavaScriptAction action = new AsyncJavaScriptAction();
-        action.defineCallbackImpl();
+        if (wait4js) {
+            action.defineCallbackImpl();
+        } else {
+            action.defineCallbackImplNoWait4js();
+        }
         return action;
     }
 
@@ -41,6 +45,15 @@ final class AsyncJavaScriptAction {
     """)
     private native void defineCallbackImpl();
 
+    @JavaScriptBody(args = {}, javacall = true, wait4js = false, wait4java = false, body = """
+        var self = this;
+        var global = (0 || eval)("this");
+        global.callJava = function(s) {
+            self.@net.java.html.js.tests.AsyncJavaScriptAction::callJava(I)(s);
+        };
+    """)
+    private native void defineCallbackImplNoWait4js();
+
     void callJava(int i) {
         this.result = i;
     }
diff --git a/json-tck/src/main/java/net/java/html/js/tests/AsyncJavaTest.java b/json-tck/src/main/java/net/java/html/js/tests/AsyncJavaTest.java
index 3abe6797..258bd5e0 100644
--- a/json-tck/src/main/java/net/java/html/js/tests/AsyncJavaTest.java
+++ b/json-tck/src/main/java/net/java/html/js/tests/AsyncJavaTest.java
@@ -30,7 +30,11 @@ public class AsyncJavaTest {
         PhaseExecutor.schedule(phases, () -> {
             boolean[] javaExecuted = { false };
             Object objWithX = AsyncJava.computeInAsyncJava(5, (n) -> {
-                return new Factorial().factorial(n);
+                int acc = 1;
+                for (int i = 1; i <= n; i++) {
+                    acc *= i;
+                }
+                return acc;
             }, () -> {});
             int initialValue = Bodies.readIntX(objWithX);
             assertEquals(-1, initialValue, "Promise.then shall only be called when the code ends");
@@ -43,8 +47,17 @@ public class AsyncJavaTest {
 
     @KOTest
     public void initializedFromJavaScript() throws Exception {
+        initializedFromJavaScript(true);
+    }
+
+    @KOTest
+    public void initializedFromJavaScriptNoWait4js() throws Exception {
+        initializedFromJavaScript(false);
+    }
+
+    private void initializedFromJavaScript(boolean wait4js) throws Exception {
         PhaseExecutor.schedule(phases, () -> {
-            return AsyncJavaScriptAction.defineCallback();
+            return AsyncJavaScriptAction.defineCallback(wait4js);
         }).then((action) -> {
             AsyncJavaScriptAction.invokeCallbackLater(33);
         }).then((action) -> {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists