package org.jooby.spec;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;
import org.junit.After;
public class RouteSpecTest {
public static interface Verifier {
void verify();
}
public static class ParamItr implements Verifier {
Iterator<RouteParam> it;
public ParamItr(final List<RouteParam> source) {
it = source.iterator();
}
public ParamItr next(final Consumer<RouteParam> callback) {
callback.accept(it.next());
return this;
}
@Override
public void verify() {
if (it.hasNext()) {
fail(it.next().toString());
}
}
}
public static class RouteSpecItr implements Verifier {
Iterator<RouteSpec> it;
public RouteSpecItr(final List<RouteSpec> source) {
it = source.iterator();
}
public RouteSpecItr next(final Consumer<RouteSpec> callback) {
callback.accept(it.next());
return this;
}
@Override
public void verify() {
if (it.hasNext()) {
fail(it.next().toString());
}
}
}
private List<Verifier> routes = new ArrayList<>();
private List<Verifier> params = new ArrayList<>();
@After
public void checkItr() {
params.forEach(Verifier::verify);
params.clear();
//
routes.forEach(Verifier::verify);
routes.clear();
}
public RouteSpecItr routes(final List<RouteSpec> source) {
RouteSpecItr itr = new RouteSpecItr(source);
routes.add(itr);
return itr;
}
public ParamItr params(final List<RouteParam> source) {
ParamItr itr = new ParamItr(source);
params.add(itr);
return itr;
}
}