Test to verify that keepAlive=true objects are really kept in memory
Project: http://git-wip-us.apache.org/repos/asf/incubator-netbeans-html4j/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-netbeans-html4j/commit/323e9ba0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-netbeans-html4j/tree/323e9ba0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-netbeans-html4j/diff/323e9ba0 Branch: refs/heads/master Commit: 323e9ba0782e85637a7e962531d7d49ca4010803 Parents: c3034c1 Author: Jaroslav Tulach <[email protected]> Authored: Fri Jan 13 19:38:45 2017 +0100 Committer: Jaroslav Tulach <[email protected]> Committed: Fri Sep 8 17:13:55 2017 +0200 ---------------------------------------------------------------------- .../java/net/java/html/js/tests/Bodies.java | 12 ++++++++++++ .../java/net/java/html/js/tests/GCBodyTest.java | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-netbeans-html4j/blob/323e9ba0/json-tck/src/main/java/net/java/html/js/tests/Bodies.java ---------------------------------------------------------------------- diff --git a/json-tck/src/main/java/net/java/html/js/tests/Bodies.java b/json-tck/src/main/java/net/java/html/js/tests/Bodies.java index 029a3a2..122f9f7 100644 --- a/json-tck/src/main/java/net/java/html/js/tests/Bodies.java +++ b/json-tck/src/main/java/net/java/html/js/tests/Bodies.java @@ -92,6 +92,18 @@ final class Bodies { "return [email protected]::sum(II)(a, b);" ) public static native int sumIndirect(Sum c, int a, int b); + + @JavaScriptBody(args = { "c" }, javacall = true, body = + "return {\n" + + " 'sum' : function(a,b) {\n" + + " return [email protected]::sum(II)(a, b);\n" + + " }\n" + + "};\n" + ) + public static native Object sumDelayed(Sum c); + + @JavaScriptBody(args = { "sum", "a", "b" }, body = "return sum.sum(a, b);") + public static native int sumNow(Object sum, int a, int b); @JavaScriptBody(args = { "arr", "index" }, body = "return arr[index];") public static native Object select(Object[] arr, int index); http://git-wip-us.apache.org/repos/asf/incubator-netbeans-html4j/blob/323e9ba0/json-tck/src/main/java/net/java/html/js/tests/GCBodyTest.java ---------------------------------------------------------------------- diff --git a/json-tck/src/main/java/net/java/html/js/tests/GCBodyTest.java b/json-tck/src/main/java/net/java/html/js/tests/GCBodyTest.java index 46d0775..5baa865 100644 --- a/json-tck/src/main/java/net/java/html/js/tests/GCBodyTest.java +++ b/json-tck/src/main/java/net/java/html/js/tests/GCBodyTest.java @@ -67,6 +67,26 @@ public class GCBodyTest { s = null; assertGC(ref, "Can disappear!"); } + + @KOTest public void callbackInterfaceShallNotDisappear() throws InterruptedException { + Sum sum = new Sum(); + Object jsSum = Bodies.sumDelayed(sum); + Reference<?> ref = new WeakReference<Object>(sum); + sum = null; + IllegalStateException gcError = null; + try { + assertNotGC(ref, false, "object s should still stay"); + } catch (IllegalStateException ex) { + gcError = ex; + } + + int res = Bodies.sumNow(jsSum, 22, 20); + assertEquals(res, 42, "Expecting 42"); + assertGC(ref, "Can disappear!"); + if (gcError != null) { + throw gcError; + } + } private Object assignInst() { Object obj = Bodies.instance(0);
