@Test public void testThenRun() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); AtomicInteger invocations = new AtomicInteger(); DeferredResult<Integer> original = new DeferredResult<>(); original .thenRun(() -> { invocations.incrementAndGet(); }) .whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); ctx.await(); Assert.assertEquals(1, invocations.get()); }
@Test public void testThenRun() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); AtomicInteger invocations = new AtomicInteger(); DeferredResult<Integer> original = new DeferredResult<>(); original .thenRun(() -> { invocations.incrementAndGet(); }) .whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); ctx.await(); Assert.assertEquals(1, invocations.get()); }
@Test public void testThenAccept() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); AtomicInteger invocations = new AtomicInteger(); DeferredResult<Integer> original = new DeferredResult<>(); original .thenAccept(i -> { invocations.incrementAndGet(); Assert.assertEquals(1, i.intValue()); }) .whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); ctx.await(); Assert.assertEquals(1, invocations.get()); }
@Test public void testThenAccept() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); AtomicInteger invocations = new AtomicInteger(); DeferredResult<Integer> original = new DeferredResult<>(); original .thenAccept(i -> { invocations.incrementAndGet(); Assert.assertEquals(1, i.intValue()); }) .whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); ctx.await(); Assert.assertEquals(1, invocations.get()); }
private void verifyThenAcceptBoth(long waitOriginal, long waitOther) throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> other = new DeferredResult<>(); AtomicInteger invocations = new AtomicInteger(); original .thenAcceptBoth(other, (x, y) -> { Assert.assertEquals(1, x.intValue()); Assert.assertEquals(2, y.intValue()); invocations.incrementAndGet(); }) .whenComplete(ctx.getCompletionDeferred()); runAfter(waitOriginal, () -> original.complete(1)); runAfter(waitOther, () -> other.complete(2)); ctx.await(); Assert.assertEquals(1, invocations.get()); }
private void verifyThenAcceptBoth(long waitOriginal, long waitOther) throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> other = new DeferredResult<>(); AtomicInteger invocations = new AtomicInteger(); original .thenAcceptBoth(other, (x, y) -> { Assert.assertEquals(1, x.intValue()); Assert.assertEquals(2, y.intValue()); invocations.incrementAndGet(); }) .whenComplete(ctx.getCompletionDeferred()); runAfter(waitOriginal, () -> original.complete(1)); runAfter(waitOther, () -> other.complete(2)); ctx.await(); Assert.assertEquals(1, invocations.get()); }
@Test public void testHandle() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); AtomicInteger invocations = new AtomicInteger(); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> result = original .handle((x, ex) -> { Assert.assertNull(ex); invocations.incrementAndGet(); return x + 1; }); result.whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); ctx.await(); Assert.assertEquals(1, invocations.get()); Assert.assertEquals(2, result.getNow(exceptionSupplier()).intValue()); }
@Test public void testHandle() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); AtomicInteger invocations = new AtomicInteger(); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> result = original .handle((x, ex) -> { Assert.assertNull(ex); invocations.incrementAndGet(); return x + 1; }); result.whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); ctx.await(); Assert.assertEquals(1, invocations.get()); Assert.assertEquals(2, result.getNow(exceptionSupplier()).intValue()); }
private void verifyRunAfterBoth(long waitOriginal, long waitOther) throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> other = new DeferredResult<>(); AtomicInteger invocations = new AtomicInteger(); original .runAfterBoth(other, () -> { Assert.assertEquals(1, original.getNow(0).intValue()); Assert.assertEquals(2, other.getNow(0).intValue()); invocations.incrementAndGet(); }) .whenComplete(ctx.getCompletionDeferred()); runAfter(waitOriginal, () -> original.complete(1)); runAfter(waitOther, () -> other.complete(2)); ctx.await(); Assert.assertEquals(1, invocations.get()); }
private void verifyRunAfterBoth(long waitOriginal, long waitOther) throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> other = new DeferredResult<>(); AtomicInteger invocations = new AtomicInteger(); original .runAfterBoth(other, () -> { Assert.assertEquals(1, original.getNow(0).intValue()); Assert.assertEquals(2, other.getNow(0).intValue()); invocations.incrementAndGet(); }) .whenComplete(ctx.getCompletionDeferred()); runAfter(waitOriginal, () -> original.complete(1)); runAfter(waitOther, () -> other.complete(2)); ctx.await(); Assert.assertEquals(1, invocations.get()); }
@Test public void testThenApply() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> result = original .thenApply(i -> i + 1); result.whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); ctx.await(); Assert.assertEquals(2, result.getNow(0).intValue()); }
@Test public void testThenApply() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> result = original .thenApply(i -> i + 1); result.whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); ctx.await(); Assert.assertEquals(2, result.getNow(0).intValue()); }
@Test public void testGetNowWithValue() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); TestContext synchCtx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); int defaultValue = 0; int value = 10; DeferredResult<Integer> deferredResult = new DeferredResult<>(); deferredResult.whenComplete(ctx.getCompletionDeferred()); runAfter(synchCtx, () -> deferredResult.complete(value)); Assert.assertEquals(defaultValue, deferredResult.getNow(defaultValue).intValue()); synchCtx.complete(); ctx.await(); Assert.assertEquals(value, deferredResult.getNow(defaultValue).intValue()); }
@Test public void testGetNowWithValue() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); TestContext synchCtx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); int defaultValue = 0; int value = 10; DeferredResult<Integer> deferredResult = new DeferredResult<>(); deferredResult.whenComplete(ctx.getCompletionDeferred()); runAfter(synchCtx, () -> deferredResult.complete(value)); Assert.assertEquals(defaultValue, deferredResult.getNow(defaultValue).intValue()); synchCtx.complete(); ctx.await(); Assert.assertEquals(value, deferredResult.getNow(defaultValue).intValue()); }
@Test public void testThenCombine() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> other = new DeferredResult<>(); DeferredResult<Integer> result = original .thenCombine(other, (x, y) -> x + y); result.whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); runAfter(20, () -> other.complete(2)); ctx.await(); Assert.assertEquals(3, result.getNow(0).intValue()); }
@Test public void testThenCombine() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<Integer> original = new DeferredResult<>(); DeferredResult<Integer> other = new DeferredResult<>(); DeferredResult<Integer> result = original .thenCombine(other, (x, y) -> x + y); result.whenComplete(ctx.getCompletionDeferred()); runAfter(10, () -> original.complete(1)); runAfter(20, () -> other.complete(2)); ctx.await(); Assert.assertEquals(3, result.getNow(0).intValue()); }
@Test public void testGetNow() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); TestContext synchCtx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); int value = 10; DeferredResult<Integer> deferredResult = new DeferredResult<>(); deferredResult.whenComplete(ctx.getCompletionDeferred()); runAfter(synchCtx, () -> deferredResult.complete(value)); try { deferredResult.getNow(exceptionSupplier("expected")); Assert.fail(); } catch (RuntimeException e) { Assert.assertEquals("expected", e.getMessage()); } synchCtx.complete(); ctx.await(); Assert.assertEquals(value, deferredResult.getNow(exceptionSupplier()).intValue()); }
@Test public void testGetNow() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); TestContext synchCtx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); int value = 10; DeferredResult<Integer> deferredResult = new DeferredResult<>(); deferredResult.whenComplete(ctx.getCompletionDeferred()); runAfter(synchCtx, () -> deferredResult.complete(value)); try { deferredResult.getNow(exceptionSupplier("expected")); Assert.fail(); } catch (RuntimeException e) { Assert.assertEquals("expected", e.getMessage()); } synchCtx.complete(); ctx.await(); Assert.assertEquals(value, deferredResult.getNow(exceptionSupplier()).intValue()); }
@Test public void testThenCompose() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<String> result = DeferredResult.completed(12345) .thenCompose(ignore -> { DeferredResult<String> nested = new DeferredResult<>(); runAfter(10, () -> nested.complete("foo")); return nested; }); result.whenComplete(ctx.getCompletionDeferred()); ctx.await(); Assert.assertEquals("foo", result.getNow("bar")); }
@Test public void testThenCompose() throws Throwable { TestContext ctx = new TestContext(1, TestContext.DEFAULT_WAIT_DURATION); DeferredResult<String> result = DeferredResult.completed(12345) .thenCompose(ignore -> { DeferredResult<String> nested = new DeferredResult<>(); runAfter(10, () -> nested.complete("foo")); return nested; }); result.whenComplete(ctx.getCompletionDeferred()); ctx.await(); Assert.assertEquals("foo", result.getNow("bar")); }