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 2020/12/18 05:22:34 UTC

[netbeans-html4j] 02/02: Robustness when running on unsupported configurations

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 <ja...@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-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