From f070d7e830c4f032fa1514cd1c249eb805554db5 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Wed, 7 Mar 2012 15:34:38 +0000 Subject: [PATCH] WW-3769 adds missing line of code to generate namespace without explicit specifying it git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1297994 13f79535-47bb-0310-9956-ffa450edef68 --- .../components/PortletUrlRenderer.java | 1 + .../struts2/components/PortletAction.java | 11 ++++ .../components/PortletUrlRendererTest.java | 50 +++++++++++++++++ .../struts2/views/jsp/PortletUrlTagTest.java | 55 +++++++++++-------- plugins/portlet/src/test/resources/struts.xml | 16 ++++++ 5 files changed, 110 insertions(+), 23 deletions(-) create mode 100644 plugins/portlet/src/test/java/org/apache/struts2/components/PortletAction.java create mode 100644 plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java create mode 100644 plugins/portlet/src/test/resources/struts.xml diff --git a/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java b/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java index 80af084b5..f07578957 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java @@ -75,6 +75,7 @@ public class PortletUrlRenderer implements UrlRenderer { } String result; + urlComponent.setNamespace(urlComponent.determineNamespace(urlComponent.getNamespace(), urlComponent.getStack(), urlComponent.getHttpServletRequest())); if (onlyActionSpecified(urlComponent)) { result = portletUrlHelper.buildUrl(urlComponent.getAction(), urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(), urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState()); diff --git a/plugins/portlet/src/test/java/org/apache/struts2/components/PortletAction.java b/plugins/portlet/src/test/java/org/apache/struts2/components/PortletAction.java new file mode 100644 index 000000000..56ca1c74a --- /dev/null +++ b/plugins/portlet/src/test/java/org/apache/struts2/components/PortletAction.java @@ -0,0 +1,11 @@ +package org.apache.struts2.components; + +import com.opensymphony.xwork2.Action; + +public class PortletAction { + + public String execute() { + return Action.SUCCESS; + } + +} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java b/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java new file mode 100644 index 000000000..feff5703a --- /dev/null +++ b/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java @@ -0,0 +1,50 @@ +package org.apache.struts2.components; + +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionProxy; +import com.opensymphony.xwork2.util.ValueStack; +import org.apache.struts2.StrutsStatics; +import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.portlet.PortletConstants; +import org.springframework.mock.web.portlet.MockMimeResponse; +import org.springframework.mock.web.portlet.MockPortletContext; +import org.springframework.mock.web.portlet.MockPortletRequest; + +import javax.portlet.PortletContext; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Collections; + +public class PortletUrlRendererTest extends StrutsTestCase { + + private ValueStack stack; + + public void setUp() throws Exception { + super.setUp(); + + ActionProxy actionProxy = getActionProxy("/portlettest/test"); // creates new empty ActionContext + ActionContext.getContext().put(ActionContext.ACTION_INVOCATION, actionProxy.getInvocation()); + + PortletContext portletCtx = new MockPortletContext(); + ActionContext.getContext().put(StrutsStatics.STRUTS_PORTLET_CONTEXT, portletCtx); + ActionContext.getContext().put(PortletConstants.REQUEST, new MockPortletRequest(portletCtx)); + ActionContext.getContext().put(PortletConstants.RESPONSE, new MockMimeResponse()); + ActionContext.getContext().put(PortletConstants.MODE_NAMESPACE_MAP, Collections.emptyMap()); + + stack = actionProxy.getInvocation().getStack(); + } + + public void testRenderUrlWithNamespace() throws Exception { + // given + PortletUrlRenderer renderer = new PortletUrlRenderer(); + UrlProvider component = new URL(stack, request, response).getUrlProvider(); + Writer writer = new StringWriter(); + + // when + renderer.renderUrl(writer, component); + + // then + assertTrue("/portlettest".equals(component.getNamespace())); + } + +} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java b/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java index 932c5c147..00435fa4a 100644 --- a/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java +++ b/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java @@ -20,35 +20,38 @@ */ package org.apache.struts2.views.jsp; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import javax.portlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.PageContext; - -import junit.textui.TestRunner; - -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.portlet.PortletActionConstants; -import org.apache.struts2.portlet.util.PortletUrlHelper; -import org.apache.struts2.StrutsStatics; -import static org.apache.struts2.StrutsStatics.*; -import org.jmock.Mock; -import org.jmock.cglib.MockObjectTestCase; -import org.jmock.core.Constraint; - import com.mockobjects.servlet.MockJspWriter; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; -import static com.opensymphony.xwork2.ActionContext.SESSION; -import static com.opensymphony.xwork2.ActionContext.PARAMETERS; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; +import junit.textui.TestRunner; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.portlet.PortletActionConstants; +import org.apache.struts2.portlet.util.PortletUrlHelper; +import org.jmock.Mock; +import org.jmock.cglib.MockObjectTestCase; +import org.jmock.core.Constraint; + +import javax.portlet.PortletContext; +import javax.portlet.PortletMode; +import javax.portlet.PortletRequest; +import javax.portlet.PortletResponse; +import javax.portlet.PortletURL; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; +import javax.portlet.WindowState; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.jsp.PageContext; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import static org.apache.struts2.StrutsStatics.STRUTS_PORTLET_CONTEXT; /** */ @@ -117,6 +120,11 @@ public class PortletUrlTagTest extends MockObjectTestCase { mockHttpReq.stubs().method("getAttribute").with( eq("javax.portlet.request")).will( returnValue((PortletRequest) mockPortletReq.proxy())); + mockHttpReq.stubs().method("getAttribute").with( + eq("javax.servlet.include.servlet_path")).will( + returnValue("/servletPath")); + mockHttpReq.stubs().method("getParameterMap").will( + returnValue(Collections.emptyMap())); mockPortletReq.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW)); mockPortletReq.stubs().method("getWindowState").will(returnValue(WindowState.NORMAL)); @@ -332,6 +340,7 @@ public class PortletUrlTagTest extends MockObjectTestCase { Mock mockActionProxy = mock(ActionProxy.class); mockActionProxy.stubs().method("getActionName").will(returnValue("currentExecutingAction")); + mockActionProxy.stubs().method("getNamespace").will(returnValue("")); final ActionProxy proxy = (ActionProxy)mockActionProxy.proxy(); Mock mockActionInvocation = mock(ActionInvocation.class); diff --git a/plugins/portlet/src/test/resources/struts.xml b/plugins/portlet/src/test/resources/struts.xml new file mode 100644 index 000000000..4b93f295c --- /dev/null +++ b/plugins/portlet/src/test/resources/struts.xml @@ -0,0 +1,16 @@ + + + + + + + + + redirectAction + + + + +