@Override public void close() { release(true); }
@Override public void close() { v8.checkThread(); if (!released) { try { v8.releaseObjRef(this); } finally { released = true; v8.release(v8.getV8RuntimePtr(), objectHandle); } } }
@Override @Deprecated public void release() { release(true); }
@Override public void close() { v8.checkThread(); if (!released) { try { v8.releaseObjRef(this); } finally { released = true; v8.release(v8.getV8RuntimePtr(), objectHandle); } } }
@Override public void close() { release(true); }
@Override @Deprecated public void release() { release(true); }
@SuppressWarnings("resource") @Test(expected = IllegalStateException.class) public void testISEThrownOnShutdown() { V8 v8_ = V8.createV8Runtime(); new V8Object(v8_); v8_.release(true); }
@SuppressWarnings("resource") @Test public void testISENotThrownOnShutdown() { V8 v8_ = V8.createV8Runtime(); new V8Object(v8_); v8_.release(false); }
@Test public void testReleaseAttachedObjects() { V8 runtime = V8.createV8Runtime(); V8Object v8Object = new V8Object(v8); runtime.registerResource(v8Object); runtime.release(true); }
@Test(expected = Error.class) public void testSharingObjectsAsFunctionCallParameters_IntegerFunction() { V8 engine = null; V8 engine2 = null; try { engine = V8.createV8Runtime(); engine2 = V8.createV8Runtime(); engine.executeScript("b = function(param){return param;}"); engine2.executeScript("a = [7];"); V8Array a = (V8Array) engine2.get("a"); engine.executeIntegerFunction("b", a); } finally { engine.release(false); engine2.release(false); } }
@Test(expected = Error.class) public void testSharingObjectsAsFunctionCallParameters_DoubleFunction() { V8 engine = null; V8 engine2 = null; try { engine = V8.createV8Runtime(); engine2 = V8.createV8Runtime(); engine.executeScript("b = function(param){return param;}"); engine2.executeScript("a = [3.14];"); V8Array a = (V8Array) engine2.get("a"); engine.executeDoubleFunction("b", a); } finally { engine.release(false); engine2.release(false); } }
@SuppressWarnings("resource") @Test public void testReleaseRuntimeReportsMemoryLeaks() { V8 localV8 = V8.createV8Runtime(); new V8Object(localV8); try { localV8.release(true); } catch (IllegalStateException ise) { String message = ise.getMessage(); assertEquals("1 Object(s) still exist in runtime", message); return; } fail("Exception should have been thrown"); }
@Test(expected = Error.class) public void testSharingObjectsAsFunctionCallParameters_ExecuteFunction() { V8 engine = null; V8 engine2 = null; try { engine = V8.createV8Runtime(); engine2 = V8.createV8Runtime(); engine.executeScript("b = function(param){return param;}"); engine2.executeScript("a = [{name: 'joe'}];"); V8Array a = (V8Array) engine2.get("a"); engine.executeFunction("b", a); } finally { engine.release(false); engine2.release(false); } }
@Test public void testToStringWorksOnReleasedV8Runtime_V8Object() { @SuppressWarnings("resource") V8Object v8Object = new V8Object(v8); v8.release(false); assertEquals("[Object released]", v8Object.toString()); v8 = V8.createV8Runtime(); }
@Test public void testToStringWorksOnReleasedV8Runtime_V8Array() { @SuppressWarnings("resource") V8Object v8Object = new V8Array(v8); v8.release(false); assertEquals("[Array released]", v8Object.toString()); v8 = V8.createV8Runtime(); }
@Test public void testToStringWorksOnReleasedV8Runtime_V8Function() { @SuppressWarnings("resource") V8Object v8Object = new V8Function(v8); v8.release(false); assertEquals("[Function released]", v8Object.toString()); v8 = V8.createV8Runtime(); }
@SuppressWarnings("resource") @Test public void testReleaseRuntimeWithWeakReferencesReportsCorrectMemoryLeaks() { V8 localV8 = V8.createV8Runtime(); new V8Object(localV8); new V8Object(localV8).setWeak(); try { localV8.release(true); } catch (IllegalStateException ise) { String message = ise.getMessage(); assertEquals("1 Object(s) still exist in runtime", message); return; } fail("Exception should have been thrown"); }
@Test public void testReleaseAttachedMap() { V8 runtime = V8.createV8Runtime(); V8Map<String> v8Map = new V8Map<String>(); V8Object v8Object = new V8Object(runtime); v8Map.put(v8Object, "foo"); v8Object.close(); runtime.registerResource(v8Map); runtime.release(true); }
@Test public void testReleaseSeveralAttachedObjects() { V8 runtime = V8.createV8Runtime(); runtime.registerResource(new V8Object(runtime)); runtime.registerResource(new V8Object(runtime)); runtime.registerResource(new V8Object(runtime)); runtime.release(true); }
@Test public void testAddItemStoresACopy() { V8 v8 = V8.createV8Runtime(); V8Object v8Object = new V8Object(v8); V8Map<String> map = new V8Map<String>(); map.put(v8Object, "foo"); v8Object.close(); try { v8.release(true); map.close(); } catch (IllegalStateException e) { return; } fail("Exception expected due to handle leak."); }