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