package io.vertx.ext.unit; import io.vertx.core.Handler; import io.vertx.ext.unit.report.TestResult; import io.vertx.ext.unit.report.TestSuiteReport; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; /** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ class TestReporter implements Handler<TestSuiteReport> { private final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<String> name = new AtomicReference<>(); final List<Throwable> exceptions = Collections.synchronizedList(new ArrayList<>()); final List<TestResult> results = Collections.synchronizedList(new ArrayList<>()); @Override public void handle(TestSuiteReport report) { name.set(report.name()); report.handler(testExec -> { testExec.endHandler(results::add); }); report.exceptionHandler(err -> { exceptions.add(err); }); report.endHandler(done -> { latch.countDown(); }); } void await() { try { latch.await(10, TimeUnit.SECONDS); } catch (InterruptedException e) { throw new AssertionError(e); } } boolean completed() { return latch.getCount() == 0; } }