### Question:
DefaultCompletableAsyncCompletion implements CompletableAsyncCompletion { @Override public boolean isDone() { return future.isDone(); } DefaultCompletableAsyncCompletion();   DefaultCompletableAsyncCompletion(CompletableFuture<Void> future); @Override boolean complete(); @Override boolean completeExceptionally(Throwable ex); @Override boolean cancel(); @Override boolean isDone(); @Override boolean isCompletedExceptionally(); @Override boolean isCancelled(); @Override void join(); @Override void join(long timeout, TimeUnit unit); @Override AsyncResult<U> then(Supplier<? extends AsyncResult<U>> fn); @Override AsyncResult<U> thenSchedule(Vertx vertx, Supplier<? extends AsyncResult<U>> fn); @Override AsyncCompletion thenCompose(Supplier<? extends AsyncCompletion> fn); @Override AsyncCompletion thenRun(Runnable action); @Override AsyncCompletion thenScheduleRun(Vertx vertx, Runnable runnable); @Override AsyncCompletion thenScheduleBlockingRun(Vertx vertx, Runnable runnable); @Override AsyncCompletion thenScheduleBlockingRun(WorkerExecutor executor, Runnable runnable); @Override AsyncResult<U> thenSupply(Supplier<? extends U> supplier); @Override AsyncResult<U> thenSupply(Vertx vertx, Supplier<? extends U> supplier); @Override AsyncCompletion thenConsume(AsyncResult<? extends U> other, Consumer<? super U> consumer); @Override AsyncResult<V> thenApply(AsyncResult<? extends U> other, Function<? super U, ? extends V> fn); @Override AsyncCompletion thenCombine(AsyncCompletion other); @Override AsyncCompletion exceptionally(Consumer<? super Throwable> consumer); @Override AsyncCompletion whenComplete(Consumer<? super Throwable> consumer); @Override AsyncResult<U> handle(Function<? super Throwable, ? extends U> fn); @Override AsyncCompletion accept(Consumer<? super Throwable> consumer);  }### Answer:
@Test void shouldReturnValueFromCompletedResult() { AsyncCompletion completion = AsyncCompletion.completed(); assertThat(completion.isDone()).isTrue(); }
@Test void shouldReturnExceptionFromExceptionallyCompletedResult() throws Exception { Exception exception = new RuntimeException(); AsyncCompletion completion = AsyncCompletion.exceptional(exception); assertThat(completion.isDone()).isTrue(); assertCompletedWithException(completion, exception); }