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 <jaroslav.tul...@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) { + se...@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-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists