Package org.apache.struts2.views.jsp

Source Code of org.apache.struts2.views.jsp.PortletUrlTagTest

/*
* $Id: PortletUrlTagTest.java 724183 2008-12-07 19:48:56Z nilsga $
*
* 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.views.jsp;

import java.util.HashMap;
import java.util.Map;

import javax.portlet.PortletContext;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletURL;
import javax.portlet.WindowState;
import javax.portlet.WindowStateException;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.StrutsTestCase;
import org.apache.struts2.portlet.PortletActionConstants;
import org.apache.struts2.portlet.servlet.PortletServletRequest;
import org.apache.struts2.portlet.util.PortletUrlHelper;
import org.springframework.mock.web.portlet.MockPortalContext;
import org.springframework.mock.web.portlet.MockPortletContext;
import org.springframework.mock.web.portlet.MockPortletURL;
import org.springframework.mock.web.portlet.MockRenderRequest;
import org.springframework.mock.web.portlet.MockRenderResponse;

import com.mockobjects.servlet.MockJspWriter;
import com.mockobjects.servlet.MockPageContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.mock.MockActionInvocation;
import com.opensymphony.xwork2.mock.MockActionProxy;
import com.opensymphony.xwork2.util.ValueStack;

/**
*/
@SuppressWarnings("unchecked")
public class PortletUrlTagTest extends StrutsTestCase {

  private URLTag tag = new URLTag();

  private ValueStack stack = null;

  private ActionContext context = null;

  private MockRenderRequest renderRequest;

  private MockPortletUrl renderUrl;

  private MockPortletUrl actionUrl;

  private MockRenderResponse renderResponse;

  private MockPageContext pageContext;

  private MockActionInvocation actionInvocation;

  private MockActionProxy actionProxy;

  private MockJspWriter jspWriter;
 
  private MockPortletContext portletContext;

  public void setUp() throws Exception {
    super.setUp();

    context = ActionContext.getContext();
    stack = context.getValueStack();

    portletContext = new MockPortletContext();
    renderRequest = new MockRenderRequest();
    renderRequest.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
    renderUrl = new MockPortletUrl("render");
    actionUrl = new MockPortletUrl("action");
    renderResponse = new MockRenderResponse() {
      @Override
      public PortletURL createRenderURL() {
        return renderUrl;
      }

      @Override
      public PortletURL createActionURL() {
        return actionUrl;
      }
    };

    Map modeMap = new HashMap();
    modeMap.put(PortletMode.VIEW, "/view");
    modeMap.put(PortletMode.HELP, "/help");
    modeMap.put(PortletMode.EDIT, "/edit");

    context.put(PortletActionConstants.REQUEST, renderRequest);
    context.put(PortletActionConstants.RESPONSE, renderResponse);
    context.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
    context.put(PortletActionConstants.MODE_NAMESPACE_MAP, modeMap);
    context.put(StrutsStatics.STRUTS_PORTLET_CONTEXT, portletContext);

    actionInvocation = new MockActionInvocation();
    actionProxy = new MockActionProxy();

    actionInvocation.setAction(new Object());
    actionInvocation.setProxy(actionProxy);
    actionInvocation.setStack(stack);

    context.setActionInvocation(actionInvocation);

    pageContext = new MockPageContext();
    pageContext.setRequest(new PortletServletRequest(renderRequest, null));
    jspWriter = new MockJspWriter();
    pageContext.setJspWriter(jspWriter);

    tag.setPageContext(pageContext);

  }

  public void testEnsureParamsAreStringArrays() {
    Map params = new HashMap();
    params.put("param1", "Test1");
    params.put("param2", new String[] { "Test2" });

    Map result = PortletUrlHelper.ensureParamsAreStringArrays(params);
    assertEquals(2, result.size());
    assertTrue(result.get("param1") instanceof String[]);
  }

  public void testSetWindowState() throws Exception {

    tag.setAction("testAction");
    tag.setWindowState("maximized");
    tag.doStartTag();
    tag.doEndTag();

    assertEquals("/view/testAction", renderUrl.getParameter(PortletActionConstants.ACTION_PARAM));
    assertEquals(PortletMode.VIEW.toString(), renderUrl.getParameter(PortletActionConstants.MODE_PARAM));
    assertEquals(PortletMode.VIEW, renderUrl.getPortletMode());
    assertEquals(WindowState.MAXIMIZED, renderUrl.getWindowState());

  }

