@Override
    public V get()
            throws InterruptedException, ExecutionException {
        try {
            return get(Long.MAX_VALUE, TimeUnit.SECONDS);
        } catch (TimeoutException e) {
            throw new ExecutionException(e);
        }
    }
@Test
    public void completeDelegate_successfully_callbackBeforeGet_invokeGetOnOuter_callbacksRun() throws Exception {
        BiConsumer<String, Throwable> callback = getStringExecutionCallback();

        delegateFuture.run();
        outerFuture.whenCompleteAsync(callback, CALLER_RUNS);
        outerFuture.get();

        verify(callback, times(1)).accept(any(String.class), isNull());
        verify(callback, times(0)).accept(isNull(), any(Throwable.class));
        verifyNoMoreInteractions(callback);
    }