package org.jooby; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.util.concurrent.CountDownLatch; import org.jooby.test.MockUnit; import org.junit.Test; public class DeferredTest { @Test public void newWithNoInit() throws Exception { new Deferred().handler(null, (r, ex) -> { }); } @Test public void newWithInit0() throws Exception { CountDownLatch latch = new CountDownLatch(1); new Deferred(deferred -> { assertNotNull(deferred); latch.countDown(); }).handler(null, (r, ex) -> { }); latch.await(); } @Test public void newWithInit() throws Exception { new MockUnit(Request.class) .run(unit -> { CountDownLatch latch = new CountDownLatch(1); new Deferred((req, deferred) -> { assertNotNull(deferred); assertEquals(unit.get(Request.class), req); latch.countDown(); }).handler(unit.get(Request.class), (r, ex) -> { }); latch.await(); }); } @Test public void resolve() throws Exception { Object value = new Object(); CountDownLatch latch = new CountDownLatch(1); Deferred deferred = new Deferred(); deferred.handler(null, (result, ex) -> { assertFalse(result instanceof Deferred); assertEquals(value, result.ifGet().get()); assertNull(ex); latch.countDown(); }); deferred.resolve(value); latch.await(); } @Test public void setResolve() throws Exception { Object value = new Object(); CountDownLatch latch = new CountDownLatch(1); Deferred deferred = new Deferred(); deferred.handler(null, (result, ex) -> { assertFalse(result instanceof Deferred); assertEquals(value, result.ifGet().get()); latch.countDown(); }); deferred.set(value); latch.await(); } @Test public void reject() throws Exception { Exception cause = new Exception(); CountDownLatch latch = new CountDownLatch(1); Deferred deferred = new Deferred(); deferred.handler(null, (result, ex) -> { assertEquals(cause, ex); assertNull(result); latch.countDown(); }); deferred.reject(cause); latch.await(); } @Test public void setReject() throws Exception { Exception cause = new Exception(); CountDownLatch latch = new CountDownLatch(1); Deferred deferred = new Deferred(); deferred.handler(null, (result, ex) -> { assertEquals(cause, ex); assertNull(result); latch.countDown(); }); deferred.set(cause); latch.await(); } }