public @NonNull OptionalSubject failure() {
        if (this.actual == null) {
            this.failWithActual(Fact.simpleFact("expected future to not be null"));
        }
        try {
            this.actual.join();
            return this.check("cause of CompletionException thrown by join()").about(OptionalSubject.optionals()).that(Optional.empty());
        } catch (final CompletionException e) {
            return this.check("cause of CompletionException thrown by join()").about(OptionalSubject.optionals()).that(Optional.of(e.getCause()));
        }
    }
Subject for assertions about completable futures. Futures are join()ed to get
results or exceptions, and {@link CompletionException}'s cause is unwrapped to
{@link #failure()}. Any other exceptions thrown by join() are unexpected failures.
This class also does not properly handle futures where null is a successful result.

@param <T> future result type
cloud-core/src/test/java/org/incendo/cloud/truth/CompletableFutureSubject.java