nablarch.fw.web.servlet.MockServletExecutionContext Maven / Gradle / Ivy
package nablarch.fw.web.servlet;
import nablarch.core.util.annotation.Published;
import nablarch.fw.ExecutionContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
* 単体テスト用の {@link ServletExecutionContext} のモッククラス。
*
* このモッククラスでは、 {@link ServletExecutionContext} 内の Servlet API や
* HTTP 処理に関係する部分を仮実装に置き換えている。
* これによって、 Servlet API などのインスタンスを用意しなくても、
* インスタンス生成が可能となっている。
*
*
* リクエストスコープとセッションスコープの情報は、本クラス内のインスタンス変数で定義された
* Map 内に格納される。
* また、 {@link #getHttpRequest()} や {@link ServletExecutionContext#getServletContext()}
* などの HTTP 処理に関係するメソッドは、別途定義されたセッターなどで渡した値をそのまま返すだけの
* 実装に置き換えられている。
* これら以外の、もともと {@link ExecutionContext} にあるメソッド({@link #handleNext(Object)} など)は、
* 本来の処理がそのまま実行される。
*
*
* @author Tanaka Tomoyuki
*/
@Published(tag = "architect")
public class MockServletExecutionContext extends ServletExecutionContext {
/**
* リクエストスコープ用のモックのマップ。
*/
private Map mockRequestScopeMap = new HashMap();
/**
* セッションスコープ用のモックのマップ。
*/
private Map mockSessionScopeMap = new HashMap();
/**
* {@link #invalidateSession()}が実行された回数。
*/
private int invalidateSessionInvokedCount;
/**
* {@link #isNewSession()}が返す値。
*/
private boolean isNewSessionValue;
/**
* {@link #hasSession()}が返す値。
*
* {@link #getSessionScopedVar(String)} は、 {@link #hasSession()} が {@code true} を
* 返さないと処理をスキップするようになっている。
* テストの度に {@code true} を設定することは非効率と考えられるため、デフォルトは {@code true} にしている。
*
*/
private boolean hasSessionValue = true;
/**
* {@link #getHttpRequest()}が返す値。
*/
private HttpRequestWrapper httpRequestValue;
/**
* {@link #getServletRequest()}が返す値。
*/
private NablarchHttpServletRequestWrapper servletRequestValue;
/**
* {@link #getServletResponse()}が返す値。
*/
private HttpServletResponse servletResponseValue;
/**
* {@link #getServletContext()}が返す値。
*/
private ServletContext servletContextValue;
/**
* {@link #getNativeHttpSession(boolean)}が返す値。
*/
private HttpSession nativeHttpSessionValue;
/**
* 最後に {@link #getNativeHttpSession(boolean)} を実行したときに引数に渡された値
*/
private Boolean create;
/**
* コンストラクタ。
*/
public MockServletExecutionContext() {
super(new MockServletRequest(), null, null);
}
/**
* リクエストスコープ用のモックのマップを取得する。
* @return リクエストスコープ用のモックのマップ
*/
@Override
public Map getRequestScopeMap() {
return mockRequestScopeMap;
}
/**
* リクエストスコープ用のモックのマップを設定する。
* @param scope リクエストスコープ用のモックのマップ
* @return このオブジェクト自体
*/
@Override
public ExecutionContext setRequestScopeMap(Map scope) {
mockRequestScopeMap = scope;
return this;
}
/**
* セッションスコープ用のモックのマップを取得する。
* @return セッションスコープ用のモックのマップ
*/
@Override
public Map getSessionScopeMap() {
return mockSessionScopeMap;
}
/**
* セッションスコープ用のモックのマップを設定する。
* @param scope セッションスコープ用のモックのマップ
* @return このオブジェクト自体
*/
@Override
public ExecutionContext setSessionScopeMap(Map scope) {
mockSessionScopeMap = scope;
return this;
}
/**
* セッション破棄の処理は行わず、メソッドが実行された回数の記録だけを行う。
* @return このオブジェクト自体
*/
@Override
public ExecutionContext invalidateSession() {
invalidateSessionInvokedCount++;
return this;
}
/**
* {@link #invalidateSession()}が実行された回数を取得する。
* @return {@link #invalidateSession()}が実行された回数
*/
public int getInvalidateSessionInvokedCount() {
return invalidateSessionInvokedCount;
}
/**
* {@link #isNewSession()}が返す値を設定する。
* @param isNewSessionValue {@link #isNewSession()}が返す値
*/
public void setIsNewSessionValue(boolean isNewSessionValue) {
this.isNewSessionValue = isNewSessionValue;
}
/**
* {@link #setIsNewSessionValue(boolean)}で設定した値を返す。
*
* デフォルトは {@code false} を返す。
*
* @return {@link #setIsNewSessionValue(boolean)}で設定した値
*/
@Override
public boolean isNewSession() {
return isNewSessionValue;
}
/**
* {@link #hasSession()}が返す値を設定する。
* @param hasSessionValue {@link #hasSession()}が返す値
*/
public void setHasSessionValue(boolean hasSessionValue) {
this.hasSessionValue = hasSessionValue;
}
/**
* {@link #setHasSessionValue(boolean)}で設定した値を返す。
*
* デフォルトは {@code true} を返す。
*
* @return {@link #setHasSessionValue(boolean)}で設定した値
*/
@Override
public boolean hasSession() {
return hasSessionValue;
}
/**
* {@link #getHttpRequest()}が返す値を設定する。
* @param httpRequestValue {@link #getHttpRequest()}が返す値
*/
public void setHttpRequestValue(HttpRequestWrapper httpRequestValue) {
this.httpRequestValue = httpRequestValue;
}
/**
* {@link #setHttpRequestValue(HttpRequestWrapper)}で設定した値を返す。
*
* デフォルトは {@code null} を返す。
*
* @return {@link #setHttpRequestValue(HttpRequestWrapper)}で設定した値
*/
@Override
public HttpRequestWrapper getHttpRequest() {
return httpRequestValue;
}
/**
* {@link #getServletRequest()}が返す値を設定する。
* @param servletRequestValue {@link #getServletRequest()}が返す値
*/
public void setServletRequestValue(NablarchHttpServletRequestWrapper servletRequestValue) {
this.servletRequestValue = servletRequestValue;
}
/**
* {@link #setServletRequestValue(NablarchHttpServletRequestWrapper)}で設定した値を返す。
*
* デフォルトは {@code null} を返す。
*
* @return {@link #setServletRequestValue(NablarchHttpServletRequestWrapper)}で設定した値
*/
@Override
public NablarchHttpServletRequestWrapper getServletRequest() {
return servletRequestValue;
}
/**
* {@link #getServletResponse()}が返す値を設定する。
* @param servletResponseValue {@link #getServletResponse()}が返す値
*/
public void setServletResponseValue(HttpServletResponse servletResponseValue) {
this.servletResponseValue = servletResponseValue;
}
/**
* {@link #setServletResponseValue(HttpServletResponse)}で設定した値を返す。
*
* デフォルトは {@code null} を返す。
*
* @return {@link #setServletResponseValue(HttpServletResponse)}で設定した値
*/
@Override
public HttpServletResponse getServletResponse() {
return servletResponseValue;
}
/**
* {@link #getServletContext()}が返す値を設定する。
* @param servletContextValue {@link #getServletContext()}が返す値
*/
public void setServletContextValue(ServletContext servletContextValue) {
this.servletContextValue = servletContextValue;
}
/**
* {@link #setServletContextValue(ServletContext)}で設定した値を返す。
*
* デフォルトは {@code null} を返す。
*
* @return {@link #setServletContextValue(ServletContext)}で設定した値
*/
@Override
public ServletContext getServletContext() {
return servletContextValue;
}
/**
* {@link #getNativeHttpSession(boolean)}が返す値を設定する。
* @param nativeHttpSessionValue {@link #getNativeHttpSession(boolean)}が返す値
*/
public void setNativeHttpSessionValue(HttpSession nativeHttpSessionValue) {
this.nativeHttpSessionValue = nativeHttpSessionValue;
}
/**
* {@link #setNativeHttpSessionValue(HttpSession)}で設定した値を返す。
*
* デフォルトは {@code null} を返す。
*
* @param create この値は使用しない
* @return {@link #setNativeHttpSessionValue(HttpSession)}で設定した値
*/
@Override
public HttpSession getNativeHttpSession(boolean create) {
this.create = create;
return nativeHttpSessionValue;
}
/**
* 最後に {@link #getNativeHttpSession(boolean)} を実行したときに引数に渡された値を取得する。
*
* 一度もメソッドが実行されていない状態では {@code null} を返す。
*
* @return 最後に {@link #getNativeHttpSession(boolean)} を実行したときに引数に渡された値
*/
public Boolean getCreate() {
return create;
}
/**
* {@link HttpServletRequest}のモック。
*
* {@link ServletExecutionContext}のインスタンス化でエラーが発生しないように最低限の実装のみがされている。
*
*/
private static class MockServletRequest implements HttpServletRequest {
@Override
public String getAuthType() {
return null;
}
@Override
public Cookie[] getCookies() {
return new Cookie[0];
}
@Override
public long getDateHeader(String s) {
return 0;
}
@Override
public String getHeader(String s) {
return null;
}
@Override
public Enumeration> getHeaders(String s) {
return null;
}
@Override
public Enumeration> getHeaderNames() {
return Collections.enumeration(Collections.emptyList());
}
@Override
public int getIntHeader(String s) {
return 0;
}
@Override
public String getMethod() {
return null;
}
@Override
public String getPathInfo() {
return null;
}
@Override
public String getPathTranslated() {
return null;
}
@Override
public String getContextPath() {
return "";
}
@Override
public String getQueryString() {
return null;
}
@Override
public String getRemoteUser() {
return null;
}
@Override
public boolean isUserInRole(String s) {
return false;
}
@Override
public Principal getUserPrincipal() {
return null;
}
@Override
public String getRequestedSessionId() {
return null;
}
@Override
public String getRequestURI() {
return "";
}
@Override
public StringBuffer getRequestURL() {
return null;
}
@Override
public String getServletPath() {
return null;
}
@Override
public HttpSession getSession(boolean b) {
return null;
}
@Override
public HttpSession getSession() {
return null;
}
@Override
public boolean isRequestedSessionIdValid() {
return false;
}
@Override
public boolean isRequestedSessionIdFromCookie() {
return false;
}
@Override
public boolean isRequestedSessionIdFromURL() {
return false;
}
@Override
public boolean isRequestedSessionIdFromUrl() {
return false;
}
@Override
public Object getAttribute(String s) {
return null;
}
@Override
public Enumeration> getAttributeNames() {
return null;
}
@Override
public String getCharacterEncoding() {
return null;
}
@Override
public void setCharacterEncoding(String s) throws UnsupportedEncodingException {
}
@Override
public int getContentLength() {
return 0;
}
@Override
public String getContentType() {
return null;
}
@Override
public ServletInputStream getInputStream() throws IOException {
return null;
}
@Override
public String getParameter(String s) {
return null;
}
@Override
public Enumeration> getParameterNames() {
return null;
}
@Override
public String[] getParameterValues(String s) {
return new String[0];
}
@Override
public Map, ?> getParameterMap() {
return null;
}
@Override
public String getProtocol() {
return null;
}
@Override
public String getScheme() {
return null;
}
@Override
public String getServerName() {
return null;
}
@Override
public int getServerPort() {
return 0;
}
@Override
public BufferedReader getReader() throws IOException {
return null;
}
@Override
public String getRemoteAddr() {
return null;
}
@Override
public String getRemoteHost() {
return null;
}
@Override
public void setAttribute(String s, Object o) {
}
@Override
public void removeAttribute(String s) {
}
@Override
public Locale getLocale() {
return null;
}
@Override
public Enumeration> getLocales() {
return null;
}
@Override
public boolean isSecure() {
return false;
}
@Override
public RequestDispatcher getRequestDispatcher(String s) {
return null;
}
@Override
public String getRealPath(String s) {
return null;
}
@Override
public int getRemotePort() {
return 0;
}
@Override
public String getLocalName() {
return null;
}
@Override
public String getLocalAddr() {
return null;
}
@Override
public int getLocalPort() {
return 0;
}
}
}