--- jsr166/src/test/tck/CompletableFutureTest.java 2014/06/02 19:32:57 1.50 +++ jsr166/src/test/tck/CompletableFutureTest.java 2014/06/02 20:10:04 1.52 @@ -983,7 +983,10 @@ public class CompletableFutureTest exten final Noop r = new Noop(); if (!createIncomplete) f.complete(v1); final CompletableFuture g = m.thenRun(f, r); - if (createIncomplete) f.complete(v1); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } checkCompletedNormally(g, null); checkCompletedNormally(f, v1); @@ -1003,7 +1006,10 @@ public class CompletableFutureTest exten final Noop r = new Noop(); if (!createIncomplete) f.completeExceptionally(ex); final CompletableFuture g = m.thenRun(f, r); - if (createIncomplete) f.completeExceptionally(ex); + if (createIncomplete) { + checkIncomplete(g); + f.completeExceptionally(ex); + } checkCompletedWithWrappedCFException(g, ex); checkCompletedWithWrappedCFException(f, ex); @@ -1022,7 +1028,10 @@ public class CompletableFutureTest exten final Noop r = new Noop(); if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning)); final CompletableFuture g = f.thenRun(r); - if (createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning)); + if (createIncomplete) { + checkIncomplete(g); + assertTrue(f.cancel(mayInterruptIfRunning)); + } checkCompletedWithWrappedCancellationException(g); checkCancelled(f); @@ -1041,7 +1050,10 @@ public class CompletableFutureTest exten final FailingRunnable r = new FailingRunnable(); if (!createIncomplete) f.complete(v1); final CompletableFuture g = f.thenRun(r); - if (createIncomplete) f.complete(v1); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } checkCompletedWithWrappedCFException(g); checkCompletedNormally(f, v1); @@ -1082,7 +1094,10 @@ public class CompletableFutureTest exten final IncFunction r = new IncFunction(); if (!createIncomplete) f.completeExceptionally(ex); final CompletableFuture g = m.thenApply(f, r); - if (createIncomplete) f.completeExceptionally(ex); + if (createIncomplete) { + checkIncomplete(g); + f.completeExceptionally(ex); + } checkCompletedWithWrappedCFException(g, ex); checkCompletedWithWrappedCFException(f, ex); @@ -1101,7 +1116,10 @@ public class CompletableFutureTest exten final IncFunction r = new IncFunction(); if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning)); final CompletableFuture g = f.thenApply(r); - if (createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning)); + if (createIncomplete) { + checkIncomplete(g); + assertTrue(f.cancel(mayInterruptIfRunning)); + } checkCompletedWithWrappedCancellationException(g); checkCancelled(f); @@ -1120,7 +1138,10 @@ public class CompletableFutureTest exten final FailingFunction r = new FailingFunction(); if (!createIncomplete) f.complete(v1); final CompletableFuture g = f.thenApply(r); - if (createIncomplete) f.complete(v1); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } checkCompletedWithWrappedCFException(g); checkCompletedNormally(f, v1); @@ -1138,7 +1159,10 @@ public class CompletableFutureTest exten final IncAction r = new IncAction(); if (!createIncomplete) f.complete(v1); final CompletableFuture g = m.thenAccept(f, r); - if (createIncomplete) f.complete(v1); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } checkCompletedNormally(g, null); checkCompletedNormally(f, v1); @@ -1159,7 +1183,10 @@ public class CompletableFutureTest exten final IncAction r = new IncAction(); if (!createIncomplete) f.completeExceptionally(ex); final CompletableFuture g = m.thenAccept(f, r); - if (createIncomplete) f.completeExceptionally(ex); + if (createIncomplete) { + checkIncomplete(g); + f.completeExceptionally(ex); + } checkCompletedWithWrappedCFException(g, ex); checkCompletedWithWrappedCFException(f, ex); @@ -1178,7 +1205,10 @@ public class CompletableFutureTest exten final FailingConsumer r = new FailingConsumer(); if (!createIncomplete) f.complete(v1); final CompletableFuture g = f.thenAccept(r); - if (createIncomplete) f.complete(v1); + if (createIncomplete) { + checkIncomplete(g); + f.complete(v1); + } checkCompletedWithWrappedCFException(g); checkCompletedNormally(f, v1); @@ -1210,30 +1240,26 @@ public class CompletableFutureTest exten * 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 }) { 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); @@ -1245,108 +1271,38 @@ public class CompletableFutureTest exten * thenCombine result completes exceptionally after exceptional * completion of either source */ - public void testThenCombine_exceptionalCompletion1() { - 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(); - - 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() { + public void testThenCombine_exceptionalCompletion() { for (ExecutionMode m : ExecutionMode.values()) + 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 CFException ex = new CFException(); - - g.completeExceptionally(ex); - f.complete(v1); - final CompletableFuture h = m.thenCombine(f, g, r); - - checkCompletedWithWrappedCFException(h, ex); - checkCompletedWithWrappedCFException(g, ex); - assertEquals(0, r.invocationCount); - checkCompletedNormally(f, v1); - }} - - 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); + (fFirst ? f : g).complete(v1); + if (!createIncomplete) + (!fFirst ? f : g).completeExceptionally(ex); final CompletableFuture h = m.thenCombine(f, g, r); + if (createIncomplete) { + checkIncomplete(h); + (!fFirst ? f : g).completeExceptionally(ex); + } 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() { - 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); - - f.complete(v1); - checkIncomplete(h); - g.complete(v2); - - checkCompletedWithWrappedCFException(h); - checkCompletedNormally(f, v1); - checkCompletedNormally(g, v2); - }} - - public void testThenCombine_actionFailed2() { + 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 }) { @@ -1355,9 +1311,13 @@ public class CompletableFutureTest exten final FailingBiFunction r = new FailingBiFunction(); final CompletableFuture h = m.thenCombine(f, g, r); - g.complete(v2); - checkIncomplete(h); - f.complete(v1); + if (fFirst) { + f.complete(v1); + g.complete(v2); + } else { + g.complete(v2); + f.complete(v1); + } checkCompletedWithWrappedCFException(h); checkCompletedNormally(f, v1); @@ -1367,82 +1327,30 @@ public class CompletableFutureTest exten /** * thenCombine result completes exceptionally if either source cancelled */ - public void testThenCombine_sourceCancelled1() { - 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(); - 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(); - 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); - }} - - 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); - assertEquals(0, r.invocationCount); - checkCompletedNormally(f, v1); - }} - - public void testThenCombine_sourceCancelled4() { + public void testThenCombine_sourceCancelled() { for (ExecutionMode m : ExecutionMode.values()) for (boolean mayInterruptIfRunning : new boolean[] { true, false }) + 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(); - assertTrue(f.cancel(mayInterruptIfRunning)); - g.complete(v1); + (fFirst ? f : g).complete(v1); + if (!createIncomplete) + assertTrue((!fFirst ? f : g).cancel(mayInterruptIfRunning)); final CompletableFuture h = m.thenCombine(f, g, r); + if (createIncomplete) { + checkIncomplete(h); + assertTrue((!fFirst ? f : g).cancel(mayInterruptIfRunning)); + } checkCompletedWithWrappedCancellationException(h); - checkCancelled(f); + checkCancelled(!fFirst ? f : g); assertEquals(0, r.invocationCount); - checkCompletedNormally(g, v1); + checkCompletedNormally(fFirst ? f : g, v1); }} /**