@Test(expected = IllegalStateException.class) public void testMemoryManagerReleased_CannotCallGetObjectReferenceCount() { MemoryManager memoryManager = new MemoryManager(v8); memoryManager.release(); memoryManager.getObjectReferenceCount(); }
@Test public void testIsReleasedTrue() { MemoryManager memoryManager = new MemoryManager(v8); memoryManager.release(); assertTrue(memoryManager.isReleased()); }
@Test(expected = IllegalStateException.class) public void testCannotCallPersistOnReleasedManager() { MemoryManager memoryManager = new MemoryManager(v8); V8Object object = new V8Object(v8); memoryManager.release(); memoryManager.persist(object); }
@SuppressWarnings("resource") @Test public void testNestedMemoryManagers() { MemoryManager memoryManager1 = new MemoryManager(v8); MemoryManager memoryManager2 = new MemoryManager(v8); new V8Object(v8); memoryManager2.release(); new V8Object(v8); assertEquals(1, v8.getObjectReferenceCount()); memoryManager1.release(); assertEquals(0, v8.getObjectReferenceCount()); }
@SuppressWarnings("resource") @Test public void testObjectIsReleased() { MemoryManager memoryManager = new MemoryManager(v8); V8Object object = new V8Object(v8); memoryManager.release(); assertTrue(object.isReleased()); }
@SuppressWarnings("resource") @Test public void testMemoryManagerReleasesObjects() { MemoryManager memoryManager = new MemoryManager(v8); new V8Object(v8); memoryManager.release(); assertEquals(0, v8.getObjectReferenceCount()); }
@Test public void testMemoryManagerReleasesFunctions() { MemoryManager memoryManager = new MemoryManager(v8); v8.executeScript("(function() {})"); memoryManager.release(); assertEquals(0, v8.getObjectReferenceCount()); }
@Test public void testCreateFunctionMapFromV8Object() { V8Object object = v8.executeObjectScript("x = {a:function() {return 'a'}, b:function(){return 'b'}}; x"); MemoryManager memoryManager = new MemoryManager(v8); Map<String, ? super Object> map = V8ObjectUtils.toMap(object, new SingleTypeAdapter(V8Value.V8_FUNCTION) { @Override public Object adapt(final Object value) { return ((V8Function) value).twin(); } }); assertEquals(2, map.size()); assertEquals("a", ((V8Function) map.get("a")).call(null, null)); assertEquals("b", ((V8Function) map.get("b")).call(null, null)); memoryManager.release(); object.close(); }
@SuppressWarnings("unchecked") @Test public void testCreateFunctionListFromV8Object_GetValue() { V8Array object = v8.executeArrayScript("x = [function() {return 'a'}, function(){return 'b'}]; x"); MemoryManager memoryManager = new MemoryManager(v8); List<? super Object> list = (List<? super Object>) V8ObjectUtils.getValue(object, new SingleTypeAdapter(V8Value.V8_FUNCTION) { @Override public Object adapt(final Object value) { return ((V8Function) value).twin(); } }); assertEquals(2, list.size()); assertEquals("a", ((V8Function) list.get(0)).call(null, null)); assertEquals("b", ((V8Function) list.get(1)).call(null, null)); memoryManager.release(); object.close(); }
@Test public void testReleasedMemoryManagerDoesTrackObjects() { MemoryManager memoryManager = new MemoryManager(v8); memoryManager.release(); V8Object object = new V8Object(v8); assertEquals(1, v8.getObjectReferenceCount()); object.close(); }
@SuppressWarnings("resource") @Test public void testNestedMemoryManager_ReverseReleaseOrder() { MemoryManager memoryManager1 = new MemoryManager(v8); new V8Object(v8); MemoryManager memoryManager2 = new MemoryManager(v8); new V8Object(v8); assertEquals(2, memoryManager1.getObjectReferenceCount()); assertEquals(1, memoryManager2.getObjectReferenceCount()); memoryManager1.release(); assertEquals(0, memoryManager2.getObjectReferenceCount()); memoryManager2.release(); }
@SuppressWarnings("resource") @Test public void testNestedMemoryManagerHasProperObjectCount() { MemoryManager memoryManager1 = new MemoryManager(v8); new V8Object(v8); MemoryManager memoryManager2 = new MemoryManager(v8); new V8Object(v8); assertEquals(2, memoryManager1.getObjectReferenceCount()); assertEquals(1, memoryManager2.getObjectReferenceCount()); memoryManager2.release(); assertEquals(1, memoryManager1.getObjectReferenceCount()); memoryManager1.release(); }
@SuppressWarnings("resource") @Test public void testTwins() { MemoryManager memoryManager = new MemoryManager(v8); V8Object object = new V8Object(v8); object.twin(); assertEquals(2, memoryManager.getObjectReferenceCount()); memoryManager.release(); }
@Test public void testMemoryReferenceCount() { MemoryManager memoryManager = new MemoryManager(v8); v8.executeScript("(function() {})"); assertEquals(1, memoryManager.getObjectReferenceCount()); memoryManager.release(); assertEquals(0, v8.getObjectReferenceCount()); }
@Test public void testMemoryManagerReleasesReturnedObjects() { MemoryManager memoryManager = new MemoryManager(v8); v8.executeScript("foo = {}; foo"); assertEquals(1, v8.getObjectReferenceCount()); memoryManager.release(); assertEquals(0, v8.getObjectReferenceCount()); }
@Test public void testPersistObject() { MemoryManager memoryManager = new MemoryManager(v8); V8Object object = new V8Object(v8); memoryManager.persist(object); memoryManager.release(); assertFalse(object.isReleased()); object.close(); }
@Test public void testPersistNonManagedObject() { V8Object object = new V8Object(v8); MemoryManager memoryManager = new MemoryManager(v8); memoryManager.persist(object); memoryManager.release(); assertFalse(object.isReleased()); object.close(); }
@Test public void testTwinsReleaseOne() { MemoryManager memoryManager = new MemoryManager(v8); V8Object object = new V8Object(v8); object.twin(); object.close(); assertEquals(1, memoryManager.getObjectReferenceCount()); memoryManager.release(); }
@Test public void testGetObjectTwice() { v8.executeVoidScript("foo = {}"); MemoryManager memoryManager = new MemoryManager(v8); V8Object foo1 = v8.getObject("foo"); v8.getObject("foo").close(); assertEquals(1, memoryManager.getObjectReferenceCount()); memoryManager.release(); assertTrue(foo1.isReleased()); }