ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/jtreg/util/concurrent/CompletableFuture/ThenComposeAsyncTest.java
Revision: 1.2
Committed: Mon Sep 14 16:47:42 2015 UTC (8 years, 8 months ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -1 lines
Log Message:
whitespace

File Contents

# Content
1 /*
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 import org.testng.Assert;
25 import org.testng.annotations.Test;
26
27 import java.util.concurrent.CompletableFuture;
28 import java.util.concurrent.CountDownLatch;
29
30 /**
31 * @test
32 * @bug 8029164
33 * @run testng ThenComposeAsyncTest
34 * @run testng/othervm -Djava.util.concurrent.ForkJoinPool.common.parallelism=0 ThenComposeAsyncTest
35 * @summary Test that CompletableFuture.thenCompose works correctly if the
36 * composing task is complete before composition
37 */
38 @Test
39 public class ThenComposeAsyncTest {
40
41 public void testThenComposeAsync() throws Exception {
42 // Composing CompletableFuture is complete
43 CompletableFuture<String> cf1 = CompletableFuture.completedFuture("one");
44
45 // Composing function returns a CompletableFuture executed asynchronously
46 CountDownLatch cdl = new CountDownLatch(1);
47 CompletableFuture<String> cf2 = cf1.thenCompose(str -> CompletableFuture.supplyAsync(() -> {
48 while (true) {
49 try {
50 cdl.await();
51 break;
52 }
53 catch (InterruptedException e) {
54 }
55 }
56 return str + ", two";
57 }));
58
59 // Ensure returned CompletableFuture completes after call to thenCompose
60 // This guarantees that any premature internal completion will be
61 // detected
62 cdl.countDown();
63
64 String val = cf2.get();
65 Assert.assertNotNull(val);
66 Assert.assertEquals(val, "one, two");
67 }
68 }