  public void testSetPortletMode() throws Exception {

    tag.setAction("testAction");
    tag.setPortletMode("help");
    tag.doStartTag();
    tag.doEndTag();

    assertEquals("/help/testAction", renderUrl.getParameter(PortletActionConstants.ACTION_PARAM));
    assertEquals(PortletMode.HELP.toString(), renderUrl.getParameter(PortletActionConstants.MODE_PARAM));
    assertEquals(PortletMode.HELP, renderUrl.getPortletMode());
    assertEquals(WindowState.NORMAL, renderUrl.getWindowState());
  }

  public void testUrlWithQueryParams() throws Exception {

    tag.setAction("testAction?testParam1=testValue1");
    tag.doStartTag();
    tag.doEndTag();

    assertEquals("/view/testAction", renderUrl.getParameter(PortletActionConstants.ACTION_PARAM));
    assertEquals("testValue1", renderUrl.getParameter("testParam1"));
    assertEquals(PortletMode.VIEW.toString(), renderUrl.getParameter(PortletActionConstants.MODE_PARAM));
    assertEquals(PortletMode.VIEW, renderUrl.getPortletMode());
    assertEquals(WindowState.NORMAL, renderUrl.getWindowState());
  }

  public void testActionUrl() throws Exception {

    tag.setAction("testAction");
    tag.setPortletUrlType("action");
    tag.doStartTag();
    tag.doEndTag();

    assertEquals("/view/testAction", actionUrl.getParameter(PortletActionConstants.ACTION_PARAM));
    assertEquals(PortletMode.VIEW, actionUrl.getPortletMode());
    assertEquals(WindowState.NORMAL, actionUrl.getWindowState());
  }

  public void testResourceUrl() throws Exception {
    renderRequest.setContextPath("/myPortlet");
    jspWriter.setExpectedData("/myPortlet/image.gif");
    tag.setValue("image.gif");
    tag.doStartTag();
    tag.doEndTag();
    jspWriter.verify();
  }

  public void testResourceUrlWithNestedParam() throws Exception {
    renderRequest.setContextPath("/myPortlet");
    jspWriter.setExpectedData("/myPortlet/image.gif?testParam1=testValue1");

    ParamTag paramTag = new ParamTag();
    paramTag.setPageContext(pageContext);
    paramTag.setParent(tag);
    paramTag.setName("testParam1");
    paramTag.setValue("'testValue1'");
    tag.setValue("image.gif");
    tag.doStartTag();
    paramTag.doStartTag();
    paramTag.doEndTag();
    tag.doEndTag();
    jspWriter.verify();
  }

  public void testResourceUrlWithTwoNestedParam() throws Exception {
    renderRequest.setContextPath("/myPortlet");
    jspWriter.setExpectedData("/myPortlet/image.gif?testParam1=testValue1&testParam2=testValue2");

    ParamTag paramTag = new ParamTag();
    paramTag.setPageContext(pageContext);
    paramTag.setParent(tag);
    paramTag.setName("testParam1");
    paramTag.setValue("'testValue1'");
    ParamTag paramTag2 = new ParamTag();
    paramTag2.setPageContext(pageContext);
    paramTag2.setParent(tag);
    paramTag2.setName("testParam2");
    paramTag2.setValue("'testValue2'");
    tag.setValue("image.gif");
    tag.doStartTag();
    paramTag.doStartTag();
    paramTag.doEndTag();
    paramTag2.doStartTag();
    paramTag2.doEndTag();
    tag.doEndTag();
    jspWriter.verify();
  }
 
  public void testResourceUrlWithNestedParamThatIsNotString() throws Exception {
    renderRequest.setContextPath("/myPortlet");
    jspWriter.setExpectedData("/myPortlet/image.gif?id=5");
   
    ParamTag paramTag = new ParamTag();
    paramTag.setPageContext(pageContext);
    paramTag.setParent(tag);
    paramTag.setName("id");
    paramTag.setValue("5");
   
    tag.setValue("image.gif");
    tag.doStartTag();
    paramTag.doStartTag();
    paramTag.doEndTag();
    tag.doEndTag();
    jspWriter.verify();
  }
 
  public void testResourceUrlWithNestedOgnlExpressionParamThatIsNotString() throws Exception {
    renderRequest.setContextPath("/myPortlet");
    jspWriter.setExpectedData("/myPortlet/image.gif?id=5");
   
    Object o = new Object() {
      public Integer getId() {
        return 5;
      }
    };
    tag.getStack().push(o);
   
    ParamTag paramTag = new ParamTag();
    paramTag.setPageContext(pageContext);
    paramTag.setParent(tag);
    paramTag.setName("id");
    paramTag.setValue("id");
   
    tag.setValue("image.gif");
    tag.doStartTag();
    paramTag.doStartTag();
    paramTag.doEndTag();
    tag.doEndTag();
    jspWriter.verify();
  }

  public void testUrlWithMethod() throws Exception {
    tag.setAction("testAction");
    tag.setMethod("input");
    tag.doStartTag();
    tag.doEndTag();

    assertEquals("/view/testAction!input", renderUrl.getParameter(PortletActionConstants.ACTION_PARAM));
    assertEquals(PortletMode.VIEW.toString(), renderUrl.getParameter(PortletActionConstants.MODE_PARAM));
    assertEquals(PortletMode.VIEW, renderUrl.getPortletMode());
    assertEquals(WindowState.NORMAL, renderUrl.getWindowState());
  }

  public void testUrlWithNoActionOrMethod() throws Exception {
    actionProxy.setActionName("currentExecutingAction");
    actionProxy.setNamespace("/currentNamespace");
    tag.doStartTag();
    tag.doEndTag();

    assertEquals("/view/currentNamespace/currentExecutingAction", renderUrl
        .getParameter(PortletActionConstants.ACTION_PARAM));
    assertEquals(PortletMode.VIEW.toString(), renderUrl.getParameter(PortletActionConstants.MODE_PARAM));
    assertEquals(PortletMode.VIEW, renderUrl.getPortletMode());
    assertEquals(WindowState.NORMAL, renderUrl.getWindowState());
  }

  public void testUrlShouldNotIncludeParamsFromHttpQueryString() throws Exception {

    PortletServletRequestWithQueryString req = new PortletServletRequestWithQueryString(renderRequest, null);
    req.setQueryString("thisParamShouldNotBeIncluded=thisValueShouldNotBeIncluded");
    pageContext.setRequest(req);
    tag.setAction("testAction?testParam1=testValue1");
    tag.doStartTag();
    tag.doEndTag();

    assertEquals("/view/testAction", renderUrl.getParameter(PortletActionConstants.ACTION_PARAM));
    assertEquals("testValue1", renderUrl.getParameter("testParam1"));
    assertNull(renderUrl.getParameter("thisParamShouldNotBeIncluded"));
    assertEquals(PortletMode.VIEW.toString(), renderUrl.getParameter(PortletActionConstants.MODE_PARAM));
    assertEquals(PortletMode.VIEW, renderUrl.getPortletMode());
    assertEquals(WindowState.NORMAL, renderUrl.getWindowState());
  }

  public void testUrlShouldIgnoreIncludeParams() throws Exception {
    PortletServletRequestWithQueryString req = new PortletServletRequestWithQueryString(renderRequest, null);
    req.setQueryString("thisParamShouldNotBeIncluded=thisValueShouldNotBeIncluded");
    pageContext.setRequest(req);
    tag.setAction("testAction?testParam1=testValue1");
    tag.setIncludeParams("GET");
    tag.doStartTag();
    tag.doEndTag();

    assertEquals("/view/testAction", renderUrl.getParameter(PortletActionConstants.ACTION_PARAM));
    assertEquals("testValue1", renderUrl.getParameter("testParam1"));
    assertNull(renderUrl.getParameter("thisParamShouldNotBeIncluded"));
    assertEquals(PortletMode.VIEW.toString(), renderUrl.getParameter(PortletActionConstants.MODE_PARAM));
    assertEquals(PortletMode.VIEW, renderUrl.getPortletMode());
    assertEquals(WindowState.NORMAL, renderUrl.getWindowState());
  }

  private static class PortletServletRequestWithQueryString extends PortletServletRequest {

    private String queryString;

    public PortletServletRequestWithQueryString(PortletRequest portletRequest, PortletContext portletContext) {
      super(portletRequest, portletContext);
    }

    public void setQueryString(String queryString) {
      this.queryString = queryString;
    }

    @Override
    public String getQueryString() {
      return queryString;
    }

  }

  private static class MockPortletUrl extends MockPortletURL {

    private PortletMode portletMode;

    private WindowState windowState;

    public MockPortletUrl(String urlType) {
      super(new MockPortalContext(), urlType);
    }

    @Override
    public void setPortletMode(PortletMode portletMode) throws PortletModeException {
      super.setPortletMode(portletMode);
      this.portletMode = portletMode;
    }

    public PortletMode getPortletMode() {
      return portletMode;
    }

    @Override
    public void setWindowState(WindowState windowState) throws WindowStateException {
      super.setWindowState(windowState);
      this.windowState = windowState;
    }

    public WindowState getWindowState() {
      return windowState;
    }

  }
}
TOP

Related Classes of org.apache.struts2.views.jsp.PortletUrlTagTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.