@Override public <T> ListenableFuture<T> submit(Runnable task, T result) { ArgumentVerifier.assertNotNull(task, "task"); try { task.run(); return FutureUtils.immediateResultFuture(result); } catch (Throwable t) { return FutureUtils.immediateFailureFuture(t); } }
@Override public <T> ListenableFuture<T> submit(Callable<T> task) { ArgumentVerifier.assertNotNull(task, "task"); try { T result = task.call(); return FutureUtils.immediateResultFuture(result); } catch (Throwable t) { return FutureUtils.immediateFailureFuture(t); } } }
@Override public <T> ListenableFuture<T> submit(Runnable task, T result) { ArgumentVerifier.assertNotNull(task, "task"); try { task.run(); return FutureUtils.immediateResultFuture(result); } catch (Throwable t) { return FutureUtils.immediateFailureFuture(t); } }
@Override public <T> ListenableFuture<T> submit(Callable<T> task) { ArgumentVerifier.assertNotNull(task, "task"); try { T result = task.call(); return FutureUtils.immediateResultFuture(result); } catch (Throwable t) { return FutureUtils.immediateFailureFuture(t); } } }
@Test public void immediateResultFutureAddCallbackTest() { Object result = new Object(); ListenableFuture<?> testFuture = FutureUtils.immediateResultFuture(result); ImmediateListenableFutureTest.resultAddCallbackTest(testFuture, result); }
@Test public void immediateResultFutureAddListenerTest() { ListenableFuture<?> testFuture = FutureUtils.immediateResultFuture(null); ImmediateListenableFutureTest.addListenerTest(testFuture); }
@Test public void immediateResultFutureCancelTest() { ListenableFuture<?> testFuture = FutureUtils.immediateResultFuture(null); ImmediateListenableFutureTest.cancelTest(testFuture); }
@Test public void alreadyDoneFutureWatchTest() { ListenableFuture<Object> future = FutureUtils.immediateResultFuture(null); watchdog.watch(future, TIMEOUT); assertTrue(watchdog.cachedDogs.isEmpty()); }
@Test public void alreadyDoneFutureWatchTest() { ListenableFuture<?> future = FutureUtils.immediateResultFuture(null); watchdog.watch(future); assertTrue(watchdog.futures.isEmpty()); }
@Test public void flatMapFailureIgnoredFailureTypeTest() { ListenableFuture<?> lf = makeListenableFutureFactory().makeWithFailure(new Exception()); AtomicBoolean mapped = new AtomicBoolean(false); ListenableFuture<?> finalLF = lf.flatMapFailure(RuntimeException.class, (t) -> { mapped.set(true); return FutureUtils.immediateResultFuture(null); }); assertFalse(mapped.get()); assertTrue(lf == finalLF); }
@Test public void flatMapFailureIgnoredTest() { ListenableFuture<Object> lf = makeListenableFutureFactory().makeWithResult(null); AtomicBoolean mapped = new AtomicBoolean(false); ListenableFuture<Object> finalLF = lf.flatMapFailure(Throwable.class, (t) -> { mapped.set(true); return FutureUtils.immediateResultFuture(new Object()); }); assertFalse(mapped.get()); assertTrue(lf == finalLF); }
@Test public void immediateResultFutureNullResultTest() throws InterruptedException, ExecutionException, TimeoutException { ListenableFuture<?> testFuture = FutureUtils.immediateResultFuture(null); ImmediateListenableFutureTest.resultTest(testFuture, null); assertTrue(testFuture == ImmediateResultListenableFuture.NULL_RESULT); }
@Test public void executeWhileTest() throws InterruptedException, ExecutionException { AtomicInteger ai = new AtomicInteger(); ListenableFuture<Integer> f = FutureUtils.executeWhile(() -> FutureUtils.immediateResultFuture(ai.getAndIncrement()), (i) -> i < 10); assertTrue(f.isDone()); assertEquals(10, f.get().intValue()); }
@Test public void getFlatMappedRunningStackTraceTest() { ListenableFuture<Object> mappedFuture = slf.flatMap((o) -> FutureUtils.immediateResultFuture(o)) .flatMap((o) -> FutureUtils.immediateResultFuture(null)); assertNull(mappedFuture.getRunningStackTrace()); slf.setRunningThread(Thread.currentThread()); StackTraceElement[] stack = mappedFuture.getRunningStackTrace(); assertEquals(this.getClass().getName(), stack[4].getClassName()); slf.setResult(null); assertNull(mappedFuture.getRunningStackTrace()); }
@Test public void flatMapAlreadyDoneExecutionExceptionTest() throws InterruptedException { Exception failure = new Exception(); ListenableFuture<?> lf = makeListenableFutureFactory().makeWithFailure(failure); AtomicBoolean mapperRan = new AtomicBoolean(false); ListenableFuture<Void> mappedLF = lf.flatMap((o) -> { mapperRan.set(true); return FutureUtils.immediateResultFuture(null); }); assertTrue(mappedLF.isDone()); verifyFutureFailure(mappedLF, failure); }
@Test public void watchListenableFutureWithExtendedResultTest() { ListenableFuture<DoNothingRunnable> lf = FutureUtils.immediateResultFuture(DoNothingRunnable.instance()); ListenableFuture<Runnable> lfResult = poller.watch(lf); assertTrue(((ListenableFuture<?>)lfResult) == lf); }
@Test public void flatMapAlreadyCanceledTest() { ListenableFuture<?> lf = makeListenableFutureFactory().makeCanceled(); AtomicBoolean mapperRan = new AtomicBoolean(false); ListenableFuture<Void> mappedLF = lf.flatMap((o) -> { mapperRan.set(true); return FutureUtils.immediateResultFuture(null); }); assertTrue(mappedLF.isDone()); assertTrue(mappedLF.isCancelled()); }
@Test public void resultTest() throws InterruptedException, ExecutionException { Object result = new Object(); ListenableFutureAdapterTask<Object> adapter = new ListenableFutureAdapterTask<>(FutureUtils.immediateResultFuture(result)); adapter.run(); assertTrue(adapter.isDone()); assertTrue(result == adapter.get()); }
@Test public void scheduleWhileAlreadyDoneWithFinalResultTest() throws Exception { TestableScheduler scheduler = new TestableScheduler(); Object result = new Object(); ListenableFuture<Object> f = FutureUtils.scheduleWhile(scheduler, 2, FutureUtils.immediateResultFuture(result), () -> result, (o) -> false); assertTrue(f.isDone()); assertTrue(result == f.get()); }
@Test public void flatMapCancelationExceptionMessageAlreadyDoneTest() throws InterruptedException, TimeoutException { String msg = StringUtils.makeRandomString(5); SettableListenableFuture<Void> slf = new CancelMessageTestSettableListenableFuture(msg); slf.cancel(false); ListenableFuture<Void> mappedFuture = slf.flatMap((v) -> FutureUtils.immediateResultFuture(null)); verifyCancelationExceptionMessageOnGet(msg, mappedFuture); verifyCancelationExceptionMessageInCallback(msg, mappedFuture); }