/** * Creates a new {@link Nodejs}. * * @param basedir Base dir where to deploy a library. * @param loader Class loader to use. */ public Nodejs(final File basedir, final ClassLoader loader) { this.basedir = requireNonNull(basedir, "Basedir required."); this.loader = requireNonNull(loader, "ClassLoader required."); this.node = NodeJS.createNodeJS(); V8 v8 = node.getRuntime(); this.scope = new MemoryManager(v8); }
private V8Engine v8(String id, String scope) { return cache.computeIfAbsent(Thread.currentThread().getName() + ":" + id, name -> { V8 v8 = V8.createV8Runtime(scope); MemoryManager mem = new MemoryManager(v8); console(v8, id); assets(getClass(), v8); b64(v8); return new V8Engine(v8, mem, id); }); }
@Test public void testIsReleasedFalse() { MemoryManager memoryManager = new MemoryManager(v8); assertFalse(memoryManager.isReleased()); }
@Test public void testMemoryReferenceCount0() { MemoryManager memoryManager = new MemoryManager(v8); assertEquals(0, memoryManager.getObjectReferenceCount()); }
@Test(expected = IllegalStateException.class) public void testMemoryManagerReleased_CannotCallGetObjectReferenceCount() { MemoryManager memoryManager = new MemoryManager(v8); memoryManager.release(); memoryManager.getObjectReferenceCount(); }
@Test public void testCanReleaseTwice() { MemoryManager memoryManager = new MemoryManager(v8); memoryManager.release(); memoryManager.release(); }
@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()); }
@Test public void testMemoryReferenceCount0_AfterRemove() { MemoryManager memoryManager = new MemoryManager(v8); new V8Object(v8).close(); assertEquals(0, memoryManager.getObjectReferenceCount()); }
@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 testReleasedMemoryManagerDoesTrackObjects() { MemoryManager memoryManager = new MemoryManager(v8); memoryManager.release(); V8Object object = new V8Object(v8); assertEquals(1, v8.getObjectReferenceCount()); object.close(); }
@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(); }