package io.vertx.ext.unit; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; /** * A completion object that emits completion notifications either <i>succeeded</i> or <i>failed</i>. * * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ @VertxGen public interface Completion<T> { /** * Completes the future upon completion, otherwise fails it. * * @param future the future to resolve */ void resolve(Future<T> future); /** * @return true if this completion is completed */ boolean isCompleted(); /** * @return true if this completion is completed and succeeded */ boolean isSucceeded(); /** * @return true if the this completion is completed and failed */ boolean isFailed(); /** * Completion handler to receive a completion signal when this completions completes. * * @param completionHandler the completion handler */ void handler(Handler<AsyncResult<T>> completionHandler); /** * Cause the current thread to wait until this completion completes.<p/> * * If the current thread is interrupted, an exception will be thrown. */ void await(); /** * Cause the current thread to wait until this completion completes with a configurable timeout.<p/> * * If completion times out or the current thread is interrupted, an exception will be thrown. * * @param timeoutMillis the timeout in milliseconds */ void await(long timeoutMillis); /** * Cause the current thread to wait until this completion completes and succeeds.<p/> * * If the current thread is interrupted or the suite fails, an exception will be thrown. */ void awaitSuccess(); /** * Cause the current thread to wait until this completion completes and succeeds with a configurable timeout.<p/> * * If completion times out or the current thread is interrupted or the suite fails, an exception will be thrown. * * @param timeoutMillis the timeout in milliseconds */ void awaitSuccess(long timeoutMillis); }