ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CompletableFutureTest.java
(Generate patch)

Comparing jsr166/src/test/tck/CompletableFutureTest.java (file contents):
Revision 1.98 by jsr166, Wed Dec 31 19:05:42 2014 UTC vs.
Revision 1.101 by jsr166, Sun Feb 22 04:34:44 2015 UTC

# Line 273 | Line 273 | public class CompletableFutureTest exten
273      {
274          CompletableFuture<Integer> f = new CompletableFuture<>();
275          checkIncomplete(f);
276 <        assertTrue(f.cancel(true));
277 <        assertTrue(f.cancel(true));
276 >        assertTrue(f.cancel(mayInterruptIfRunning));
277 >        assertTrue(f.cancel(mayInterruptIfRunning));
278 >        assertTrue(f.cancel(!mayInterruptIfRunning));
279          checkCancelled(f);
280      }}
281  
# Line 546 | Line 547 | public class CompletableFutureTest exten
547          }
548      }
549  
549
550      class CompletableFutureInc extends CheckedIntegerAction
551          implements Function<Integer, CompletableFuture<Integer>>
552      {
# Line 907 | Line 907 | public class CompletableFutureTest exten
907  
908      public void testExceptionally_exceptionalCompletionActionFailed() {
909          for (boolean createIncomplete : new boolean[] { true, false })
910        for (Integer v1 : new Integer[] { 1, null })
910      {
911          final AtomicInteger a = new AtomicInteger(0);
912          final CFException ex1 = new CFException();
# Line 961 | Line 960 | public class CompletableFutureTest exten
960      public void testWhenComplete_exceptionalCompletion() {
961          for (ExecutionMode m : ExecutionMode.values())
962          for (boolean createIncomplete : new boolean[] { true, false })
964        for (Integer v1 : new Integer[] { 1, null })
963      {
964          final AtomicInteger a = new AtomicInteger(0);
965          final CFException ex = new CFException();
# Line 1046 | Line 1044 | public class CompletableFutureTest exten
1044      public void testWhenComplete_actionFailedSourceFailed() {
1045          for (boolean createIncomplete : new boolean[] { true, false })
1046          for (ExecutionMode m : ExecutionMode.values())
1049        for (Integer v1 : new Integer[] { 1, null })
1047      {
1048          final AtomicInteger a = new AtomicInteger(0);
1049          final CFException ex1 = new CFException();
# Line 2994 | Line 2991 | public class CompletableFutureTest exten
2991          checkCancelled(f);
2992      }}
2993  
2994 +    /**
2995 +     * thenCompose result completes exceptionally if the result of the action does
2996 +     */
2997 +    public void testThenCompose_actionReturnsFailingFuture() {
2998 +        for (ExecutionMode m : ExecutionMode.values())
2999 +        for (int order = 0; order < 6; order++)
3000 +        for (Integer v1 : new Integer[] { 1, null })
3001 +    {
3002 +        final CFException ex = new CFException();
3003 +        final CompletableFuture<Integer> f = new CompletableFuture<>();
3004 +        final CompletableFuture<Integer> g = new CompletableFuture<>();
3005 +        final CompletableFuture<Integer> h;
3006 +        // Test all permutations of orders
3007 +        switch (order) {
3008 +        case 0:
3009 +            assertTrue(f.complete(v1));
3010 +            assertTrue(g.completeExceptionally(ex));
3011 +            h = m.thenCompose(f, (x -> g));
3012 +            break;
3013 +        case 1:
3014 +            assertTrue(f.complete(v1));
3015 +            h = m.thenCompose(f, (x -> g));
3016 +            assertTrue(g.completeExceptionally(ex));
3017 +            break;
3018 +        case 2:
3019 +            assertTrue(g.completeExceptionally(ex));
3020 +            assertTrue(f.complete(v1));
3021 +            h = m.thenCompose(f, (x -> g));
3022 +            break;
3023 +        case 3:
3024 +            assertTrue(g.completeExceptionally(ex));
3025 +            h = m.thenCompose(f, (x -> g));
3026 +            assertTrue(f.complete(v1));
3027 +            break;
3028 +        case 4:
3029 +            h = m.thenCompose(f, (x -> g));
3030 +            assertTrue(f.complete(v1));
3031 +            assertTrue(g.completeExceptionally(ex));
3032 +            break;
3033 +        case 5:
3034 +            h = m.thenCompose(f, (x -> g));
3035 +            assertTrue(f.complete(v1));
3036 +            assertTrue(g.completeExceptionally(ex));
3037 +            break;
3038 +        default: throw new AssertionError();
3039 +        }
3040 +
3041 +        checkCompletedExceptionally(g, ex);
3042 +        checkCompletedWithWrappedException(h, ex);
3043 +        checkCompletedNormally(f, v1);
3044 +    }}
3045 +
3046      // other static methods
3047  
3048      /**
# Line 3161 | Line 3210 | public class CompletableFutureTest exten
3210          CompletableFuture<Integer> f = new CompletableFuture<>();
3211          CompletableFuture<Integer> g = new CompletableFuture<>();
3212          CompletableFuture<Integer> nullFuture = (CompletableFuture<Integer>)null;
3164        CompletableFuture<?> h;
3213          ThreadExecutor exec = new ThreadExecutor();
3214  
3215          Runnable[] throwingActions = {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines