?? abstractactiondispatchertestcase.java
字號:
/**
* $RCSfile: AbstractActionDispatcherTestCase.java,v $
* $Revision: 1.2 $
* $Date: 2004/08/26 11:10:26 $
*
* Copyright (C) 2002-2004 softme.org (Softme Studio). All rights reserved.
* ===================================================================
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS INC. OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*/
package org.softme.jworks;
import java.io.File;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import org.apache.turbine.util.RunData;
import org.apache.turbine.util.RunDataFactory;
import org.nanocontainer.nanowar.KeyConstants;
import org.nanocontainer.nanowar.ServletContainerListener;
import org.nanocontainer.script.ScriptedContainerBuilder;
import org.nanocontainer.script.groovy.GroovyContainerBuilder;
import org.picocontainer.PicoContainer;
import org.picocontainer.defaults.ObjectReference;
import org.picocontainer.defaults.SimpleReference;
import org.softme.jworks.test.util.WebWorkMockHttpServletRequest;
import com.mockobjects.dynamic.C;
import com.mockobjects.dynamic.Mock;
import com.mockobjects.servlet.MockHttpServletResponse;
import com.mockobjects.servlet.MockHttpSession;
import com.mockobjects.servlet.MockServletConfig;
import com.mockobjects.servlet.MockServletOutputStream;
import com.opensymphony.webwork.dispatcher.ServletDispatcher;
import com.opensymphony.xwork.config.ConfigurationManager;
import com.opensymphony.xwork.config.providers.XmlConfigurationProvider;
/**
* JWorks ActionDispatcher 測試抽象類
*
* @author <a href="mailto:brokendoor@sina.com">boon xiong</a>
* @version CVS $Revision: 1.2 $ $Date: 2004/08/26 11:10:26 $
*/
public abstract class AbstractActionDispatcherTestCase extends AbstractJWorksTurbineServiceTestCase {
private ObjectReference containerRef = new SimpleReference();
private ObjectReference parentContainerRef = new SimpleReference();
protected String groovyScript = "" +
"pico = new org.picocontainer.defaults.DefaultPicoContainer()\n" +
"pico.registerComponentImplementation(java.lang.String)\n" +
"return pico\n" +
"";
//~ Methods ////////////////////////////////////////////////////////////////
protected PicoContainer buildContainer(ScriptedContainerBuilder builder, PicoContainer parentContainer) {
parentContainerRef.set(parentContainer);
builder.buildContainer(containerRef, parentContainerRef, "SOME_SCOPE", true);
return (PicoContainer) containerRef.get();
}
public String getConfigFilename() {
return "xwork.xml";
}
public abstract ActionDispatcher getActionDispatcher();
public abstract String getServletPath();
public String getNanoGroovyScript(){
return this.groovyScript;
}
public void testActionDispatcher() throws Exception {
service(getActionDispatcher());
}
protected Map getParameterMap() {
return new HashMap();
}
protected void setUp() throws Exception {
super.setUp();
loadConfig();
}
protected void loadConfig() {
// xWorks 框架配置
XmlConfigurationProvider c = new XmlConfigurationProvider(getConfigFilename());
ConfigurationManager.clearConfigurationProviders();
ConfigurationManager.destroyConfiguration();
ConfigurationManager.addConfigurationProvider(c);
ConfigurationManager.getConfiguration();
}
protected void tearDown() throws Exception {
ConfigurationManager.destroyConfiguration();
}
private void service(ActionDispatcher dispatcher) throws Exception
{
MockHttpSession session = new MockHttpSession();
WebWorkMockHttpServletRequest request = new WebWorkMockHttpServletRequest();
// MockHttpServletRequest request = new MockHttpServletRequest();
request.setupAddHeader("Content-Type", "dunno what this should be... just not multipart !");
request.setParameterMap(getParameterMap());
request.setupGetServletPath(getServletPath());
request.setupGetPathInfo(getServletPath());
// 為Turbine ParametersParser 設置參數
request.setupGetParameterNames(null);
MockHttpServletResponse response = new MockHttpServletResponse();
response.setupOutputStream(new MockServletOutputStream());
Mock servletContextDMock = new Mock(ServletContext.class);
servletContextDMock.matchAndReturn("getRealPath", C.args(C.eq("")), "");
servletContextDMock.matchAndReturn("getRealPath", C.args(C.eq("velocity.properties")), null);
servletContextDMock.matchAndReturn("getRealPath", C.args(C.eq("/WEB-INF/velocity.properties")), null);
servletContextDMock.matchAndReturn("log", C.ANY_ARGS, null);
// TODO: 修改臨時路徑為系統路徑
servletContextDMock.matchAndReturn("getAttribute", C.args(C.eq("javax.servlet.context.tempdir")), new File("d:/temp/"));
// 創建"nanocontainer.builder"的mock
GroovyContainerBuilder gcb = new GroovyContainerBuilder(
new StringReader(groovyScript), getClass().getClassLoader());
final Vector initParams = new Vector();
initParams.add("nanocontainer.groovy");
servletContextDMock.expectAndReturn("getInitParameterNames",
C.NO_ARGS,
initParams.elements());
servletContextDMock.matchAndReturn("getInitParameter",
C.args(C.eq("nanocontainer.groovy")),
getNanoGroovyScript());
servletContextDMock.expect("setAttribute",
C.args(C.eq(KeyConstants.BUILDER), C.isA(GroovyContainerBuilder.class)));
servletContextDMock.expect("setAttribute",
C.args(C.eq(KeyConstants.APPLICATION_CONTAINER),C.isA(PicoContainer.class)));
// 模擬 WebWork Servlet
servletContextDMock.expect("setAttribute",
C.args(C.eq("webwork.servlet"), C.isA(ServletDispatcher.class)));
// 模擬返回的Application PicoConatainer
// PicoContainer parent = new DefaultPicoContainer();
PicoContainer pico = buildContainer(gcb, null);
new org.picocontainer.defaults.DefaultPicoContainer();
servletContextDMock.matchAndReturn("getAttribute",
C.args(C.eq(KeyConstants.APPLICATION_CONTAINER)),
pico);
// 模擬返回的GroovyContainerBuilder
servletContextDMock.matchAndReturn("getAttribute",
C.args(C.eq(KeyConstants.BUILDER)),
gcb);
ServletContext servletContextMock = (ServletContext) servletContextDMock.proxy();
// 設置 session
session.setupServletContext(servletContextMock);
session.setupGetAttribute(KeyConstants.SESSION_CONTAINER, pico);
// assertSame(session.getAttribute(KeyConstants.SESSION_CONTAINER),gcb);
// session.setExpectedAttribute()
// 設置 request
request.setSession(session);
request.setAttribute(KeyConstants.REQUEST_CONTAINER, pico);
request.setupGetPathInfo(getServletPath());
// request.setupGetAttribute(pico);
// servletContextDMock.matchAndReturn()
// Nano Web Listener
ServletContainerListener listener = new ServletContainerListener();
listener.contextInitialized(new ServletContextEvent(servletContextMock));
// listener.sessionCreated(new HttpSessionEvent(session));
MockServletConfig servletConfigMock = new MockServletConfig();
servletConfigMock.setServletContext(servletContextMock);
RunData data = RunDataFactory.getRunData(request, response, servletConfigMock);
dispatcher.init(data);
HashMap map = dispatcher.createMap(data);
dispatcher.serviceAction(data, map);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -