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
commit f61392caa723991c06c7bb35e036cda3ee299e7d Author: Jaroslav Tulach <jaroslav.tul...@apidesign.org> AuthorDate: Fri Dec 18 06:22:17 2020 +0100 Robustness when running on unsupported configurations --- .../java/html/boot/script/KnockoutEnvJSTest.java | 2 + .../org/netbeans/html/presenters/render/Show.java | 2 +- .../org/netbeans/html/presenters/webkit/Case.java | 10 +++- .../html/presenters/webkit/GtkJavaScriptTest.java | 37 ++++++++------ .../html/presenters/webkit/GtkKnockoutTest.java | 56 ++++++++++++---------- 5 files changed, 66 insertions(+), 41 deletions(-) diff --git a/boot-script/src/test/java/net/java/html/boot/script/KnockoutEnvJSTest.java b/boot-script/src/test/java/net/java/html/boot/script/KnockoutEnvJSTest.java index 6316f10..ee7ce76 100644 --- a/boot-script/src/test/java/net/java/html/boot/script/KnockoutEnvJSTest.java +++ b/boot-script/src/test/java/net/java/html/boot/script/KnockoutEnvJSTest.java @@ -166,6 +166,8 @@ public final class KnockoutEnvJSTest extends KnockoutTCK { return "Does not work on JDK8, due to JDK-8046013"; case "modifyRadioValueOnEnum": return "Does not work on JDK8"; + case "obtainAndComputeTest": + return "Browser doesn't support addEventListener or attachEvent"; } return null; } diff --git a/renderer/src/main/java/org/netbeans/html/presenters/render/Show.java b/renderer/src/main/java/org/netbeans/html/presenters/render/Show.java index 149aba1..1a77f9e 100644 --- a/renderer/src/main/java/org/netbeans/html/presenters/render/Show.java +++ b/renderer/src/main/java/org/netbeans/html/presenters/render/Show.java @@ -48,7 +48,7 @@ public abstract class Show { show.show(page); } catch (IOException ex) { throw ex; - } catch (Exception ex) { + } catch (LinkageError | Exception ex) { if (impl == null) { impl = "xdg-open"; } diff --git a/webkit/src/test/java/org/netbeans/html/presenters/webkit/Case.java b/webkit/src/test/java/org/netbeans/html/presenters/webkit/Case.java index 705e020..3861a3f 100644 --- a/webkit/src/test/java/org/netbeans/html/presenters/webkit/Case.java +++ b/webkit/src/test/java/org/netbeans/html/presenters/webkit/Case.java @@ -28,27 +28,33 @@ import org.testng.IHookCallBack; import org.testng.IHookable; import org.testng.ITest; import org.testng.ITestResult; +import org.testng.SkipException; import org.testng.annotations.Test; public final class Case implements ITest, IHookable, Runnable { private static final Timer T = new Timer("Interrupted Exception Handler"); private final Fn.Presenter p; private final Method m; + private final String skipMsg; private Object result; private Object inst; - Case(Fn.Presenter p, Method m) { + Case(Fn.Presenter p, Method m, String skipMsg) { this.p = p; this.m = m; + this.skipMsg = skipMsg; } @Override public String getTestName() { - return m.getName(); + return m != null ? m.getName() : skipMsg; } @Test public synchronized void executeTest() throws Exception { + if (skipMsg != null) { + throw new SkipException(skipMsg); + } if (result == null) { Executor exec = (Executor) p; exec.execute(this); diff --git a/webkit/src/test/java/org/netbeans/html/presenters/webkit/GtkJavaScriptTest.java b/webkit/src/test/java/org/netbeans/html/presenters/webkit/GtkJavaScriptTest.java index 0a294e8..9efd3b0 100644 --- a/webkit/src/test/java/org/netbeans/html/presenters/webkit/GtkJavaScriptTest.java +++ b/webkit/src/test/java/org/netbeans/html/presenters/webkit/GtkJavaScriptTest.java @@ -46,22 +46,31 @@ public class GtkJavaScriptTest extends JavaScriptTCK { } @Factory public static Object[] compatibilityTests() throws Exception { + String skipMsg = null; Runnable onPageLoaded = GtkJavaScriptTest::initialized; - // BEGIN: org.netbeans.html.presenters.webkit.GtkJavaScriptTest - final WebKitPresenter headlessPresenter = new WebKitPresenter(true); - final BrowserBuilder bb = BrowserBuilder.newBrowser(headlessPresenter). - loadFinished(onPageLoaded). - loadPage("empty.html"); - // END: org.netbeans.html.presenters.webkit.GtkJavaScriptTest + Future<Void> future; + try { + // BEGIN: org.netbeans.html.presenters.webkit.GtkJavaScriptTest + final WebKitPresenter headlessPresenter = new WebKitPresenter(true); + final BrowserBuilder bb = BrowserBuilder.newBrowser(headlessPresenter). + loadFinished(onPageLoaded). + loadPage("empty.html"); + // END: org.netbeans.html.presenters.webkit.GtkJavaScriptTest - Future<Void> future = Executors.newSingleThreadExecutor().submit(new Callable<Void>() { - @Override - public Void call() throws Exception { - bb.showAndWait(); - return null; - } - }); + future = Executors.newSingleThreadExecutor().submit(new Callable<Void>() { + @Override + public Void call() throws Exception { + bb.showAndWait(); + return null; + } + }); + } catch (LinkageError err) { + err.printStackTrace(); + return new Object[] { + new Case(null, null, err.getMessage()) + }; + } List<Object> res = new ArrayList<>(); try { @@ -78,7 +87,7 @@ public class GtkJavaScriptTest extends JavaScriptTCK { for (Class c : arr) { for (Method m : c.getMethods()) { if (m.getAnnotation(test) != null) { - res.add(new Case(browserPresenter, m)); + res.add(new Case(browserPresenter, m, null)); } } } diff --git a/webkit/src/test/java/org/netbeans/html/presenters/webkit/GtkKnockoutTest.java b/webkit/src/test/java/org/netbeans/html/presenters/webkit/GtkKnockoutTest.java index 8cb518f..0318685 100644 --- a/webkit/src/test/java/org/netbeans/html/presenters/webkit/GtkKnockoutTest.java +++ b/webkit/src/test/java/org/netbeans/html/presenters/webkit/GtkKnockoutTest.java @@ -58,10 +58,10 @@ public final class GtkKnockoutTest extends KnockoutTCK { private static Class<?> browserClass; private static Fn.Presenter browserContext; private static final Timeout WATCHER = new Timeout(60000); - + public GtkKnockoutTest() { } - + @Factory public static Object[] compatibilityTests() throws Exception { Class[] arr = testClasses(); for (int i = 0; i < arr.length; i++) { @@ -70,22 +70,30 @@ public final class GtkKnockoutTest extends KnockoutTCK { "All classes loaded by the same classloader" ); } - + URI uri = DynamicHTTP.initServer(); - - final BrowserBuilder bb = BrowserBuilder.newBrowser( - new WebKitPresenter(true) - ).loadClass(GtkKnockoutTest.class). - loadPage(uri.toString()). - invoke("initialized"); - - Future<Void> future = Executors.newSingleThreadExecutor().submit(new Callable<Void>() { - @Override - public Void call() { - bb.showAndWait(); - return null; - } - }); + + Future<Void> future; + try { + final BrowserBuilder bb = BrowserBuilder.newBrowser( + new WebKitPresenter(true) + ).loadClass(GtkKnockoutTest.class). + loadPage(uri.toString()). + invoke("initialized"); + + future = Executors.newSingleThreadExecutor().submit(new Callable<Void>() { + @Override + public Void call() { + bb.showAndWait(); + return null; + } + }); + } catch (LinkageError err) { + err.printStackTrace(); + return new Object[]{ + new Case(null, null, err.getMessage()) + }; + } List<Object> res = new ArrayList<>(); try { @@ -116,7 +124,7 @@ public final class GtkKnockoutTest extends KnockoutTCK { asSubclass(Annotation.class); for (Method m : c.getMethods()) { if (m.getAnnotation(koTest) != null) { - res.add(new Case(browserContext, m)); + res.add(new Case(browserContext, m, null)); } } } @@ -127,13 +135,13 @@ public final class GtkKnockoutTest extends KnockoutTCK { } return browserClass.getClassLoader(); } - + public static synchronized void initialized(Class<?> browserCls) throws Exception { browserClass = browserCls; browserContext = Fn.activePresenter(); GtkKnockoutTest.class.notifyAll(); } - + public static void initialized() throws Exception { Assert.assertSame(GtkKnockoutTest.class.getClassLoader(), ClassLoader.getSystemClassLoader(), @@ -142,7 +150,7 @@ public final class GtkKnockoutTest extends KnockoutTCK { GtkKnockoutTest.initialized(GtkKnockoutTest.class); browserContext = Fn.activePresenter(); } - + @Override public BrwsrCtx createContext() { KO4J ko4j = new KO4J(); @@ -166,7 +174,7 @@ public final class GtkKnockoutTest extends KnockoutTCK { } return json; } - + @JavaScriptBody(args = {}, body = "return new Object();") private static native Object createJSON(); @JavaScriptBody(args = { "json", "key", "value" }, body = "json[key] = value;") @@ -179,7 +187,7 @@ public final class GtkKnockoutTest extends KnockoutTCK { ) public native Object executeScript(String script, Object[] arguments); - @JavaScriptBody(args = { }, body = + @JavaScriptBody(args = { }, body = "var h;" + "if (!!window && !!window.location && !!window.location.href)\n" + " h = window.location.href;\n" @@ -188,7 +196,7 @@ public final class GtkKnockoutTest extends KnockoutTCK { + "return h;\n" ) private static native String findBaseURL(); - + @Override public URI prepareURL(String content, String mimeType, String[] parameters) { try { --------------------------------------------------------------------- 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