package net.contextfw.web.commons;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import java.net.UnknownHostException;
import java.util.HashSet;
import java.util.Set;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.easymock.EasyMock;
import com.mongodb.MongoException;
public abstract class AbstractTest {
protected static final String FOOBAR = "foobar";
protected <T> T createMock(Class<T> cl) {
return createNiceMock(cl);
}
protected <T> T createStrictMock(Class<T> cl) {
return EasyMock.createStrictMock(cl);
}
protected void sleep(long delay) {
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
}
}
protected Set<Object> mocksToVerify;
protected void setup() throws UnknownHostException, MongoException {
mocksToVerify = new HashSet<Object>();
}
protected void teardown() {
if (!mocksToVerify.isEmpty()) {
verify(mocksToVerify.toArray(new Object[mocksToVerify.size()]));
}
}
protected <T> T regMock(T mock) {
mocksToVerify.add(mock);
replay(mock);
return mock;
}
protected enum RequestExpect {
NO_COOKIES, WITH_COOKIE, WITH_REMOTE_ADDR;
}
protected HttpServletRequest mockRequest(RequestExpect expect) {
return mockRequest(expect, null);
}
protected HttpServletRequest mockRequest(RequestExpect expect,
final Cookie givenCookie) {
HttpServletRequest request = createStrictMock(HttpServletRequest.class);
if (expect == RequestExpect.WITH_REMOTE_ADDR) {
expect(request.getRemoteAddr()).andReturn("127.0.0.1");
} else {
expect(request.getRequestURI()).andReturn("/");
expect(request.getQueryString()).andReturn(null);
if (expect == RequestExpect.WITH_COOKIE) {
Cookie cookie = givenCookie != null ? givenCookie : new Cookie("session", FOOBAR);
expect(request.getCookies()).andReturn(new Cookie[] {cookie});
} if (expect == RequestExpect.NO_COOKIES) {
expect(request.getCookies()).andReturn(null);
}
}
return regMock(request);
}
}