--- jsr166/src/test/tck/CompletableFutureTest.java 2015/09/04 19:57:19 1.113 +++ jsr166/src/test/tck/CompletableFutureTest.java 2015/09/06 16:47:24 1.120 @@ -3345,6 +3345,13 @@ public class CompletableFutureTest exten () -> CompletableFuture.anyOf(null, f), () -> f.obtrudeException(null), + + () -> CompletableFuture.delayedExecutor(1L, SECONDS, null), + () -> CompletableFuture.delayedExecutor(1L, null, new ThreadExecutor()), + () -> CompletableFuture.delayedExecutor(1L, null), + + () -> f.orTimeout(1L, null), + () -> f.completeOnTimeout(42, 1L, null), }; assertThrows(NullPointerException.class, throwingActions); @@ -3365,17 +3372,25 @@ public class CompletableFutureTest exten * newIncompleteFuture returns an incomplete CompletableFuture */ public void testNewIncompleteFuture() { + for (Integer v1 : new Integer[] { 1, null }) + { CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.newIncompleteFuture(); checkIncomplete(f); checkIncomplete(g); - } + f.complete(v1); + checkCompletedNormally(f, v1); + checkIncomplete(g); + g.complete(v1); + checkCompletedNormally(g, v1); + assertSame(g.getClass(), CompletableFuture.class); + }} /** * completedStage returns a completed CompletionStage */ public void testCompletedStage() { - AtomicInteger x = new AtomicInteger(); + AtomicInteger x = new AtomicInteger(0); AtomicReference r = new AtomicReference(); CompletionStage f = CompletableFuture.completedStage(1); f.whenComplete((v, e) -> {if (e != null) r.set(e); else x.set(v);}); @@ -3404,13 +3419,13 @@ public class CompletableFutureTest exten public void testFailedFuture() { CFException ex = new CFException(); CompletableFuture f = CompletableFuture.failedFuture(ex); - checkCompletedExceptionallyWithRootCause(f, ex); + checkCompletedExceptionally(f, ex); } /** * failedFuture(null) throws NPE */ - public void testFailedFuture2() { + public void testFailedFuture_null() { try { CompletableFuture f = CompletableFuture.failedFuture(null); shouldThrow(); @@ -3453,7 +3468,7 @@ public class CompletableFutureTest exten public void testMinimalCompletionStage() { CompletableFuture f = new CompletableFuture<>(); CompletionStage g = f.minimalCompletionStage(); - AtomicInteger x = new AtomicInteger(); + AtomicInteger x = new AtomicInteger(0); AtomicReference r = new AtomicReference(); checkIncomplete(f); g.whenComplete((v, e) -> {if (e != null) r.set(e); else x.set(v);}); @@ -3470,7 +3485,7 @@ public class CompletableFutureTest exten public void testMinimalCompletionStage2() { CompletableFuture f = new CompletableFuture<>(); CompletionStage g = f.minimalCompletionStage(); - AtomicInteger x = new AtomicInteger(); + AtomicInteger x = new AtomicInteger(0); AtomicReference r = new AtomicReference(); g.whenComplete((v, e) -> {if (e != null) r.set(e); else x.set(v);}); checkIncomplete(f); @@ -3488,11 +3503,11 @@ public class CompletableFutureTest exten public void testFailedStage() { CFException ex = new CFException(); CompletionStage f = CompletableFuture.failedStage(ex); - AtomicInteger x = new AtomicInteger(); + AtomicInteger x = new AtomicInteger(0); AtomicReference r = new AtomicReference(); f.whenComplete((v, e) -> {if (e != null) r.set(e); else x.set(v);}); assertEquals(x.get(), 0); - assertEquals(r.get().getCause(), ex); + assertEquals(r.get(), ex); } /** @@ -3586,16 +3601,14 @@ public class CompletableFutureTest exten /** * delayedExecutor returns an executor that delays submission */ - public void testDelayedExecutor() { + public void testDelayedExecutor() throws Exception { long timeoutMillis = SMALL_DELAY_MS; Executor d = CompletableFuture.delayedExecutor(timeoutMillis, MILLISECONDS); long startTime = System.nanoTime(); CompletableFuture f = CompletableFuture.supplyAsync(() -> 1, d); assertNull(f.getNow(null)); - try { - assertEquals(1, (int) f.get(LONG_DELAY_MS, MILLISECONDS)); - } catch (Throwable fail) { threadUnexpectedException(fail); } + assertEquals(1, (int) f.get(LONG_DELAY_MS, MILLISECONDS)); assertTrue(millisElapsedSince(startTime) > timeoutMillis/2); checkCompletedNormally(f, 1); } @@ -3604,7 +3617,7 @@ public class CompletableFutureTest exten * delayedExecutor for a given executor returns an executor that * delays submission */ - public void testDelayedExecutor2() { + public void testDelayedExecutor2() throws Exception { long timeoutMillis = SMALL_DELAY_MS; Executor d = CompletableFuture.delayedExecutor(timeoutMillis, MILLISECONDS, @@ -3612,9 +3625,7 @@ public class CompletableFutureTest exten long startTime = System.nanoTime(); CompletableFuture f = CompletableFuture.supplyAsync(() -> 1, d); assertNull(f.getNow(null)); - try { - assertEquals(1, (int) f.get(LONG_DELAY_MS, MILLISECONDS)); - } catch (Throwable fail) { threadUnexpectedException(fail); } + assertEquals(1, (int) f.get(LONG_DELAY_MS, MILLISECONDS)); assertTrue(millisElapsedSince(startTime) > timeoutMillis/2); checkCompletedNormally(f, 1); }