Skip to content

Commit

Permalink
Future tests improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
vietj committed Feb 20, 2017
1 parent 8a0a1e5 commit cfef3de
Showing 1 changed file with 86 additions and 63 deletions.
149 changes: 86 additions & 63 deletions src/test/java/io/vertx/test/core/FutureTest.java
Expand Up @@ -515,23 +515,48 @@ public void testCompositeFutureToList() {
} }


@Test @Test
public void testComposeSucceed() { public void testComposeSuccessToSuccess() {
Future<String> f1 = Future.future(); Future<String> f1 = Future.future();
Future<Integer> f2 = Future.future(); Future<Integer> f2 = Future.future();
Checker<Integer> checker = new Checker<>(f2); Checker<Integer> checker = new Checker<>(f2);
f1.compose(string -> f2.complete(string.length()), f2); f1.compose(string -> f2.complete(string.length()), f2);
checker.assertNotCompleted();
f1.complete("abcdef"); f1.complete("abcdef");
checker.assertSucceeded(6); checker.assertSucceeded(6);


AtomicReference<String> ref = new AtomicReference<>();
Future<Integer> c = Future.future();
Future<String> f3 = Future.future(); Future<String> f3 = Future.future();
Future<Integer> f4 = f3.compose(string -> Future.succeededFuture(string.length())); Future<Integer> f4 = f3.compose(string -> {
ref.set(string);
return c;
});
checker = new Checker<>(f4); checker = new Checker<>(f4);
f3.complete("abcdef"); f3.complete("abcdef");
checker.assertNotCompleted();
assertEquals("abcdef", ref.get());
c.complete(6);
checker.assertSucceeded(6); checker.assertSucceeded(6);
} }


@Test @Test
public void testComposeFail() { public void testComposeSuccessToFailure() {
Throwable cause = new Throwable();
AtomicReference<String> ref = new AtomicReference<>();
Future<Integer> c = Future.future();
Future<String> f3 = Future.future();
Future<Integer> f4 = f3.compose(string -> {
ref.set(string);
return c;
});
Checker<Integer> checker = new Checker<>(f4);
f3.complete("abcdef");
c.fail(cause);
checker.assertFailed(cause);
}

@Test
public void testComposeFailure() {
Exception cause = new Exception(); Exception cause = new Exception();


Future<String> f1 = Future.future(); Future<String> f1 = Future.future();
Expand All @@ -549,7 +574,7 @@ public void testComposeFail() {
} }


@Test @Test
public void testComposeHandlerFail() { public void testComposeFails() {
RuntimeException cause = new RuntimeException(); RuntimeException cause = new RuntimeException();


Future<String> f1 = Future.future(); Future<String> f1 = Future.future();
Expand All @@ -567,7 +592,7 @@ public void testComposeHandlerFail() {
} }


@Test @Test
public void testComposeHandlerFailAfterCompletion() { public void testComposeFailsAfterCompletion() {
Future<String> f1 = Future.future(); Future<String> f1 = Future.future();
Future<Integer> f2 = Future.future(); Future<Integer> f2 = Future.future();
Checker<Integer> checker = new Checker<>(f2); Checker<Integer> checker = new Checker<>(f2);
Expand All @@ -586,26 +611,28 @@ public void testComposeHandlerFailAfterCompletion() {
} }


@Test @Test
public void testMapSucceeded() { public void testMapSuccess() {
Future<Integer> fut = Future.future(); Future<Integer> fut = Future.future();
Future<String> mapped = fut.map(Object::toString); Future<String> mapped = fut.map(Object::toString);
Checker<String> checker = new Checker<>(mapped); Checker<String> checker = new Checker<>(mapped);
checker.assertNotCompleted();
fut.complete(3); fut.complete(3);
checker.assertSucceeded("3"); checker.assertSucceeded("3");
} }


@Test @Test
public void testMapFailed() { public void testMapFailure() {
Throwable cause = new Throwable(); Throwable cause = new Throwable();
Future<Integer> fut = Future.future(); Future<Integer> fut = Future.future();
Future<String> mapped = fut.map(Object::toString); Future<String> mapped = fut.map(Object::toString);
Checker<String> checker = new Checker<>(mapped); Checker<String> checker = new Checker<>(mapped);
checker.assertNotCompleted();
fut.fail(cause); fut.fail(cause);
checker.assertFailed(cause); checker.assertFailed(cause);
} }


@Test @Test
public void testMapperFailure() { public void testMapFails() {
RuntimeException cause = new RuntimeException(); RuntimeException cause = new RuntimeException();
Future<Integer> fut = Future.future(); Future<Integer> fut = Future.future();
Future<Object> mapped = fut.map(i -> { Future<Object> mapped = fut.map(i -> {
Expand All @@ -616,6 +643,57 @@ public void testMapperFailure() {
checker.assertFailed(cause); checker.assertFailed(cause);
} }



@Test
public void testRecoverSuccessWithSuccess() {
AtomicBoolean called = new AtomicBoolean();
Future<String> f = Future.future();
Future<String> r = f.recover(t -> {
called.set(true);
throw new AssertionError();
});
Checker<String> checker = new Checker<>(r);
checker.assertNotCompleted();
f.complete("yeah");
assertTrue(r.succeeded());
checker.assertSucceeded("yeah");
assertFalse(called.get());
}

@Test
public void testRecoverFailureWithSuccess() {
Future<String> f = Future.future();
Future<String> r = f.recover(t -> Future.succeededFuture(t.getMessage()));
Checker<String> checker = new Checker<>(r);
checker.assertNotCompleted();
f.fail("recovered");
checker.assertSucceeded("recovered");
}

@Test
public void testRecoverFailureWithFailure() {
Throwable cause = new Throwable();
Future<String> f = Future.future();
Future<String> r = f.recover(t -> Future.failedFuture(cause));
Checker<String> checker = new Checker<>(r);
checker.assertNotCompleted();
f.fail("recovered");
checker.assertFailed(cause);
}

@Test
public void testRecoverFailureFails() {
RuntimeException cause = new RuntimeException("throw");
Future<String> f = Future.future();
Future<String> r = f.recover(t -> {
throw cause;
});
Checker<String> checker = new Checker<>(r);
checker.assertNotCompleted();
f.fail("recovered");
checker.assertFailed(cause);
}

@Test @Test
public void testDefaultCompleter() { public void testDefaultCompleter() {
AsyncResult<Object> succeededAsyncResult = new AsyncResult<Object>() { AsyncResult<Object> succeededAsyncResult = new AsyncResult<Object>() {
Expand Down Expand Up @@ -724,32 +802,6 @@ Throwable assertFailed() {
} }
} }


/*
private <T> void assertSucceeded(Future<T> future, T expected) {
assertTrue(future.isComplete());
assertTrue(future.succeeded());
assertFalse(future.failed());
assertNull(future.cause());
assertEquals(expected, future.result());
}
private <T> void assertFailed(Future<T> future, Throwable expected) {
assertTrue(future.isComplete());
assertFalse(future.succeeded());
assertTrue(future.failed());
assertEquals(expected, future.cause());
assertEquals(null, future.result());
}
private <T> void assertNotCompleted(Future<T> future) {
assertFalse(future.isComplete());
assertFalse(future.succeeded());
assertFalse(future.failed());
assertNull(future.cause());
assertNull(future.result());
}
*/

@Test @Test
public void testUncompletedAsyncResultMap() { public void testUncompletedAsyncResultMap() {
Future<String> f = Future.future(); Future<String> f = Future.future();
Expand Down Expand Up @@ -789,35 +841,6 @@ public void testFailedAsyncResultMap() {
assertSame(cause, map2.cause()); assertSame(cause, map2.cause());
} }


@Test
public void testSucceededFutureRecoverWith() {
Future<String> f = Future.future();
Future<String> r = f.recover(t -> Future.succeededFuture(t.getMessage()));
f.complete("yeah");
assertTrue(r.succeeded());
assertEquals(r.result(), "yeah");
}

@Test
public void testFailedFutureRecoverWith() {
Future<String> f = Future.future();
Future<String> r = f.recover(t -> Future.succeededFuture(t.getMessage()));
f.fail("recovered");
assertTrue(r.succeeded());
assertEquals(r.result(), "recovered");
}

@Test
public void testFailedMapperFutureRecoverWith() {
Future<String> f = Future.future();
Future<String> r = f.recover(t -> {
throw new RuntimeException("throw");
});
f.fail("recovered");
assertTrue(r.failed());
assertEquals(r.cause().getMessage(), "throw");
}

private <T> AsyncResult<T> asyncResult(Future<T> fut) { private <T> AsyncResult<T> asyncResult(Future<T> fut) {
return new AsyncResult<T>() { return new AsyncResult<T>() {
@Override @Override
Expand Down

0 comments on commit cfef3de

Please sign in to comment.