--- jsr166/src/test/tck/CompletableFutureTest.java 2014/06/02 17:41:22 1.46 +++ jsr166/src/test/tck/CompletableFutureTest.java 2014/06/02 20:10:04 1.52 @@ -17,6 +17,8 @@ import java.util.concurrent.Future; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.concurrent.CompletionStage; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinTask; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -414,7 +416,7 @@ public class CompletableFutureTest exten throw new CFException(); } } - static final class FailingNoop implements Runnable { + static final class FailingRunnable implements Runnable { int invocationCount = 0; public void run() { invocationCount++; @@ -458,6 +460,9 @@ public class CompletableFutureTest exten */ enum ExecutionMode { DEFAULT { + public void checkExecutionMode() { + assertNull(ForkJoinTask.getPool()); + } public CompletableFuture thenRun (CompletableFuture f, Runnable a) { return f.thenRun(a); @@ -521,7 +526,11 @@ public class CompletableFutureTest exten } }, - DEFAULT_ASYNC { + ASYNC { + public void checkExecutionMode() { + assertSame(ForkJoinPool.commonPool(), + ForkJoinTask.getPool()); + } public CompletableFuture thenRun (CompletableFuture f, Runnable a) { return f.thenRunAsync(a); @@ -586,6 +595,9 @@ public class CompletableFutureTest exten }, EXECUTOR { + public void checkExecutionMode() { + //TODO + } public CompletableFuture thenRun (CompletableFuture f, Runnable a) { return f.thenRunAsync(a, new ThreadExecutor()); @@ -649,6 +661,7 @@ public class CompletableFutureTest exten } }; + public abstract void checkExecutionMode(); public abstract CompletableFuture thenRun (CompletableFuture f, Runnable a); public abstract CompletableFuture thenAccept @@ -920,7 +933,7 @@ public class CompletableFutureTest exten * failing runAsync completes exceptionally after running Runnable */ public void testRunAsync3() { - FailingNoop r = new FailingNoop(); + FailingRunnable r = new FailingRunnable(); CompletableFuture f = CompletableFuture.runAsync(r); checkCompletedWithWrappedCFException(f); assertEquals(1, r.invocationCount); @@ -961,421 +974,384 @@ public class CompletableFutureTest exten /** * thenRun result completes normally after normal completion of source */ - public void testThenRun() { - CompletableFuture f; - CompletableFuture g; - Noop r; + public void testThenRun_normalCompletion() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { + final CompletableFuture f = new CompletableFuture<>(); + final Noop r = new Noop(); + if (!createIncomplete) f.complete(v1); + final CompletableFuture g = m.thenRun(f, r); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } - f = new CompletableFuture<>(); - g = f.thenRun(r = new Noop()); - f.complete(null); - checkCompletedNormally(g, null); - assertEquals(1, r.invocationCount); - - f = new CompletableFuture<>(); - f.complete(null); - g = f.thenRun(r = new Noop()); checkCompletedNormally(g, null); + checkCompletedNormally(f, v1); assertEquals(1, r.invocationCount); - } + }} /** * thenRun result completes exceptionally after exceptional * completion of source */ - public void testThenRun2() { - CompletableFuture f; - CompletableFuture g; - Noop r; - - f = new CompletableFuture<>(); - g = f.thenRun(r = new Noop()); - f.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); - assertEquals(0, r.invocationCount); + public void testThenRun_exceptionalCompletion() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + { + final CFException ex = new CFException(); + final CompletableFuture f = new CompletableFuture<>(); + final Noop r = new Noop(); + if (!createIncomplete) f.completeExceptionally(ex); + final CompletableFuture g = m.thenRun(f, r); + if (createIncomplete) { + checkIncomplete(g); + f.completeExceptionally(ex); + } - f = new CompletableFuture<>(); - f.completeExceptionally(new CFException()); - g = f.thenRun(r = new Noop()); - checkCompletedWithWrappedCFException(g); + checkCompletedWithWrappedCFException(g, ex); + checkCompletedWithWrappedCFException(f, ex); assertEquals(0, r.invocationCount); - } + }} /** - * thenRun result completes exceptionally if action does + * thenRun result completes exceptionally if source cancelled */ - public void testThenRun3() { - CompletableFuture f; - CompletableFuture g; - FailingNoop r; - - f = new CompletableFuture<>(); - g = f.thenRun(r = new FailingNoop()); - f.complete(null); - checkCompletedWithWrappedCFException(g); + public void testThenRun_sourceCancelled() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (boolean mayInterruptIfRunning : new boolean[] { true, false }) + { + final CompletableFuture f = new CompletableFuture<>(); + final Noop r = new Noop(); + if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning)); + final CompletableFuture g = f.thenRun(r); + if (createIncomplete) { + checkIncomplete(g); + assertTrue(f.cancel(mayInterruptIfRunning)); + } - f = new CompletableFuture<>(); - f.complete(null); - g = f.thenRun(r = new FailingNoop()); - checkCompletedWithWrappedCFException(g); - } + checkCompletedWithWrappedCancellationException(g); + checkCancelled(f); + assertEquals(0, r.invocationCount); + }} /** - * thenRun result completes exceptionally if source cancelled + * thenRun result completes exceptionally if action does */ - public void testThenRun4() { - CompletableFuture f; - CompletableFuture g; - Noop r; - - f = new CompletableFuture<>(); - g = f.thenRun(r = new Noop()); - assertTrue(f.cancel(true)); - checkCompletedWithWrappedCancellationException(g); + public void testThenRun_actionFailed() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { + final CompletableFuture f = new CompletableFuture<>(); + final FailingRunnable r = new FailingRunnable(); + if (!createIncomplete) f.complete(v1); + final CompletableFuture g = f.thenRun(r); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } - f = new CompletableFuture<>(); - assertTrue(f.cancel(true)); - g = f.thenRun(r = new Noop()); - checkCompletedWithWrappedCancellationException(g); - } + checkCompletedWithWrappedCFException(g); + checkCompletedNormally(f, v1); + }} /** * thenApply result completes normally after normal completion of source */ - public void testThenApply() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApply(inc); - f.complete(one); - checkCompletedNormally(g, two); - } + public void testThenApply_normalCompletion() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { + final CompletableFuture f = new CompletableFuture<>(); + final IncFunction r = new IncFunction(); + if (!createIncomplete) f.complete(v1); + final CompletableFuture g = m.thenApply(f, r); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } + + checkCompletedNormally(g, inc(v1)); + checkCompletedNormally(f, v1); + assertEquals(1, r.invocationCount); + }} /** * thenApply result completes exceptionally after exceptional * completion of source */ - public void testThenApply2() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApply(inc); - f.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); - } + public void testThenApply_exceptionalCompletion() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + { + final CFException ex = new CFException(); + final CompletableFuture f = new CompletableFuture<>(); + final IncFunction r = new IncFunction(); + if (!createIncomplete) f.completeExceptionally(ex); + final CompletableFuture g = m.thenApply(f, r); + if (createIncomplete) { + checkIncomplete(g); + f.completeExceptionally(ex); + } - /** - * thenApply result completes exceptionally if action does - */ - public void testThenApply3() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApply(new FailingFunction()); - f.complete(one); - checkCompletedWithWrappedCFException(g); - } + checkCompletedWithWrappedCFException(g, ex); + checkCompletedWithWrappedCFException(f, ex); + assertEquals(0, r.invocationCount); + }} /** * thenApply result completes exceptionally if source cancelled */ - public void testThenApply4() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApply(inc); - assertTrue(f.cancel(true)); + public void testThenApply_sourceCancelled() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (boolean mayInterruptIfRunning : new boolean[] { true, false }) + { + final CompletableFuture f = new CompletableFuture<>(); + final IncFunction r = new IncFunction(); + if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning)); + final CompletableFuture g = f.thenApply(r); + if (createIncomplete) { + checkIncomplete(g); + assertTrue(f.cancel(mayInterruptIfRunning)); + } + checkCompletedWithWrappedCancellationException(g); - } + checkCancelled(f); + assertEquals(0, r.invocationCount); + }} + + /** + * thenApply result completes exceptionally if action does + */ + public void testThenApply_actionFailed() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { + final CompletableFuture f = new CompletableFuture<>(); + final FailingFunction r = new FailingFunction(); + if (!createIncomplete) f.complete(v1); + final CompletableFuture g = f.thenApply(r); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } + + checkCompletedWithWrappedCFException(g); + checkCompletedNormally(f, v1); + }} /** * thenAccept result completes normally after normal completion of source */ - public void testThenAccept() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAccept(r); - f.complete(one); + public void testThenAccept_normalCompletion() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { + final CompletableFuture f = new CompletableFuture<>(); + final IncAction r = new IncAction(); + if (!createIncomplete) f.complete(v1); + final CompletableFuture g = m.thenAccept(f, r); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } + checkCompletedNormally(g, null); - assertEquals(r.value, (Integer) 2); - } + checkCompletedNormally(f, v1); + assertEquals(1, r.invocationCount); + assertEquals(inc(v1), r.value); + }} /** * thenAccept result completes exceptionally after exceptional * completion of source */ - public void testThenAccept2() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAccept(r); - f.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); - } + public void testThenAccept_exceptionalCompletion() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + { + final CFException ex = new CFException(); + final CompletableFuture f = new CompletableFuture<>(); + final IncAction r = new IncAction(); + if (!createIncomplete) f.completeExceptionally(ex); + final CompletableFuture g = m.thenAccept(f, r); + if (createIncomplete) { + checkIncomplete(g); + f.completeExceptionally(ex); + } + + checkCompletedWithWrappedCFException(g, ex); + checkCompletedWithWrappedCFException(f, ex); + assertEquals(0, r.invocationCount); + }} /** * thenAccept result completes exceptionally if action does */ - public void testThenAccept3() { - CompletableFuture f = new CompletableFuture<>(); - FailingConsumer r = new FailingConsumer(); - CompletableFuture g = f.thenAccept(r); - f.complete(one); + public void testThenAccept_actionFailed() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { + final CompletableFuture f = new CompletableFuture<>(); + final FailingConsumer r = new FailingConsumer(); + if (!createIncomplete) f.complete(v1); + final CompletableFuture g = f.thenAccept(r); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } + checkCompletedWithWrappedCFException(g); - assertEquals(1, r.invocationCount); - } + checkCompletedNormally(f, v1); + }} /** * thenAccept result completes exceptionally if source cancelled */ - public void testThenAccept4() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAccept(r); - assertTrue(f.cancel(true)); + public void testThenAccept_sourceCancelled() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + for (boolean mayInterruptIfRunning : new boolean[] { true, false }) + { + final CompletableFuture f = new CompletableFuture<>(); + final IncAction r = new IncAction(); + if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning)); + final CompletableFuture g = f.thenAccept(r); + if (createIncomplete) { + checkIncomplete(g); + assertTrue(f.cancel(mayInterruptIfRunning)); + } + checkCompletedWithWrappedCancellationException(g); - } + checkCancelled(f); + assertEquals(0, r.invocationCount); + }} /** * thenCombine result completes normally after normal completion * of sources */ - public void testThenCombine_normalCompletion1() { + public void testThenCombine_normalCompletion() { + for (ExecutionMode m : ExecutionMode.values()) for (boolean createIncomplete : new boolean[] { true, false }) for (boolean fFirst : new boolean[] { true, false }) - for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractFunction r = new SubtractFunction(); - CompletableFuture h = null; - if (createIncomplete) h = m.thenCombine(f, g, r); - if (fFirst) - f.complete(v1); - else - g.complete(v2); - if (createIncomplete) checkIncomplete(h); - assertEquals(0, r.invocationCount); - if (!fFirst) - f.complete(v1); - else - g.complete(v2); - if (!createIncomplete) h = m.thenCombine(f, g, r); + if (fFirst) f.complete(v1); else g.complete(v2); + if (!createIncomplete) + if (!fFirst) f.complete(v1); else g.complete(v2); + final CompletableFuture h = m.thenCombine(f, g, r); + if (createIncomplete) { + checkIncomplete(h); + assertEquals(0, r.invocationCount); + if (!fFirst) f.complete(v1); else g.complete(v2); + } checkCompletedNormally(h, subtract(v1, v2)); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); assertEquals(1, r.invocationCount); - } - } + }} /** * thenCombine result completes exceptionally after exceptional * completion of either source */ - public void testThenCombine_exceptionalCompletion1() { + public void testThenCombine_exceptionalCompletion() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (boolean createIncomplete : new boolean[] { true, false }) + for (boolean fFirst : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); - final SubtractFunction r = new SubtractFunction(); - final CompletableFuture h = m.thenCombine(f, g, r); final CFException ex = new CFException(); - - f.completeExceptionally(ex); - checkIncomplete(h); - g.complete(v1); - - checkCompletedWithWrappedCFException(h, ex); - checkCompletedWithWrappedCFException(f, ex); - assertEquals(0, r.invocationCount); - checkCompletedNormally(g, v1); - } - } - - public void testThenCombine_exceptionalCompletion2() { - for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - - final CompletableFuture f = new CompletableFuture<>(); - final CompletableFuture g = new CompletableFuture<>(); final SubtractFunction r = new SubtractFunction(); - final CompletableFuture h = m.thenCombine(f, g, r); - final CFException ex = new CFException(); - g.completeExceptionally(ex); - checkIncomplete(h); - f.complete(v1); - - checkCompletedWithWrappedCFException(h, ex); - checkCompletedWithWrappedCFException(g, ex); - assertEquals(0, r.invocationCount); - checkCompletedNormally(f, v1); - } - } - - public void testThenCombine_exceptionalCompletion3() { - for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - - final CompletableFuture f = new CompletableFuture<>(); - final CompletableFuture g = new CompletableFuture<>(); - final SubtractFunction r = new SubtractFunction(); - final CFException ex = new CFException(); - - g.completeExceptionally(ex); - f.complete(v1); + (fFirst ? f : g).complete(v1); + if (!createIncomplete) + (!fFirst ? f : g).completeExceptionally(ex); final CompletableFuture h = m.thenCombine(f, g, r); - - checkCompletedWithWrappedCFException(h, ex); - checkCompletedWithWrappedCFException(g, ex); - assertEquals(0, r.invocationCount); - checkCompletedNormally(f, v1); + if (createIncomplete) { + checkIncomplete(h); + (!fFirst ? f : g).completeExceptionally(ex); } - } - - public void testThenCombine_exceptionalCompletion4() { - for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - - final CompletableFuture f = new CompletableFuture<>(); - final CompletableFuture g = new CompletableFuture<>(); - final SubtractFunction r = new SubtractFunction(); - final CFException ex = new CFException(); - - f.completeExceptionally(ex); - g.complete(v1); - final CompletableFuture h = m.thenCombine(f, g, r); checkCompletedWithWrappedCFException(h, ex); - checkCompletedWithWrappedCFException(f, ex); assertEquals(0, r.invocationCount); - checkCompletedNormally(g, v1); - } - } + checkCompletedNormally(fFirst ? f : g, v1); + checkCompletedWithWrappedCFException(!fFirst ? f : g, ex); + }} /** * thenCombine result completes exceptionally if action does */ - public void testThenCombine_actionFailed1() { + public void testThenCombine_actionFailed() { for (ExecutionMode m : ExecutionMode.values()) + for (boolean fFirst : new boolean[] { true, false }) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final FailingBiFunction r = new FailingBiFunction(); final CompletableFuture h = m.thenCombine(f, g, r); - f.complete(v1); - checkIncomplete(h); - g.complete(v2); - - checkCompletedWithWrappedCFException(h); - checkCompletedNormally(f, v1); - checkCompletedNormally(g, v2); + if (fFirst) { + f.complete(v1); + g.complete(v2); + } else { + g.complete(v2); + f.complete(v1); } - } - - public void testThenCombine_actionFailed2() { - for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - - final CompletableFuture f = new CompletableFuture<>(); - final CompletableFuture g = new CompletableFuture<>(); - final FailingBiFunction r = new FailingBiFunction(); - final CompletableFuture h = m.thenCombine(f, g, r); - - g.complete(v2); - checkIncomplete(h); - f.complete(v1); checkCompletedWithWrappedCFException(h); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} /** * thenCombine result completes exceptionally if either source cancelled */ - public void testThenCombine_sourceCancelled1() { + public void testThenCombine_sourceCancelled() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (boolean createIncomplete : new boolean[] { true, false }) + for (boolean fFirst : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractFunction r = new SubtractFunction(); - final CompletableFuture h = m.thenCombine(f, g, r); - - assertTrue(f.cancel(mayInterruptIfRunning)); - checkIncomplete(h); - g.complete(v1); - checkCompletedWithWrappedCancellationException(h); - checkCancelled(f); - assertEquals(0, r.invocationCount); - checkCompletedNormally(g, v1); - } - } - - public void testThenCombine_sourceCancelled2() { - for (ExecutionMode m : ExecutionMode.values()) - for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - - final CompletableFuture f = new CompletableFuture<>(); - final CompletableFuture g = new CompletableFuture<>(); - final SubtractFunction r = new SubtractFunction(); + (fFirst ? f : g).complete(v1); + if (!createIncomplete) + assertTrue((!fFirst ? f : g).cancel(mayInterruptIfRunning)); final CompletableFuture h = m.thenCombine(f, g, r); - - assertTrue(g.cancel(mayInterruptIfRunning)); - checkIncomplete(h); - f.complete(v1); - - checkCompletedWithWrappedCancellationException(h); - checkCancelled(g); - assertEquals(0, r.invocationCount); - checkCompletedNormally(f, v1); + if (createIncomplete) { + checkIncomplete(h); + assertTrue((!fFirst ? f : g).cancel(mayInterruptIfRunning)); } - } - - public void testThenCombine_sourceCancelled3() { - for (ExecutionMode m : ExecutionMode.values()) - for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - - final CompletableFuture f = new CompletableFuture<>(); - final CompletableFuture g = new CompletableFuture<>(); - final SubtractFunction r = new SubtractFunction(); - - assertTrue(g.cancel(mayInterruptIfRunning)); - f.complete(v1); - final CompletableFuture h = m.thenCombine(f, g, r); checkCompletedWithWrappedCancellationException(h); - checkCancelled(g); + checkCancelled(!fFirst ? f : g); assertEquals(0, r.invocationCount); - checkCompletedNormally(f, v1); - } - } - - public void testThenCombine_sourceCancelled4() { - for (ExecutionMode m : ExecutionMode.values()) - for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - - final CompletableFuture f = new CompletableFuture<>(); - final CompletableFuture g = new CompletableFuture<>(); - final SubtractFunction r = new SubtractFunction(); - - assertTrue(f.cancel(mayInterruptIfRunning)); - g.complete(v1); - final CompletableFuture h = m.thenCombine(f, g, r); - - checkCompletedWithWrappedCancellationException(h); - checkCancelled(f); - assertEquals(0, r.invocationCount); - checkCompletedNormally(g, v1); - } - } + checkCompletedNormally(fFirst ? f : g, v1); + }} /** * thenAcceptBoth result completes normally after normal @@ -1384,8 +1360,8 @@ public class CompletableFutureTest exten public void testThenAcceptBoth_normalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1400,14 +1376,13 @@ public class CompletableFutureTest exten assertEquals(subtract(v1, v2), r.value); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testThenAcceptBoth_normalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1422,14 +1397,13 @@ public class CompletableFutureTest exten assertEquals(subtract(v1, v2), r.value); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testThenAcceptBoth_normalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1442,14 +1416,13 @@ public class CompletableFutureTest exten assertEquals(subtract(v1, v2), r.value); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testThenAcceptBoth_normalCompletion4() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1462,8 +1435,7 @@ public class CompletableFutureTest exten assertEquals(subtract(v1, v2), r.value); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} /** * thenAcceptBoth result completes exceptionally after exceptional @@ -1471,8 +1443,8 @@ public class CompletableFutureTest exten */ public void testThenAcceptBoth_exceptionalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1487,13 +1459,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(f, ex); assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); - } - } + }} public void testThenAcceptBoth_exceptionalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1508,13 +1479,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g, ex); assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); - } - } + }} public void testThenAcceptBoth_exceptionalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1528,13 +1498,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g, ex); assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); - } - } + }} public void testThenAcceptBoth_exceptionalCompletion4() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1548,8 +1517,7 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(f, ex); assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); - } - } + }} /** * thenAcceptBoth result completes exceptionally if action does @@ -1557,8 +1525,8 @@ public class CompletableFutureTest exten public void testThenAcceptBoth_actionFailed1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final FailingBiConsumer r = new FailingBiConsumer(); @@ -1571,14 +1539,13 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(h); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testThenAcceptBoth_actionFailed2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final FailingBiConsumer r = new FailingBiConsumer(); @@ -1591,8 +1558,7 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(h); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} /** * thenAcceptBoth result completes exceptionally if either source cancelled @@ -1600,8 +1566,8 @@ public class CompletableFutureTest exten public void testThenAcceptBoth_sourceCancelled1() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1615,14 +1581,13 @@ public class CompletableFutureTest exten checkCancelled(f); assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); - } - } + }} public void testThenAcceptBoth_sourceCancelled2() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1636,14 +1601,13 @@ public class CompletableFutureTest exten checkCancelled(g); assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); - } - } + }} public void testThenAcceptBoth_sourceCancelled3() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1656,14 +1620,13 @@ public class CompletableFutureTest exten checkCancelled(g); assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); - } - } + }} public void testThenAcceptBoth_sourceCancelled4() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final SubtractAction r = new SubtractAction(); @@ -1676,8 +1639,7 @@ public class CompletableFutureTest exten checkCancelled(f); assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); - } - } + }} /** * runAfterBoth result completes normally after normal @@ -1686,8 +1648,8 @@ public class CompletableFutureTest exten public void testRunAfterBoth_normalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1702,14 +1664,13 @@ public class CompletableFutureTest exten assertEquals(1, r.invocationCount); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testRunAfterBoth_normalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1724,14 +1685,13 @@ public class CompletableFutureTest exten assertEquals(1, r.invocationCount); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testRunAfterBoth_normalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1744,14 +1704,13 @@ public class CompletableFutureTest exten assertEquals(1, r.invocationCount); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testRunAfterBoth_normalCompletion4() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1764,8 +1723,7 @@ public class CompletableFutureTest exten assertEquals(1, r.invocationCount); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} /** * runAfterBoth result completes exceptionally after exceptional @@ -1773,8 +1731,8 @@ public class CompletableFutureTest exten */ public void testRunAfterBoth_exceptionalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1789,13 +1747,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(f, ex); assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); - } - } + }} public void testRunAfterBoth_exceptionalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1810,13 +1767,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g, ex); assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); - } - } + }} public void testRunAfterBoth_exceptionalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1830,13 +1786,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g, ex); assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); - } - } + }} public void testRunAfterBoth_exceptionalCompletion4() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1850,8 +1805,7 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(f, ex); assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); - } - } + }} /** * runAfterBoth result completes exceptionally if action does @@ -1859,11 +1813,11 @@ public class CompletableFutureTest exten public void testRunAfterBoth_actionFailed1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); - final FailingNoop r = new FailingNoop(); + final FailingRunnable r = new FailingRunnable(); final CompletableFuture h = m.runAfterBoth(f, g, r); f.complete(v1); @@ -1873,17 +1827,16 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(h); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testRunAfterBoth_actionFailed2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); - final FailingNoop r = new FailingNoop(); + final FailingRunnable r = new FailingRunnable(); final CompletableFuture h = m.runAfterBoth(f, g, r); g.complete(v2); @@ -1893,8 +1846,7 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(h); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} /** * runAfterBoth result completes exceptionally if either source cancelled @@ -1902,8 +1854,8 @@ public class CompletableFutureTest exten public void testRunAfterBoth_sourceCancelled1() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1917,14 +1869,13 @@ public class CompletableFutureTest exten checkCancelled(f); assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); - } - } + }} public void testRunAfterBoth_sourceCancelled2() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1938,14 +1889,13 @@ public class CompletableFutureTest exten checkCancelled(g); assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); - } - } + }} public void testRunAfterBoth_sourceCancelled3() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1958,14 +1908,13 @@ public class CompletableFutureTest exten checkCancelled(g); assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); - } - } + }} public void testRunAfterBoth_sourceCancelled4() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -1978,8 +1927,7 @@ public class CompletableFutureTest exten checkCancelled(f); assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); - } - } + }} /** * applyToEither result completes normally after normal completion @@ -1988,8 +1936,8 @@ public class CompletableFutureTest exten public void testApplyToEither_normalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2002,14 +1950,13 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); checkCompletedNormally(h, inc(v1)); - } - } + }} public void testApplyToEither_normalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2022,13 +1969,13 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); checkCompletedNormally(h, inc(v2)); - } - } + }} + public void testApplyToEither_normalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2044,8 +1991,7 @@ public class CompletableFutureTest exten assertTrue(Objects.equals(h.join(), inc(v1)) || Objects.equals(h.join(), inc(v2))); assertEquals(1, r.invocationCount); - } - } + }} /** * applyToEither result completes exceptionally after exceptional @@ -2053,8 +1999,8 @@ public class CompletableFutureTest exten */ public void testApplyToEither_exceptionalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2069,13 +2015,12 @@ public class CompletableFutureTest exten checkCompletedNormally(g, v1); checkCompletedWithWrappedCFException(f, ex); checkCompletedWithWrappedCFException(h, ex); - } - } + }} public void testApplyToEither_exceptionalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2090,13 +2035,12 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedWithWrappedCFException(g, ex); checkCompletedWithWrappedCFException(h, ex); - } - } + }} public void testApplyToEither_exceptionalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2118,13 +2062,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g, ex); checkCompletedNormally(f, v1); - } - } + }} public void testApplyToEither_exceptionalCompletion4() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2146,8 +2089,7 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(f, ex); checkCompletedNormally(g, v1); - } - } + }} /** * applyToEither result completes exceptionally if action does @@ -2155,8 +2097,8 @@ public class CompletableFutureTest exten public void testApplyToEither_actionFailed1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final FailingFunction r = new FailingFunction(); @@ -2167,14 +2109,13 @@ public class CompletableFutureTest exten g.complete(v2); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testApplyToEither_actionFailed2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final FailingFunction r = new FailingFunction(); @@ -2185,8 +2126,7 @@ public class CompletableFutureTest exten f.complete(v1); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} /** * applyToEither result completes exceptionally if either source cancelled @@ -2194,8 +2134,8 @@ public class CompletableFutureTest exten public void testApplyToEither_sourceCancelled1() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2209,14 +2149,13 @@ public class CompletableFutureTest exten assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); checkCompletedWithWrappedCancellationException(h); - } - } + }} public void testApplyToEither_sourceCancelled2() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2230,14 +2169,13 @@ public class CompletableFutureTest exten assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); checkCompletedWithWrappedCancellationException(h); - } - } + }} public void testApplyToEither_sourceCancelled3() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2258,14 +2196,13 @@ public class CompletableFutureTest exten checkCancelled(g); checkCompletedNormally(f, v1); - } - } + }} public void testApplyToEither_sourceCancelled4() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncFunction r = new IncFunction(); @@ -2286,8 +2223,7 @@ public class CompletableFutureTest exten checkCancelled(f); checkCompletedNormally(g, v1); - } - } + }} /** * acceptEither result completes normally after normal completion @@ -2296,8 +2232,8 @@ public class CompletableFutureTest exten public void testAcceptEither_normalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2311,14 +2247,13 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); checkCompletedNormally(h, null); - } - } + }} public void testAcceptEither_normalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2332,13 +2267,13 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); checkCompletedNormally(h, null); - } - } + }} + public void testAcceptEither_normalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2354,8 +2289,7 @@ public class CompletableFutureTest exten // unspecified behavior assertTrue(Objects.equals(r.value, inc(v1)) || Objects.equals(r.value, inc(v2))); - } - } + }} /** * acceptEither result completes exceptionally after exceptional @@ -2363,8 +2297,8 @@ public class CompletableFutureTest exten */ public void testAcceptEither_exceptionalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2379,13 +2313,12 @@ public class CompletableFutureTest exten checkCompletedNormally(g, v1); checkCompletedWithWrappedCFException(f, ex); checkCompletedWithWrappedCFException(h, ex); - } - } + }} public void testAcceptEither_exceptionalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2400,13 +2333,12 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedWithWrappedCFException(g, ex); checkCompletedWithWrappedCFException(h, ex); - } - } + }} public void testAcceptEither_exceptionalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2429,13 +2361,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g, ex); checkCompletedNormally(f, v1); - } - } + }} public void testAcceptEither_exceptionalCompletion4() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2458,8 +2389,7 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(f, ex); checkCompletedNormally(g, v1); - } - } + }} /** * acceptEither result completes exceptionally if action does @@ -2467,8 +2397,8 @@ public class CompletableFutureTest exten public void testAcceptEither_actionFailed1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final FailingConsumer r = new FailingConsumer(); @@ -2479,14 +2409,13 @@ public class CompletableFutureTest exten g.complete(v2); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testAcceptEither_actionFailed2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final FailingConsumer r = new FailingConsumer(); @@ -2497,8 +2426,7 @@ public class CompletableFutureTest exten f.complete(v1); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} /** * acceptEither result completes exceptionally if either source cancelled @@ -2506,8 +2434,8 @@ public class CompletableFutureTest exten public void testAcceptEither_sourceCancelled1() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2521,14 +2449,13 @@ public class CompletableFutureTest exten assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); checkCompletedWithWrappedCancellationException(h); - } - } + }} public void testAcceptEither_sourceCancelled2() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2542,14 +2469,13 @@ public class CompletableFutureTest exten assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); checkCompletedWithWrappedCancellationException(h); - } - } + }} public void testAcceptEither_sourceCancelled3() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2571,14 +2497,13 @@ public class CompletableFutureTest exten checkCancelled(g); checkCompletedNormally(f, v1); - } - } + }} public void testAcceptEither_sourceCancelled4() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final IncAction r = new IncAction(); @@ -2600,8 +2525,7 @@ public class CompletableFutureTest exten checkCancelled(f); checkCompletedNormally(g, v1); - } - } + }} /** * runAfterEither result completes normally after normal completion @@ -2610,8 +2534,8 @@ public class CompletableFutureTest exten public void testRunAfterEither_normalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2626,14 +2550,13 @@ public class CompletableFutureTest exten checkCompletedNormally(g, v2); checkCompletedNormally(h, null); assertEquals(1, r.invocationCount); - } - } + }} public void testRunAfterEither_normalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2648,13 +2571,13 @@ public class CompletableFutureTest exten checkCompletedNormally(g, v2); checkCompletedNormally(h, null); assertEquals(1, r.invocationCount); - } - } + }} + public void testRunAfterEither_normalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2667,8 +2590,7 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); assertEquals(1, r.invocationCount); - } - } + }} /** * runAfterEither result completes exceptionally after exceptional @@ -2676,8 +2598,8 @@ public class CompletableFutureTest exten */ public void testRunAfterEither_exceptionalCompletion1() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2692,13 +2614,12 @@ public class CompletableFutureTest exten checkCompletedNormally(g, v1); checkCompletedWithWrappedCFException(f, ex); checkCompletedWithWrappedCFException(h, ex); - } - } + }} public void testRunAfterEither_exceptionalCompletion2() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2713,13 +2634,12 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedWithWrappedCFException(g, ex); checkCompletedWithWrappedCFException(h, ex); - } - } + }} public void testRunAfterEither_exceptionalCompletion3() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2741,13 +2661,12 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g, ex); checkCompletedNormally(f, v1); - } - } + }} public void testRunAfterEither_exceptionalCompletion4() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2769,8 +2688,7 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(f, ex); checkCompletedNormally(g, v1); - } - } + }} /** * runAfterEither result completes exceptionally if action does @@ -2778,11 +2696,11 @@ public class CompletableFutureTest exten public void testRunAfterEither_actionFailed1() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); - final FailingNoop r = new FailingNoop(); + final FailingRunnable r = new FailingRunnable(); final CompletableFuture h = m.runAfterEither(f, g, r); f.complete(v1); @@ -2790,17 +2708,16 @@ public class CompletableFutureTest exten g.complete(v2); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} public void testRunAfterEither_actionFailed2() { for (ExecutionMode m : ExecutionMode.values()) for (Integer v1 : new Integer[] { 1, null }) - for (Integer v2 : new Integer[] { 2, null }) { - + for (Integer v2 : new Integer[] { 2, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); - final FailingNoop r = new FailingNoop(); + final FailingRunnable r = new FailingRunnable(); final CompletableFuture h = m.runAfterEither(f, g, r); g.complete(v2); @@ -2808,8 +2725,7 @@ public class CompletableFutureTest exten f.complete(v1); checkCompletedNormally(f, v1); checkCompletedNormally(g, v2); - } - } + }} /** * runAfterEither result completes exceptionally if either source cancelled @@ -2817,8 +2733,8 @@ public class CompletableFutureTest exten public void testRunAfterEither_sourceCancelled1() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2832,14 +2748,13 @@ public class CompletableFutureTest exten assertEquals(0, r.invocationCount); checkCompletedNormally(g, v1); checkCompletedWithWrappedCancellationException(h); - } - } + }} public void testRunAfterEither_sourceCancelled2() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2853,14 +2768,13 @@ public class CompletableFutureTest exten assertEquals(0, r.invocationCount); checkCompletedNormally(f, v1); checkCompletedWithWrappedCancellationException(h); - } - } + }} public void testRunAfterEither_sourceCancelled3() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2881,14 +2795,13 @@ public class CompletableFutureTest exten checkCancelled(g); checkCompletedNormally(f, v1); - } - } + }} public void testRunAfterEither_sourceCancelled4() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFuture g = new CompletableFuture<>(); final Noop r = new Noop(); @@ -2909,423 +2822,86 @@ public class CompletableFutureTest exten checkCancelled(f); checkCompletedNormally(g, v1); - } - } + }} /** * thenCompose result completes normally after normal completion of source */ - public void testThenCompose_normalCompletion1() { + public void testThenCompose_normalCompletion() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (boolean createIncomplete : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFutureInc r = new CompletableFutureInc(); + if (!createIncomplete) f.complete(v1); final CompletableFuture g = f.thenCompose(r); - f.complete(v1); - checkCompletedNormally(g, inc(v1)); - checkCompletedNormally(f, v1); - assertEquals(1, r.invocationCount); - } - } - - public void testThenCompose_normalCompletion2() { - for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { + if (createIncomplete) f.complete(v1); - final CompletableFuture f = new CompletableFuture<>(); - final CompletableFutureInc r = new CompletableFutureInc(); - f.complete(v1); - final CompletableFuture g = f.thenCompose(r); checkCompletedNormally(g, inc(v1)); checkCompletedNormally(f, v1); assertEquals(1, r.invocationCount); - } - } + }} /** * thenCompose result completes exceptionally after exceptional * completion of source */ - public void testThenCompose_exceptionalCompletion1() { - for (ExecutionMode m : ExecutionMode.values()) { - + public void testThenCompose_exceptionalCompletion() { + for (ExecutionMode m : ExecutionMode.values()) + for (boolean createIncomplete : new boolean[] { true, false }) + { final CFException ex = new CFException(); final CompletableFutureInc r = new CompletableFutureInc(); final CompletableFuture f = new CompletableFuture<>(); + if (!createIncomplete) f.completeExceptionally(ex); final CompletableFuture g = f.thenCompose(r); - f.completeExceptionally(ex); - checkCompletedWithWrappedCFException(g, ex); - checkCompletedWithWrappedCFException(f, ex); - } - } - - public void testThenCompose_exceptionalCompletion2() { - for (ExecutionMode m : ExecutionMode.values()) { + if (createIncomplete) f.completeExceptionally(ex); - final CFException ex = new CFException(); - final CompletableFuture f = new CompletableFuture<>(); - f.completeExceptionally(ex); - final CompletableFutureInc r = new CompletableFutureInc(); - final CompletableFuture g = f.thenCompose(r); checkCompletedWithWrappedCFException(g, ex); checkCompletedWithWrappedCFException(f, ex); - } - } + assertEquals(0, r.invocationCount); + }} /** * thenCompose result completes exceptionally if action does */ - public void testThenCompose_actionFailed1() { + public void testThenCompose_actionFailed() { for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (boolean createIncomplete : new boolean[] { true, false }) + for (Integer v1 : new Integer[] { 1, null }) + { final CompletableFuture f = new CompletableFuture<>(); final FailingCompletableFutureFunction r = new FailingCompletableFutureFunction(); + if (!createIncomplete) f.complete(v1); final CompletableFuture g = f.thenCompose(r); - f.complete(v1); - checkCompletedWithWrappedCFException(g); - checkCompletedNormally(f, v1); - } - } - - public void testThenCompose_actionFailed2() { - for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { + if (createIncomplete) f.complete(v1); - final CompletableFuture f = new CompletableFuture<>(); - f.complete(v1); - final FailingCompletableFutureFunction r - = new FailingCompletableFutureFunction(); - final CompletableFuture g = f.thenCompose(r); checkCompletedWithWrappedCFException(g); checkCompletedNormally(f, v1); - } - } + }} /** * thenCompose result completes exceptionally if source cancelled */ - public void testThenCompose_sourceCancelled1() { + public void testThenCompose_sourceCancelled() { for (ExecutionMode m : ExecutionMode.values()) - for (boolean mayInterruptIfRunning : new boolean[] { true, false }) { - + for (boolean createIncomplete : new boolean[] { true, false }) + for (boolean mayInterruptIfRunning : new boolean[] { true, false }) + { final CompletableFuture f = new CompletableFuture<>(); final CompletableFutureInc r = new CompletableFutureInc(); + if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning)); final CompletableFuture g = f.thenCompose(r); - assertTrue(f.cancel(mayInterruptIfRunning)); - checkCompletedWithWrappedCancellationException(g); - checkCancelled(f); + if (createIncomplete) { + checkIncomplete(g); + assertTrue(f.cancel(mayInterruptIfRunning)); } - } - public void testThenCompose_sourceCancelled2() { - for (ExecutionMode m : ExecutionMode.values()) - for (boolean mayInterruptIfRunning : new boolean[] { true, false }) { - - final CompletableFuture f = new CompletableFuture<>(); - assertTrue(f.cancel(mayInterruptIfRunning)); - final CompletableFutureInc r = new CompletableFutureInc(); - final CompletableFuture g = f.thenCompose(r); checkCompletedWithWrappedCancellationException(g); checkCancelled(f); - } - } - - // asyncs - - /** - * thenRunAsync result completes normally after normal completion of source - */ - public void testThenRunAsync() { - CompletableFuture f = new CompletableFuture<>(); - Noop r = new Noop(); - CompletableFuture g = f.thenRunAsync(r); - f.complete(null); - checkCompletedNormally(g, null); - - // reordered version - f = new CompletableFuture<>(); - f.complete(null); - r = new Noop(); - g = f.thenRunAsync(r); - checkCompletedNormally(g, null); - } - - /** - * thenRunAsync result completes exceptionally after exceptional - * completion of source - */ - public void testThenRunAsync2() { - CompletableFuture f = new CompletableFuture<>(); - Noop r = new Noop(); - CompletableFuture g = f.thenRunAsync(r); - f.completeExceptionally(new CFException()); - try { - g.join(); - shouldThrow(); - } catch (CompletionException success) {} - checkCompletedWithWrappedCFException(g); - } - - /** - * thenRunAsync result completes exceptionally if action does - */ - public void testThenRunAsync3() { - CompletableFuture f = new CompletableFuture<>(); - FailingNoop r = new FailingNoop(); - CompletableFuture g = f.thenRunAsync(r); - f.complete(null); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenRunAsync result completes exceptionally if source cancelled - */ - public void testThenRunAsync4() { - CompletableFuture f = new CompletableFuture<>(); - Noop r = new Noop(); - CompletableFuture g = f.thenRunAsync(r); - assertTrue(f.cancel(true)); - checkCompletedWithWrappedCancellationException(g); - } - - /** - * thenApplyAsync result completes normally after normal completion of source - */ - public void testThenApplyAsync() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApplyAsync(inc); - f.complete(one); - checkCompletedNormally(g, two); - } - - /** - * thenApplyAsync result completes exceptionally after exceptional - * completion of source - */ - public void testThenApplyAsync2() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApplyAsync(inc); - f.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenApplyAsync result completes exceptionally if action does - */ - public void testThenApplyAsync3() { - CompletableFuture f = new CompletableFuture<>(); - FailingFunction r = new FailingFunction(); - CompletableFuture g = f.thenApplyAsync(r); - f.complete(null); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenApplyAsync result completes exceptionally if source cancelled - */ - public void testThenApplyAsync4() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApplyAsync(inc); - assertTrue(f.cancel(true)); - checkCompletedWithWrappedCancellationException(g); - } - - /** - * thenAcceptAsync result completes normally after normal - * completion of source - */ - public void testThenAcceptAsync() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAcceptAsync(r); - f.complete(one); - checkCompletedNormally(g, null); - assertEquals(r.value, (Integer) 2); - } - - /** - * thenAcceptAsync result completes exceptionally after exceptional - * completion of source - */ - public void testThenAcceptAsync2() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAcceptAsync(r); - f.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenAcceptAsync result completes exceptionally if action does - */ - public void testThenAcceptAsync3() { - CompletableFuture f = new CompletableFuture<>(); - FailingConsumer r = new FailingConsumer(); - CompletableFuture g = f.thenAcceptAsync(r); - f.complete(null); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenAcceptAsync result completes exceptionally if source cancelled - */ - public void testThenAcceptAsync4() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAcceptAsync(r); - assertTrue(f.cancel(true)); - checkCompletedWithWrappedCancellationException(g); - } - - // async with explicit executors - - /** - * thenRunAsync result completes normally after normal completion of source - */ - public void testThenRunAsyncE() { - CompletableFuture f = new CompletableFuture<>(); - Noop r = new Noop(); - CompletableFuture g = f.thenRunAsync(r, new ThreadExecutor()); - f.complete(null); - checkCompletedNormally(g, null); - - // reordered version - f = new CompletableFuture<>(); - f.complete(null); - r = new Noop(); - g = f.thenRunAsync(r, new ThreadExecutor()); - checkCompletedNormally(g, null); - } - - /** - * thenRunAsync result completes exceptionally after exceptional - * completion of source - */ - public void testThenRunAsync2E() { - CompletableFuture f = new CompletableFuture<>(); - Noop r = new Noop(); - CompletableFuture g = f.thenRunAsync(r, new ThreadExecutor()); - f.completeExceptionally(new CFException()); - try { - g.join(); - shouldThrow(); - } catch (CompletionException success) {} - checkCompletedWithWrappedCFException(g); - } - - /** - * thenRunAsync result completes exceptionally if action does - */ - public void testThenRunAsync3E() { - CompletableFuture f = new CompletableFuture<>(); - FailingNoop r = new FailingNoop(); - CompletableFuture g = f.thenRunAsync(r, new ThreadExecutor()); - f.complete(null); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenRunAsync result completes exceptionally if source cancelled - */ - public void testThenRunAsync4E() { - CompletableFuture f = new CompletableFuture<>(); - Noop r = new Noop(); - CompletableFuture g = f.thenRunAsync(r, new ThreadExecutor()); - assertTrue(f.cancel(true)); - checkCompletedWithWrappedCancellationException(g); - } - - /** - * thenApplyAsync result completes normally after normal completion of source - */ - public void testThenApplyAsyncE() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApplyAsync(inc, new ThreadExecutor()); - f.complete(one); - checkCompletedNormally(g, two); - } - - /** - * thenApplyAsync result completes exceptionally after exceptional - * completion of source - */ - public void testThenApplyAsync2E() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApplyAsync(inc, new ThreadExecutor()); - f.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenApplyAsync result completes exceptionally if action does - */ - public void testThenApplyAsync3E() { - CompletableFuture f = new CompletableFuture<>(); - FailingFunction r = new FailingFunction(); - CompletableFuture g = f.thenApplyAsync(r, new ThreadExecutor()); - f.complete(null); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenApplyAsync result completes exceptionally if source cancelled - */ - public void testThenApplyAsync4E() { - CompletableFuture f = new CompletableFuture<>(); - CompletableFuture g = f.thenApplyAsync(inc, new ThreadExecutor()); - assertTrue(f.cancel(true)); - checkCompletedWithWrappedCancellationException(g); - } - - /** - * thenAcceptAsync result completes normally after normal - * completion of source - */ - public void testThenAcceptAsyncE() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAcceptAsync(r, new ThreadExecutor()); - f.complete(one); - checkCompletedNormally(g, null); - assertEquals(r.value, (Integer) 2); - } - - /** - * thenAcceptAsync result completes exceptionally after exceptional - * completion of source - */ - public void testThenAcceptAsync2E() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAcceptAsync(r, new ThreadExecutor()); - f.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenAcceptAsync result completes exceptionally if action does - */ - public void testThenAcceptAsync3E() { - CompletableFuture f = new CompletableFuture<>(); - FailingConsumer r = new FailingConsumer(); - CompletableFuture g = f.thenAcceptAsync(r, new ThreadExecutor()); - f.complete(null); - checkCompletedWithWrappedCFException(g); - } - - /** - * thenAcceptAsync result completes exceptionally if source cancelled - */ - public void testThenAcceptAsync4E() { - CompletableFuture f = new CompletableFuture<>(); - IncAction r = new IncAction(); - CompletableFuture g = f.thenAcceptAsync(r, new ThreadExecutor()); - assertTrue(f.cancel(true)); - checkCompletedWithWrappedCancellationException(g); - } + }} // other static methods @@ -3607,8 +3183,8 @@ public class CompletableFutureTest exten public void testWhenComplete_actionFailed() { for (boolean createIncomplete : new boolean[] { true, false }) for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final AtomicInteger a = new AtomicInteger(0); final CFException ex = new CFException(); final CompletableFuture f = new CompletableFuture<>(); @@ -3625,8 +3201,7 @@ public class CompletableFutureTest exten checkCompletedNormally(f, v1); checkCompletedWithWrappedCFException(g, ex); assertEquals(1, a.get()); - } - } + }} /** * If a whenComplete action throws an exception when triggered by @@ -3636,8 +3211,8 @@ public class CompletableFutureTest exten public void testWhenComplete_actionFailedSourceFailed() { for (boolean createIncomplete : new boolean[] { true, false }) for (ExecutionMode m : ExecutionMode.values()) - for (Integer v1 : new Integer[] { 1, null }) { - + for (Integer v1 : new Integer[] { 1, null }) + { final AtomicInteger a = new AtomicInteger(0); final CFException ex1 = new CFException(); final CFException ex2 = new CFException(); @@ -3657,7 +3232,6 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(f, ex1); checkCompletedWithWrappedCFException(g, ex1); assertEquals(1, a.get()); - } - } + }} }