package org.testory.plumbing;
import org.testory.proxy.Handler;
import org.testory.proxy.Invocation;
import org.testory.proxy.Proxer;
import org.testory.proxy.Typing;
public class CheckingProxer implements Proxer {
private final Proxer proxer;
private final Checker checker;
private CheckingProxer(Proxer proxer, Checker checker) {
this.proxer = proxer;
this.checker = checker;
}
public static Proxer checkingProxer(Checker checker, Proxer proxer) {
return new CheckingProxer(proxer, checker);
}
public Object proxy(Typing typing, Handler handler) {
return proxer.proxy(typing, mockHandler(handler));
}
private Handler mockHandler(final Handler handler) {
return new Handler() {
public Object handle(Invocation invocation) throws Throwable {
checker.mock(invocation.instance);
return handler.handle(invocation);
}
};
}
}