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.95 by jsr166, Wed Jun 25 15:32:10 2014 UTC vs.
Revision 1.99 by jsr166, Wed Jan 7 07:59:20 2015 UTC

# Line 5 | Line 5
5   * http://creativecommons.org/publicdomain/zero/1.0/
6   */
7  
8 < import junit.framework.*;
8 > import static java.util.concurrent.TimeUnit.MILLISECONDS;
9 > import static java.util.concurrent.TimeUnit.SECONDS;
10 >
11 > import java.util.ArrayList;
12 > import java.util.List;
13 > import java.util.Objects;
14   import java.util.concurrent.Callable;
10 import java.util.concurrent.Executor;
11 import java.util.concurrent.ExecutorService;
12 import java.util.concurrent.Executors;
15   import java.util.concurrent.CancellationException;
14 import java.util.concurrent.CountDownLatch;
15 import java.util.concurrent.ExecutionException;
16 import java.util.concurrent.Future;
16   import java.util.concurrent.CompletableFuture;
17   import java.util.concurrent.CompletionException;
18   import java.util.concurrent.CompletionStage;
19 + import java.util.concurrent.ExecutionException;
20 + import java.util.concurrent.Executor;
21   import java.util.concurrent.ForkJoinPool;
22   import java.util.concurrent.ForkJoinTask;
23   import java.util.concurrent.TimeoutException;
24   import java.util.concurrent.atomic.AtomicInteger;
24 import static java.util.concurrent.TimeUnit.MILLISECONDS;
25 import static java.util.concurrent.TimeUnit.SECONDS;
26 import java.util.*;
27 import java.util.function.Supplier;
28 import java.util.function.Consumer;
25   import java.util.function.BiConsumer;
30 import java.util.function.Function;
26   import java.util.function.BiFunction;
27 + import java.util.function.Consumer;
28 + import java.util.function.Function;
29 + import java.util.function.Supplier;
30 +
31 + import junit.framework.Test;
32 + import junit.framework.TestSuite;
33  
34   public class CompletableFutureTest extends JSR166TestCase {
35  
# Line 584 | Line 585 | public class CompletableFutureTest exten
585          }
586      }
587  
588 +    static final boolean defaultExecutorIsCommonPool
589 +        = ForkJoinPool.getCommonPoolParallelism() > 1;
590 +
591      /**
592       * Permits the testing of parallel code for the 3 different
593       * execution modes without copy/pasting all the test methods.
# Line 665 | Line 669 | public class CompletableFutureTest exten
669  
670          ASYNC {
671              public void checkExecutionMode() {
672 <                assertSame(ForkJoinPool.commonPool(),
673 <                           ForkJoinTask.getPool());
672 >                assertEquals(defaultExecutorIsCommonPool,
673 >                             (ForkJoinPool.commonPool() == ForkJoinTask.getPool()));
674              }
675              public CompletableFuture<Void> runAsync(Runnable a) {
676                  return CompletableFuture.runAsync(a);
# Line 2990 | Line 2994 | public class CompletableFutureTest exten
2994          checkCancelled(f);
2995      }}
2996  
2997 +    /**
2998 +     * thenCompose result completes exceptionally if the result of the action does
2999 +     */
3000 +    public void testThenCompose_actionReturnsFailingFuture() {
3001 +        for (ExecutionMode m : ExecutionMode.values())
3002 +        for (int order = 0; order < 6; order++)
3003 +        for (Integer v1 : new Integer[] { 1, null })
3004 +    {
3005 +        final CFException ex = new CFException();
3006 +        final CompletableFuture<Integer> f = new CompletableFuture<>();
3007 +        final CompletableFuture<Integer> g = new CompletableFuture<>();
3008 +        final CompletableFuture<Integer> h;
3009 +        // Test all permutations of orders
3010 +        switch (order) {
3011 +        case 0:
3012 +            assertTrue(f.complete(v1));
3013 +            assertTrue(g.completeExceptionally(ex));
3014 +            h = m.thenCompose(f, (x -> g));
3015 +            break;
3016 +        case 1:
3017 +            assertTrue(f.complete(v1));
3018 +            h = m.thenCompose(f, (x -> g));
3019 +            assertTrue(g.completeExceptionally(ex));
3020 +            break;
3021 +        case 2:
3022 +            assertTrue(g.completeExceptionally(ex));
3023 +            assertTrue(f.complete(v1));
3024 +            h = m.thenCompose(f, (x -> g));
3025 +            break;
3026 +        case 3:
3027 +            assertTrue(g.completeExceptionally(ex));
3028 +            h = m.thenCompose(f, (x -> g));
3029 +            assertTrue(f.complete(v1));
3030 +            break;
3031 +        case 4:
3032 +            h = m.thenCompose(f, (x -> g));
3033 +            assertTrue(f.complete(v1));
3034 +            assertTrue(g.completeExceptionally(ex));
3035 +            break;
3036 +        case 5:
3037 +            h = m.thenCompose(f, (x -> g));
3038 +            assertTrue(f.complete(v1));
3039 +            assertTrue(g.completeExceptionally(ex));
3040 +            break;
3041 +        default: throw new AssertionError();
3042 +        }
3043 +
3044 +        checkCompletedExceptionally(g, ex);
3045 +        checkCompletedWithWrappedException(h, ex);
3046 +        checkCompletedNormally(f, v1);
3047 +    }}
3048 +
3049      // other static methods
3050  
3051      /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines