--- jsr166/src/test/tck/CompletableFutureTest.java 2017/07/03 20:55:45 1.186 +++ jsr166/src/test/tck/CompletableFutureTest.java 2018/07/22 20:17:46 1.196 @@ -41,7 +41,6 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; -import junit.framework.AssertionFailedError; import junit.framework.Test; import junit.framework.TestSuite; @@ -59,10 +58,14 @@ public class CompletableFutureTest exten void checkIncomplete(CompletableFuture f) { assertFalse(f.isDone()); assertFalse(f.isCancelled()); - assertTrue(f.toString().contains("Not completed")); + assertTrue(f.toString().matches(".*\\[.*Not completed.*\\]")); + + Object result = null; try { - assertNull(f.getNow(null)); + result = f.getNow(null); } catch (Throwable fail) { threadUnexpectedException(fail); } + assertNull(result); + try { f.get(randomExpiredTimeout(), randomTimeUnit()); shouldThrow(); @@ -74,15 +77,19 @@ public class CompletableFutureTest exten void checkCompletedNormally(CompletableFuture f, T value) { checkTimedGet(f, value); + assertEquals(value, f.join()); + assertEquals(value, f.getNow(null)); + + T result = null; try { - assertEquals(value, f.join()); - assertEquals(value, f.getNow(null)); - assertEquals(value, f.get()); + result = f.get(); } catch (Throwable fail) { threadUnexpectedException(fail); } + assertEquals(value, result); + assertTrue(f.isDone()); assertFalse(f.isCancelled()); assertFalse(f.isCompletedExceptionally()); - assertTrue(f.toString().contains("[Completed normally]")); + assertTrue(f.toString().matches(".*\\[.*Completed normally.*\\]")); } /** @@ -138,7 +145,7 @@ public class CompletableFutureTest exten assertFalse(f.isCancelled()); assertTrue(f.isDone()); assertTrue(f.isCompletedExceptionally()); - assertTrue(f.toString().contains("[Completed exceptionally]")); + assertTrue(f.toString().matches(".*\\[.*Completed exceptionally.*\\]")); } void checkCompletedWithWrappedCFException(CompletableFuture f) { @@ -193,7 +200,7 @@ public class CompletableFutureTest exten assertTrue(f.isDone()); assertTrue(f.isCompletedExceptionally()); assertTrue(f.isCancelled()); - assertTrue(f.toString().contains("[Completed exceptionally]")); + assertTrue(f.toString().matches(".*\\[.*Completed exceptionally.*\\]")); } /** @@ -292,7 +299,7 @@ public class CompletableFutureTest exten } f = new CompletableFuture<>(); - f.completeExceptionally(ex = new CFException()); + f.completeExceptionally(new CFException()); f.obtrudeValue(v1); checkCompletedNormally(f, v1); f.obtrudeException(ex = new CFException()); @@ -329,23 +336,40 @@ public class CompletableFutureTest exten /** * toString indicates current completion state */ - public void testToString() { - CompletableFuture f; - - f = new CompletableFuture(); - assertTrue(f.toString().contains("[Not completed]")); + public void testToString_incomplete() { + CompletableFuture f = new CompletableFuture<>(); + assertTrue(f.toString().matches(".*\\[.*Not completed.*\\]")); + if (testImplementationDetails) + assertEquals(identityString(f) + "[Not completed]", + f.toString()); + } + public void testToString_normal() { + CompletableFuture f = new CompletableFuture<>(); assertTrue(f.complete("foo")); - assertTrue(f.toString().contains("[Completed normally]")); + assertTrue(f.toString().matches(".*\\[.*Completed normally.*\\]")); + if (testImplementationDetails) + assertEquals(identityString(f) + "[Completed normally]", + f.toString()); + } - f = new CompletableFuture(); + public void testToString_exception() { + CompletableFuture f = new CompletableFuture<>(); assertTrue(f.completeExceptionally(new IndexOutOfBoundsException())); - assertTrue(f.toString().contains("[Completed exceptionally]")); + assertTrue(f.toString().matches(".*\\[.*Completed exceptionally.*\\]")); + if (testImplementationDetails) + assertTrue(f.toString().startsWith( + identityString(f) + "[Completed exceptionally: ")); + } + public void testToString_cancelled() { for (boolean mayInterruptIfRunning : new boolean[] { true, false }) { - f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); assertTrue(f.cancel(mayInterruptIfRunning)); - assertTrue(f.toString().contains("[Completed exceptionally]")); + assertTrue(f.toString().matches(".*\\[.*Completed exceptionally.*\\]")); + if (testImplementationDetails) + assertTrue(f.toString().startsWith( + identityString(f) + "[Completed exceptionally: ")); } } @@ -1238,6 +1262,7 @@ public class CompletableFutureTest exten r.assertInvoked(); }} + @SuppressWarnings("FutureReturnValueIgnored") public void testRunAsync_rejectingExecutor() { CountingRejectingExecutor e = new CountingRejectingExecutor(); try { @@ -1284,6 +1309,7 @@ public class CompletableFutureTest exten r.assertInvoked(); }} + @SuppressWarnings("FutureReturnValueIgnored") public void testSupplyAsync_rejectingExecutor() { CountingRejectingExecutor e = new CountingRejectingExecutor(); try { @@ -4171,7 +4197,7 @@ public class CompletableFutureTest exten static void assertZero(CompletableFuture f) { try { f.getNow(null); - throw new AssertionFailedError("should throw"); + throw new AssertionError("should throw"); } catch (CompletionException success) { assertTrue(success.getCause() instanceof ZeroException); } @@ -4296,6 +4322,7 @@ public class CompletableFutureTest exten } /** Test long recursive chains of CompletableFutures with cascading completions */ + @SuppressWarnings("FutureReturnValueIgnored") public void testRecursiveChains() throws Throwable { for (ExecutionMode m : ExecutionMode.values()) for (boolean addDeadEnds : new boolean[] { true, false }) @@ -4320,6 +4347,7 @@ public class CompletableFutureTest exten * A single CompletableFuture with many dependents. * A demo of scalability - runtime is O(n). */ + @SuppressWarnings("FutureReturnValueIgnored") public void testManyDependents() throws Throwable { final int n = expensiveTests ? 1_000_000 : 10; final CompletableFuture head = new CompletableFuture<>(); @@ -4349,6 +4377,7 @@ public class CompletableFutureTest exten } /** ant -Dvmoptions=-Xmx8m -Djsr166.expensiveTests=true -Djsr166.tckTestClass=CompletableFutureTest tck */ + @SuppressWarnings("FutureReturnValueIgnored") public void testCoCompletionGarbageRetention() throws Throwable { final int n = expensiveTests ? 1_000_000 : 10; final CompletableFuture incomplete = new CompletableFuture<>(); @@ -4367,7 +4396,7 @@ public class CompletableFutureTest exten f.complete(null); f = new CompletableFuture<>(); - CompletableFuture.anyOf(new CompletableFuture[] { f, incomplete }); + CompletableFuture.anyOf(f, incomplete); f.complete(null); } @@ -4385,7 +4414,7 @@ public class CompletableFutureTest exten f.complete(null); f = new CompletableFuture<>(); - CompletableFuture.anyOf(new CompletableFuture[] { incomplete, f }); + CompletableFuture.anyOf(incomplete, f); f.complete(null); } }