private RequestFutureCompletionHandler() { this.future = new RequestFuture<>(); }
public static RequestFuture<Void> voidSuccess() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); return future; }
public static <T> RequestFuture<T> failure(RuntimeException e) { RequestFuture<T> future = new RequestFuture<>(); future.raise(e); return future; }
@Test(expected = IllegalArgumentException.class) public void testRuntimeExceptionInComplete() { RequestFuture<Exception> future = new RequestFuture<>(); future.complete(new RuntimeException()); }
@Test(expected = IllegalStateException.class) public void invokeRaiseAfterAlreadyFailed() { RequestFuture<Void> future = new RequestFuture<>(); future.raise(new RuntimeException()); future.raise(new RuntimeException()); }
@Test(expected = IllegalStateException.class) public void invokeCompleteAfterAlreadyFailed() { RequestFuture<Void> future = new RequestFuture<>(); future.raise(new RuntimeException()); future.complete(null); }
@Test(expected = IllegalStateException.class) public void invokeRaiseAfterAlreadyCompleted() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); future.raise(new RuntimeException()); }
@Test(expected = IllegalStateException.class) public void invokeValueAfterFailure() { RequestFuture<Void> future = new RequestFuture<>(); future.raise(new RuntimeException()); future.value(); }
@Test(expected = IllegalStateException.class) public void invokeExceptionAfterSuccess() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); future.exception(); }
@Test(expected = IllegalStateException.class) public void invokeCompleteAfterAlreadyComplete() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); future.complete(null); }
@Test public void listenerInvokedIfAddedBeforeFutureFailure() { RequestFuture<Void> future = new RequestFuture<>(); MockRequestFutureListener<Void> listener = new MockRequestFutureListener<>(); future.addListener(listener); future.raise(new RuntimeException()); assertOnFailureInvoked(listener); }
@Test public void listenerInvokedIfAddedAfterFutureFailure() { RequestFuture<Void> future = new RequestFuture<>(); future.raise(new RuntimeException()); MockRequestFutureListener<Void> listener = new MockRequestFutureListener<>(); future.addListener(listener); assertOnFailureInvoked(listener); }
@Test public void testBasicFailure() { RequestFuture<String> future = new RequestFuture<>(); RuntimeException exception = new RuntimeException(); future.raise(exception); assertTrue(future.isDone()); assertEquals(exception, future.exception()); }
@Test public void listenerInvokedIfAddedAfterFutureCompletion() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); MockRequestFutureListener<Void> listener = new MockRequestFutureListener<>(); future.addListener(listener); assertOnSuccessInvoked(listener); }
@Test public void listenerInvokedIfAddedBeforeFutureCompletion() { RequestFuture<Void> future = new RequestFuture<>(); MockRequestFutureListener<Void> listener = new MockRequestFutureListener<>(); future.addListener(listener); future.complete(null); assertOnSuccessInvoked(listener); }
@Test public void listenersInvokedIfAddedBeforeAndAfterFailure() { RequestFuture<Void> future = new RequestFuture<>(); MockRequestFutureListener<Void> beforeListener = new MockRequestFutureListener<>(); future.addListener(beforeListener); future.raise(new RuntimeException()); MockRequestFutureListener<Void> afterListener = new MockRequestFutureListener<>(); future.addListener(afterListener); assertOnFailureInvoked(beforeListener); assertOnFailureInvoked(afterListener); }
@Test public void testBasicCompletion() { RequestFuture<String> future = new RequestFuture<>(); String value = "foo"; future.complete(value); assertTrue(future.isDone()); assertEquals(value, future.value()); }
@Test public void testVoidFuture() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); assertTrue(future.isDone()); assertNull(future.value()); }
@Test public void listenersInvokedIfAddedBeforeAndAfterCompletion() { RequestFuture<Void> future = new RequestFuture<>(); MockRequestFutureListener<Void> beforeListener = new MockRequestFutureListener<>(); future.addListener(beforeListener); future.complete(null); MockRequestFutureListener<Void> afterListener = new MockRequestFutureListener<>(); future.addListener(afterListener); assertOnSuccessInvoked(beforeListener); assertOnSuccessInvoked(afterListener); }
@Test public void testComposeSuccessCase() { RequestFuture<String> future = new RequestFuture<>(); RequestFuture<Integer> composed = future.compose(new RequestFutureAdapter<String, Integer>() { @Override public void onSuccess(String value, RequestFuture<Integer> future) { future.complete(value.length()); } }); future.complete("hello"); assertTrue(composed.isDone()); assertTrue(composed.succeeded()); assertEquals(5, (int) composed.value()); }