Author: bphillips
Date: Tue Jul 16 16:33:51 2013
New Revision: 1503787

URL: http://svn.apache.org/r1503787
Log:
NOJIRA - Added unit test for Jsr286Dispatcher class based on the 
JSR168DispatcherTest class - trying to learn more about how this plugin works 
to hopefully improve it.

Added:
    
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java

Added: 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java?rev=1503787&view=auto
==============================================================================
--- 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java
 (added)
+++ 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java
 Tue Jul 16 16:33:51 2013
@@ -0,0 +1,340 @@
+/*
+ * $Id: Jsr168DispatcherTest.java 602665 2007-12-09 12:11:25Z mrdon $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.portlet.dispatcher;
+
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionProxy;
+import com.opensymphony.xwork2.ActionProxyFactory;
+import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.dispatcher.mapper.ActionMapping;
+import static org.apache.struts2.portlet.PortletConstants.*;
+import org.easymock.EasyMock;
+import org.jmock.Mock;
+import org.jmock.cglib.MockObjectTestCase;
+import org.jmock.core.Constraint;
+import org.springframework.mock.web.portlet.MockPortletConfig;
+import org.springframework.mock.web.portlet.MockPortletContext;
+
+import javax.portlet.*;
+import java.util.*;
+
+/**
+ * Test portlet actions for porlet 2.0 specification.
+ * 
+ */
+public class Jsr286DispatcherTest extends MockObjectTestCase {
+
+       Jsr286Dispatcher dispatcher = null;
+       Mock mockConfig = null;
+       Mock mockCtx = null;
+       Mock mockRequest = null;
+       Mock mockSession = null;
+       Mock mockActionFactory = null;
+       Mock mockActionProxy = null;
+       Mock mockAction = null;
+       Mock mockInvocation = null;
+
+
+
+       public void testRender_ok() {
+               final Mock mockResponse = mock(RenderResponse.class);
+               mockResponse.stubs().method(ANYTHING);
+
+               PortletMode mode = PortletMode.VIEW;
+
+               Map<String, String[]> requestParams = new HashMap<String, 
String[]>();
+               requestParams.put(ACTION_PARAM, new String[] { 
"/view/testAction" });
+               requestParams.put(EVENT_ACTION, new String[] { "true" });
+               requestParams.put(MODE_PARAM, new String[] { mode.toString() });
+
+               Map<String, Object> sessionMap = new HashMap<String, Object>();
+
+               Map<String, String> initParams = new HashMap<String, String>();
+               initParams.put("viewNamespace", "/view");
+               
initParams.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE,
+                               "true");
+
+               initPortletConfig(initParams, new HashMap<String, Object>());
+               initRequest(requestParams, new HashMap<String, Object>(), 
sessionMap,
+                               PortletMode.VIEW, WindowState.NORMAL, false, 
null);
+               setupActionFactory("/view", "testAction", "success",
+                               EasyMock.createNiceMock(ValueStack.class));
+
+               mockInvocation.expects(once()).method("getStack")
+                               .will(returnValue(null));
+               try {
+                       dispatcher
+                                       
.setActionProxyFactory((ActionProxyFactory) mockActionFactory
+                                                       .proxy());
+                       dispatcher.init((PortletConfig) mockConfig.proxy());
+                       dispatcher.render((RenderRequest) mockRequest.proxy(),
+                                       (RenderResponse) mockResponse.proxy());
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       fail("Error occured");
+               }
+       }
+
+       public void testProcessAction_ok() {
+               final Mock mockResponse = mock(ActionResponse.class);
+
+               PortletMode mode = PortletMode.VIEW;
+               Map<String, String> initParams = new HashMap<String, String>();
+               initParams.put("viewNamespace", "/view");
+
+               Map<String, String[]> requestParams = new HashMap<String, 
String[]>();
+               requestParams.put(ACTION_PARAM, new String[] { 
"/view/testAction" });
+               requestParams.put(MODE_PARAM, new String[] { mode.toString() });
+
+               
initParams.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE,
+                               "true");
+               initPortletConfig(initParams, new HashMap<String, Object>());
+               initRequest(requestParams, new HashMap<String, Object>(),
+                               new HashMap<String, Object>(), PortletMode.VIEW,
+                               WindowState.NORMAL, true, null);
+               setupActionFactory("/view", "testAction", "success",
+                               EasyMock.createNiceMock(ValueStack.class));
+
+               try {
+                       dispatcher
+                                       
.setActionProxyFactory((ActionProxyFactory) mockActionFactory
+                                                       .proxy());
+                       dispatcher.init((PortletConfig) mockConfig.proxy());
+                       dispatcher.processAction((ActionRequest) 
mockRequest.proxy(),
+                                       (ActionResponse) mockResponse.proxy());
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       fail("Error occured");
+               }
+       }
+
+       public void testModeChangeUsingPortletWidgets() {
+               final Mock mockResponse = mock(RenderResponse.class);
+               mockResponse.stubs().method(ANYTHING);
+               PortletMode mode = PortletMode.EDIT;
+
+               Map<String, String[]> requestParams = new HashMap<String, 
String[]>();
+               requestParams.put(ACTION_PARAM, new String[] { 
"/view/testAction" });
+               requestParams.put(EVENT_ACTION, new String[] { "false" });
+               requestParams.put(MODE_PARAM,
+                               new String[] { PortletMode.VIEW.toString() });
+
+               Map<String, Object> sessionMap = new HashMap<String, Object>();
+
+               Map<String, String> initParams = new HashMap<String, String>();
+               initParams.put("viewNamespace", "/view");
+               initParams.put("editNamespace", "/edit");
+
+               initPortletConfig(initParams, new HashMap<String, Object>());
+               initRequest(requestParams, new HashMap<String, Object>(), 
sessionMap,
+                               mode, WindowState.NORMAL, false, null);
+               setupActionFactory("/edit", "default", "success",
+                               EasyMock.createNiceMock(ValueStack.class));
+
+               mockInvocation.expects(once()).method("getStack")
+                               .will(returnValue(null));
+
+               try {
+                       dispatcher
+                                       
.setActionProxyFactory((ActionProxyFactory) mockActionFactory
+                                                       .proxy());
+                       dispatcher.init((PortletConfig) mockConfig.proxy());
+                       dispatcher.render((RenderRequest) mockRequest.proxy(),
+                                       (RenderResponse) mockResponse.proxy());
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       fail("Error occured");
+               }
+       }
+       
+       public void testParseConfigWithBang() {
+               
+               MockPortletContext portletContext = new MockPortletContext();
+               MockPortletConfig portletConfig = new 
MockPortletConfig(portletContext);
+
+               portletConfig.addInitParameter("viewNamespace", "/view");
+               portletConfig.addInitParameter("defaultViewAction", 
"index!input");
+
+               Map<PortletMode, ActionMapping> actionMap = new 
HashMap<PortletMode, ActionMapping>();
+
+               dispatcher.parseModeConfig(actionMap, portletConfig, 
PortletMode.VIEW,
+                               "viewNamespace", "defaultViewAction");
+
+               ActionMapping mapping = actionMap.get(PortletMode.VIEW);
+               assertEquals("index", mapping.getName());
+               assertEquals("/view", mapping.getNamespace());
+               assertEquals("input", mapping.getMethod());
+       }
+
+       public void setUp() {
+               dispatcher = new Jsr286Dispatcher();
+       }
+
+       private void initPortletConfig(final Map<String, String> initParams,
+                       final Map<String, Object> attributes) {
+               mockConfig = mock(PortletConfig.class);
+               mockCtx = mock(PortletContext.class);
+               mockConfig.stubs().method(ANYTHING);
+               mockCtx.stubs().method(ANYTHING);
+               setupStub(initParams, mockConfig, "getInitParameter");
+               mockCtx.stubs()
+                               .method("getAttributeNames")
+                               
.will(returnValue(Collections.enumeration(attributes.keySet())));
+               setupStub(attributes, mockCtx, "getAttribute");
+               mockConfig.stubs().method("getPortletContext")
+                               .will(returnValue(mockCtx.proxy()));
+               mockCtx.stubs()
+                               .method("getInitParameterNames")
+                               
.will(returnValue(Collections.enumeration(initParams.keySet())));
+               setupStub(initParams, mockCtx, "getInitParameter");
+               mockConfig
+                               .stubs()
+                               .method("getInitParameterNames")
+                               
.will(returnValue(Collections.enumeration(initParams.keySet())));
+               setupStub(initParams, mockConfig, "getInitParameter");
+               mockConfig.stubs().method("getResourceBundle")
+                               .will(returnValue(new ListResourceBundle() {
+                                       protected Object[][] getContents() {
+                                               return new String[][] { { 
"javax.portlet.title",
+                                                               "MyTitle" } };
+                                       }
+                               }));
+       }
+
+       private void setupActionFactory(String namespace, String actionName,
+                       String result, ValueStack stack) {
+               if (mockActionFactory == null) {
+                       mockActionFactory = mock(ActionProxyFactory.class);
+               }
+               mockAction = mock(Action.class);
+               mockActionProxy = mock(ActionProxy.class);
+               mockInvocation = mock(ActionInvocation.class);
+
+               mockActionFactory
+                               .expects(once())
+                               .method("createActionProxy")
+                               .with(new Constraint[] { eq(namespace), 
eq(actionName), NULL,
+                                               isA(Map.class) })
+                               .will(returnValue(mockActionProxy.proxy()));
+               mockActionProxy.stubs().method("getAction")
+                               .will(returnValue(mockAction.proxy()));
+               mockActionProxy.expects(once()).method("execute")
+                               .will(returnValue(result));
+               mockActionProxy.expects(once()).method("getInvocation")
+                               .will(returnValue(mockInvocation.proxy()));
+               
mockInvocation.stubs().method("getStack").will(returnValue(stack));
+
+       }
+
+       /**
+        * Initialize the mock request (and as a result, the mock session)
+        * 
+        * @param requestParams
+        *            The request parameters
+        * @param requestAttributes
+        *            The request attributes
+        * @param sessionParams
+        *            The session attributes
+        * @param mode
+        *            The portlet mode
+        * @param state
+        *            The portlet window state
+        * @param isEvent
+        *            <code>true</code> when the request is an ActionRequest.
+        * @param locale
+        *            The locale. If <code>null</code>, the request will return
+        *            <code>Locale.getDefault()</code>
+        */
+       private void initRequest(Map<String, String[]> requestParams,
+                       Map<String, Object> requestAttributes,
+                       Map<String, Object> sessionParams, PortletMode mode,
+                       WindowState state, boolean isEvent, Locale locale) {
+               mockRequest = isEvent ? mock(ActionRequest.class)
+                               : mock(RenderRequest.class);
+               mockSession = mock(PortletSession.class);
+               mockSession.stubs().method(ANYTHING);
+               mockRequest.stubs().method(ANYTHING);
+               setupStub(sessionParams, mockSession, "getAttribute");
+               mockSession
+                               .stubs()
+                               .method("getAttributeNames")
+                               
.will(returnValue(Collections.enumeration(sessionParams
+                                               .keySet())));
+               setupParamStub(requestParams, mockRequest, "getParameter");
+               setupStub(requestAttributes, mockRequest, "getAttribute");
+               mockRequest
+                               .stubs()
+                               .method("getAttributeNames")
+                               
.will(returnValue(Collections.enumeration(requestAttributes
+                                               .keySet())));
+               mockRequest.stubs().method("getParameterMap")
+                               .will(returnValue(requestParams));
+               mockRequest
+                               .stubs()
+                               .method("getParameterNames")
+                               
.will(returnValue(Collections.enumeration(requestParams
+                                               .keySet())));
+               mockRequest.stubs().method("getPortletSession")
+                               .will(returnValue(mockSession.proxy()));
+               if (locale != null) {
+                       
mockRequest.stubs().method("getLocale").will(returnValue(locale));
+               } else {
+                       mockRequest.stubs().method("getLocale")
+                                       .will(returnValue(Locale.getDefault()));
+               }
+               
mockRequest.stubs().method("getPortletMode").will(returnValue(mode));
+               
mockRequest.stubs().method("getWindowState").will(returnValue(state));
+       }
+
+       private void setupParamStub(Map<String, String[]> requestParams,
+                       Mock mockRequest, String method) {
+               Map<String, String> newMap = new HashMap<String, String>();
+               for (String key : requestParams.keySet()) {
+                       String[] val = requestParams.get(key);
+                       newMap.put(key, val[0]);
+               }
+               setupStub(newMap, mockRequest, method);
+
+       }
+
+       /**
+        * Set up stubs for the mock.
+        * 
+        * @param map
+        *            The map containing the <code>key</code> and
+        *            <code>values</code>. The key is the expected parameter to
+        *            <code>method</code>, and value is the value that should be
+        *            returned from the stub.
+        * @param mock
+        *            The mock to initialize.
+        * @param method
+        *            The name of the method to stub.
+        */
+       private void setupStub(Map map, Mock mock, String method) {
+               for (Object key : map.keySet()) {
+                       Object val = map.get(key);
+                       
mock.stubs().method(method).with(eq(key)).will(returnValue(val));
+               }
+       }
+
+}


Reply via email to