@Override public void setDependency(final Cancellable dependency) { Args.notNull(dependency, "dependency"); if (isDone()) { dependency.cancel(); } else { dependencyRef.set(dependency); } }
@Override public void setDependency(final Cancellable dependency) { Args.notNull(dependency, "dependency"); if (isDone()) { dependency.cancel(); } else { dependencyRef.set(dependency); } }
@Test public void testCompleted() throws Exception { final ComplexFuture<Object> future = new ComplexFuture<>(null); final Future<Object> dependency1 = new BasicFuture<>(null); future.setDependency(dependency1); Assert.assertFalse(future.isDone()); future.completed(Boolean.TRUE); Assert.assertThat(future.isCancelled(), CoreMatchers.is(false)); Assert.assertThat(dependency1.isCancelled(), CoreMatchers.is(false)); final Future<Object> dependency2 = new BasicFuture<>(null); future.setDependency(dependency2); Assert.assertThat(dependency2.isCancelled(), CoreMatchers.is(true)); }
@Test public void testCancelled() throws Exception { final ComplexFuture<Object> future = new ComplexFuture<>(null); final Future<Object> dependency1 = new BasicFuture<>(null); future.setDependency(dependency1); Assert.assertFalse(future.isDone()); future.cancel(); Assert.assertThat(future.isCancelled(), CoreMatchers.is(true)); Assert.assertThat(dependency1.isCancelled(), CoreMatchers.is(true)); final Future<Object> dependency2 = new BasicFuture<>(null); future.setDependency(dependency2); Assert.assertThat(dependency2.isCancelled(), CoreMatchers.is(true)); }
@Test public void testCancelledWithCallback() throws Exception { final ComplexFuture<Object> future = new ComplexFuture<>(null); final Future<Object> dependency1 = new BasicFuture<>(new FutureCallback<Object>() { @Override public void completed(final Object result) { } @Override public void failed(final Exception ex) { future.failed(ex); } @Override public void cancelled() { future.cancel(); } }); future.setDependency(dependency1); Assert.assertFalse(future.isDone()); future.cancel(); Assert.assertThat(future.isCancelled(), CoreMatchers.is(true)); Assert.assertThat(dependency1.isCancelled(), CoreMatchers.is(true)); final Future<Object> dependency2 = new BasicFuture<>(null); future.setDependency(dependency2); Assert.assertThat(dependency2.isCancelled(), CoreMatchers.is(true)); }