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