926 |
|
for (boolean createIncomplete : new boolean[] { true, false }) |
927 |
|
for (Integer v1 : new Integer[] { 1, null }) |
928 |
|
{ |
929 |
+ |
final AtomicInteger ran = new AtomicInteger(0); |
930 |
|
final CompletableFuture<Integer> f = new CompletableFuture<>(); |
931 |
|
if (!createIncomplete) assertTrue(f.complete(v1)); |
932 |
|
final CompletableFuture<Integer> g = m.exceptionally |
933 |
|
(f, (Throwable t) -> { |
934 |
< |
threadFail("should not be called"); |
935 |
< |
return null; // unreached |
934 |
> |
ran.getAndIncrement(); |
935 |
> |
throw new AssertionError("should not be called"); |
936 |
|
}); |
937 |
|
if (createIncomplete) assertTrue(f.complete(v1)); |
938 |
|
|
939 |
|
checkCompletedNormally(g, v1); |
940 |
|
checkCompletedNormally(f, v1); |
941 |
+ |
assertEquals(0, ran.get()); |
942 |
|
}} |
943 |
|
|
944 |
|
/** |
4831 |
|
for (boolean createIncomplete : new boolean[] { true, false }) |
4832 |
|
for (Integer v1 : new Integer[] { 1, null }) |
4833 |
|
{ |
4834 |
+ |
final AtomicInteger ran = new AtomicInteger(0); |
4835 |
|
final CompletableFuture<Integer> f = new CompletableFuture<>(); |
4836 |
|
final DelegatedCompletionStage<Integer> d = |
4837 |
|
new DelegatedCompletionStage<Integer>(f); |
4838 |
|
if (!createIncomplete) assertTrue(f.complete(v1)); |
4839 |
|
final CompletionStage<Integer> g = d.exceptionallyAsync |
4840 |
|
((Throwable t) -> { |
4841 |
< |
threadFail("should not be called"); |
4842 |
< |
return null; // unreached |
4841 |
> |
ran.getAndIncrement(); |
4842 |
> |
throw new AssertionError("should not be called"); |
4843 |
|
}); |
4844 |
|
if (createIncomplete) assertTrue(f.complete(v1)); |
4845 |
|
|
4846 |
|
checkCompletedNormally(g.toCompletableFuture(), v1); |
4847 |
+ |
checkCompletedNormally(f, v1); |
4848 |
+ |
assertEquals(0, ran.get()); |
4849 |
|
}} |
4850 |
|
|
4851 |
|
/** |