This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch action-context-boost in repository https://gitbox.apache.org/repos/asf/struts.git
commit b7520d2ea011b4d90742f99348562df653ed71bd Author: JCgH4164838Gh792C124B5 <43964333+jcgh4164838gh792c12...@users.noreply.github.com> AuthorDate: Sat Mar 28 11:48:06 2020 -0400 Correction for previous commit message. There was a typo which should have read: "copies one interface from org.springframework.mock.web.portlet.multipart" (not "org.apache.struts2.mock.web.portlet" which was incorrect). Refactor (rename) junit-portlet plugin to portlet-mocks plugin. - Moved StrutsPortletTestCase from the portlet plugin into the junit plugin (same package name). - Added optional dependencies to the junit plugin for the portlet plugin and mocks plugin. - Duplicated StrutsTestCase from the junit plugin with a new name StrutsTestCasePortletTests that exists within a test scope only. This was done to eliminate a dendency cycle between junit and portlet plugins during refactoring. - Updated the portlet plugin unit tests to use StrutsTestCasePortletTests internally instead of StrutsTestCase from the junit plugin. - Removed junit plugin dependency for portlets plugin, added test scope dependency for portlet-mocks plugin. - Made StrutsSpringPortletMockObjectsTest depend only on TestCase. - Removed unneeded dependencies from portlet-mocks pom. Amended commit multiple times: Missed plugins pom.xml change, forgot to drop StrutsPortletTestCase from portlet plugin (local repository). --- plugins/junit/pom.xml | 15 +- .../org/apache/struts2/StrutsPortletTestCase.java | 20 +- plugins/pom.xml | 2 +- plugins/{junit-portlet => portlet-mocks}/pom.xml | 27 +-- .../mock/web/portlet/MockActionRequest.java | 0 .../mock/web/portlet/MockActionResponse.java | 0 .../struts2/mock/web/portlet/MockBaseURL.java | 0 .../struts2/mock/web/portlet/MockCacheControl.java | 0 .../mock/web/portlet/MockClientDataRequest.java | 0 .../apache/struts2/mock/web/portlet/MockEvent.java | 0 .../struts2/mock/web/portlet/MockEventRequest.java | 0 .../mock/web/portlet/MockEventResponse.java | 0 .../struts2/mock/web/portlet/MockMimeResponse.java | 0 .../web/portlet/MockMultipartActionRequest.java | 0 .../mock/web/portlet/MockPortalContext.java | 0 .../mock/web/portlet/MockPortletConfig.java | 0 .../mock/web/portlet/MockPortletContext.java | 0 .../mock/web/portlet/MockPortletPreferences.java | 0 .../mock/web/portlet/MockPortletRequest.java | 0 .../web/portlet/MockPortletRequestDispatcher.java | 0 .../mock/web/portlet/MockPortletResponse.java | 0 .../mock/web/portlet/MockPortletSession.java | 0 .../struts2/mock/web/portlet/MockPortletURL.java | 0 .../mock/web/portlet/MockRenderRequest.java | 0 .../mock/web/portlet/MockRenderResponse.java | 0 .../mock/web/portlet/MockResourceRequest.java | 0 .../mock/web/portlet/MockResourceResponse.java | 0 .../struts2/mock/web/portlet/MockResourceURL.java | 0 .../mock/web/portlet/MockStateAwareResponse.java | 0 .../web/portlet/ServletWrappingPortletContext.java | 0 .../portlet/multipart/MultipartActionRequest.java | 0 .../mock/web/portlet/multipart/package-info.java | 0 .../struts2/mock/web/portlet/package-info.java | 0 .../src/site/site.xml | 0 .../StrutsSpringPortletMockObjectsTest.java | 11 +- .../src/test/resources/applicationContext.xml | 0 plugins/portlet/pom.xml | 9 +- .../apache/struts2/StrutsTestCasePortletTests.java | 224 +++++++++++++++++++++ .../struts2/components/PortletUrlRendererTest.java | 4 +- .../interceptor/PortletStateInterceptorTest.java | 4 +- pom.xml | 4 +- 41 files changed, 267 insertions(+), 53 deletions(-) diff --git a/plugins/junit/pom.xml b/plugins/junit/pom.xml index f41e243..b978c8d 100644 --- a/plugins/junit/pom.xml +++ b/plugins/junit/pom.xml @@ -70,7 +70,20 @@ <dependency> <groupId>javax.portlet</groupId> <artifactId>portlet-api</artifactId> - <scope>test</scope> + <scope>compile</scope> + <optional>true</optional> + </dependency> + + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-portlet-plugin</artifactId> + <optional>true</optional> + </dependency> + + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-portlet-mocks-plugin</artifactId> + <optional>true</optional> </dependency> <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. diff --git a/plugins/portlet/src/main/java/org/apache/struts2/StrutsPortletTestCase.java b/plugins/junit/src/main/java/org/apache/struts2/StrutsPortletTestCase.java similarity index 86% rename from plugins/portlet/src/main/java/org/apache/struts2/StrutsPortletTestCase.java rename to plugins/junit/src/main/java/org/apache/struts2/StrutsPortletTestCase.java index 0f07ea9..624a186 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/StrutsPortletTestCase.java +++ b/plugins/junit/src/main/java/org/apache/struts2/StrutsPortletTestCase.java @@ -18,20 +18,30 @@ */ package org.apache.struts2; + import com.opensymphony.xwork2.ActionContext; +import java.util.HashMap; +import java.util.Map; +import javax.portlet.PortletMode; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; import org.apache.struts2.mock.web.portlet.MockPortletContext; import org.apache.struts2.mock.web.portlet.MockPortletRequest; import org.apache.struts2.mock.web.portlet.MockPortletResponse; import org.apache.struts2.mock.web.portlet.MockPortletSession; import org.apache.struts2.mock.web.portlet.MockStateAwareResponse; +import org.apache.struts2.portlet.PortletConstants; +import org.apache.struts2.portlet.PortletPhase; -import javax.portlet.PortletMode; -import java.util.HashMap; -import java.util.Map; +/* + * Changes: This is a copy of org.apache.struts2.StrutsPortletTestCase from the Struts 2 portlet-plugin, moved + * into the junit-plugin (same package org.apache.struts2). + * The import order above was changed to alphabetical. + * + * Note: The assumption is that anyone utilizing StrutsPortletTestCase currently from the portlet-plugin will almost + * certainly be using the junit-plugin. Under that assumption, the refactored-move of StrutsPortletTestCase + * should not cause issues for pre-existing usage of StrutsPortletTestCase. + */ /** * Base class used to test action in portlet environment diff --git a/plugins/pom.xml b/plugins/pom.xml index fdee6ed..b9f6254 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -45,12 +45,12 @@ <module>jfreechart</module> <module>json</module> <module>junit</module> - <module>junit-portlet</module> <module>osgi</module> <module>oval</module> <module>pell-multipart</module> <module>plexus</module> <module>portlet</module> + <module>portlet-mocks</module> <module>portlet-tiles</module> <module>rest</module> <module>sitemesh</module> diff --git a/plugins/junit-portlet/pom.xml b/plugins/portlet-mocks/pom.xml similarity index 72% rename from plugins/junit-portlet/pom.xml rename to plugins/portlet-mocks/pom.xml index adfab00..afc9a8f 100644 --- a/plugins/junit-portlet/pom.xml +++ b/plugins/portlet-mocks/pom.xml @@ -27,9 +27,9 @@ <version>2.6-SNAPSHOT</version> </parent> - <artifactId>struts2-junit-portlet-plugin</artifactId> + <artifactId>struts2-portlet-mocks-plugin</artifactId> <packaging>jar</packaging> - <name>Struts 2 JUnit Portlet Plugin</name> + <name>Struts 2 Portlet Mocks Plugin</name> <dependencies> <dependency> @@ -38,33 +38,12 @@ </dependency> <dependency> <groupId>org.springframework</groupId> - <artifactId>spring-core</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-context</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependency> - <groupId>org.apache.struts</groupId> - <artifactId>struts2-junit-plugin</artifactId> - </dependency> - <dependency> - <groupId>org.apache.struts</groupId> - <artifactId>struts2-spring-plugin</artifactId> - <optional>true</optional> - </dependency> - <dependency> - <groupId>javax.servlet.jsp</groupId> - <artifactId>jsp-api</artifactId> - <scope>provided</scope> - </dependency> - <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> + <scope>test</scope> </dependency> <!-- Portlet --> diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockActionRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionRequest.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockActionRequest.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionRequest.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockActionResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionResponse.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockActionResponse.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionResponse.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockBaseURL.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockBaseURL.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockBaseURL.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockBaseURL.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockCacheControl.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockCacheControl.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockCacheControl.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockCacheControl.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockClientDataRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockClientDataRequest.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockClientDataRequest.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockClientDataRequest.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockEvent.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEvent.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockEvent.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEvent.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockEventRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventRequest.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockEventRequest.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventRequest.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockEventResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventResponse.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockEventResponse.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventResponse.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockMimeResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMimeResponse.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockMimeResponse.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMimeResponse.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockMultipartActionRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMultipartActionRequest.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockMultipartActionRequest.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMultipartActionRequest.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortalContext.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortalContext.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortalContext.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortalContext.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletConfig.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletConfig.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletConfig.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletConfig.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletContext.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletContext.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletContext.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletContext.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletPreferences.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletPreferences.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletPreferences.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletPreferences.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequest.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequest.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequest.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequestDispatcher.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequestDispatcher.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequestDispatcher.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequestDispatcher.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletResponse.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletResponse.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletResponse.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletSession.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletSession.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletSession.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletSession.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletURL.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletURL.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletURL.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletURL.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderRequest.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderRequest.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderRequest.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderResponse.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderResponse.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderResponse.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceRequest.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceRequest.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceRequest.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceResponse.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceResponse.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceResponse.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceURL.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceURL.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceURL.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceURL.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockStateAwareResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockStateAwareResponse.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/MockStateAwareResponse.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockStateAwareResponse.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/ServletWrappingPortletContext.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/ServletWrappingPortletContext.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/ServletWrappingPortletContext.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/ServletWrappingPortletContext.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/multipart/MultipartActionRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/MultipartActionRequest.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/multipart/MultipartActionRequest.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/MultipartActionRequest.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/multipart/package-info.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/package-info.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/multipart/package-info.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/package-info.java diff --git a/plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/package-info.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/package-info.java similarity index 100% rename from plugins/junit-portlet/src/main/java/org/apache/struts2/mock/web/portlet/package-info.java rename to plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/package-info.java diff --git a/plugins/junit-portlet/src/site/site.xml b/plugins/portlet-mocks/src/site/site.xml similarity index 100% rename from plugins/junit-portlet/src/site/site.xml rename to plugins/portlet-mocks/src/site/site.xml diff --git a/plugins/junit-portlet/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java b/plugins/portlet-mocks/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java similarity index 99% rename from plugins/junit-portlet/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java rename to plugins/portlet-mocks/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java index e802dc6..821868f 100644 --- a/plugins/junit-portlet/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java +++ b/plugins/portlet-mocks/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java @@ -49,6 +49,7 @@ import javax.portlet.WindowState; import javax.security.auth.Subject; import javax.servlet.http.Cookie; import javax.xml.namespace.QName; +import junit.framework.TestCase; import org.apache.struts2.mock.web.portlet.MockActionRequest; import org.apache.struts2.mock.web.portlet.MockActionResponse; import org.apache.struts2.mock.web.portlet.MockCacheControl; @@ -84,7 +85,7 @@ import org.w3c.dom.Element; * Basic test class for Portlet Mock Object testing * */ -public class StrutsSpringPortletMockObjectsTest extends StrutsSpringTestCase { +public class StrutsSpringPortletMockObjectsTest extends TestCase { /** * An empty preferences validator for code coverage only @@ -98,14 +99,6 @@ public class StrutsSpringPortletMockObjectsTest extends StrutsSpringTestCase { } - public void testApplicationContext() { - assertNotNull(applicationContext); - } - - public void testContextLocations() { - assertNotNull(getContextLocations()); - } - public void testMockActionRequest() { final String TEST_ACTIONNAME = "TEST_ACTIONNAME"; diff --git a/plugins/junit-portlet/src/test/resources/applicationContext.xml b/plugins/portlet-mocks/src/test/resources/applicationContext.xml similarity index 100% rename from plugins/junit-portlet/src/test/resources/applicationContext.xml rename to plugins/portlet-mocks/src/test/resources/applicationContext.xml diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml index 5fc6480..31d35c5 100644 --- a/plugins/portlet/pom.xml +++ b/plugins/portlet/pom.xml @@ -33,16 +33,11 @@ <dependencies> <!-- junit and related JARs are needed for 'compile'! --> - <!-- Due to StrutsPortletTestCase shall be distributed to applications. --> - <dependency> - <groupId>org.apache.struts</groupId> - <artifactId>struts2-junit-plugin</artifactId> - <optional>true</optional> - </dependency> <dependency> <groupId>org.apache.struts</groupId> - <artifactId>struts2-junit-portlet-plugin</artifactId> + <artifactId>struts2-portlet-mocks-plugin</artifactId> + <scope>test</scope> <optional>true</optional> </dependency> diff --git a/plugins/portlet/src/test/java/org/apache/struts2/StrutsTestCasePortletTests.java b/plugins/portlet/src/test/java/org/apache/struts2/StrutsTestCasePortletTests.java new file mode 100644 index 0000000..1e7ea61 --- /dev/null +++ b/plugins/portlet/src/test/java/org/apache/struts2/StrutsTestCasePortletTests.java @@ -0,0 +1,224 @@ +/* + * 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; + +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionProxy; +import com.opensymphony.xwork2.ActionProxyFactory; +import com.opensymphony.xwork2.XWorkTestCase; +import com.opensymphony.xwork2.config.Configuration; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.dispatcher.HttpParameters; +import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; +import org.apache.struts2.util.StrutsTestCaseHelper; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.mock.web.MockPageContext; +import org.springframework.mock.web.MockServletContext; + +/* + * Changes: This is a copy of org.apache.struts2.StrutsTestCase from the Struts 2 junit-plugin, kept in + * in the same package org.apache.struts2 and renamed. Removed some unused imports, made + * imports alphabetical and made some whitespace changes and modified a comment. + * The StrutsTestCasePortletTests is needed in order to break a dependency-cycle between the + * portlet-plugin and junit-plugin with respect to StrutsTestCase. + * + * Note: If the junit-plugin StrutsTestCase is updated/modified, it may be appropriate to update + * this version as well, for consistency (but they may diverge in the future). + * The StrutsTestCasePortletTests is intentionally kept at the test scope of the portlet-plugin + * as it only exists due to the dependency-cycle issue. The junit-plugin StrutsTestCase should + * be used elswehere. + */ + +/** + * Base test case for JUnit testing Struts within the portlet-plugin unit tests. + */ +public abstract class StrutsTestCasePortletTests extends XWorkTestCase { + protected MockHttpServletResponse response; + protected MockHttpServletRequest request; + protected MockPageContext pageContext; + protected MockServletContext servletContext; + protected Map<String, String> dispatcherInitParams; + protected Dispatcher dispatcher; + protected DefaultResourceLoader resourceLoader = new DefaultResourceLoader(); + + /** + * gets an object from the stack after an action is executed + */ + protected Object findValueAfterExecute(String key) { + return ServletActionContext.getValueStack(request).findValue(key); + } + + /** + * Executes an action and returns it's output (not the result returned from + * execute()), but the actual output that would be written to the response. + * For this to work the configured result for the action needs to be + * FreeMarker, or Velocity (JSPs can be used with the Embedded JSP plugin) + */ + protected String executeAction(String uri) throws ServletException, UnsupportedEncodingException { + request.setRequestURI(uri); + ActionMapping mapping = getActionMapping(request); + + assertNotNull(mapping); + Dispatcher.getInstance().serviceAction(request, response, mapping); + + if (response.getStatus() != HttpServletResponse.SC_OK) { + throw new ServletException("Error code [" + response.getStatus() + "], Error: [" + response.getErrorMessage() + "]"); + } + return response.getContentAsString(); + } + + /** + * Creates an action proxy for a request, and sets parameters of the ActionInvocation to the passed + * parameters. Make sure to set the request parameters in the protected "request" object before calling this method. + */ + protected ActionProxy getActionProxy(String uri) { + request.setRequestURI(uri); + ActionMapping mapping = getActionMapping(request); + String namespace = mapping.getNamespace(); + String name = mapping.getName(); + String method = mapping.getMethod(); + + Configuration config = configurationManager.getConfiguration(); + ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy( + namespace, name, method, new HashMap<String, Object>(), true, false); + + initActionContext(proxy.getInvocation().getInvocationContext()); + + // this is normally done in onSetUp(), but we are using Struts internal + // objects (proxy and action invocation) + // so we have to hack around so it works + ServletActionContext.setServletContext(servletContext); + ServletActionContext.setRequest(request); + ServletActionContext.setResponse(response); + + return proxy; + } + + /** + * A helper method which allows instantiate an action if this action extends + * {@link com.opensymphony.xwork2.ActionSupport} or any other action class + * that requires framework's dependencies injection. + */ + protected <T> T createAction(Class<T> clazz) { + return container.inject(clazz); + } + + protected void initActionContext(ActionContext actionContext) { + actionContext.setParameters(HttpParameters.create(request.getParameterMap()).build()); + initSession(actionContext); + applyAdditionalParams(actionContext); + // set the action context to the one used by the proxy + ActionContext.setContext(actionContext); + } + + protected void initSession(ActionContext actionContext) { + if (actionContext.getSession() == null) { + actionContext.setSession(new HashMap<String, Object>()); + request.setSession(new MockHttpSession(servletContext)); + } + } + + /** + * Can be overwritten in subclass to provide additional context's params and settings used during action invocation + * + * @param context current {@link ActionContext} + */ + protected void applyAdditionalParams(ActionContext context) { + // empty be default + } + + /** + * Finds an ActionMapping for a given request + */ + protected ActionMapping getActionMapping(HttpServletRequest request) { + return container.getInstance(ActionMapper.class).getMapping(request, configurationManager); + } + + /** + * Finds an ActionMapping for a given url + */ + protected ActionMapping getActionMapping(String url) { + MockHttpServletRequest req = new MockHttpServletRequest(); + req.setRequestURI(url); + return getActionMapping(req); + } + + /** + * Injects dependencies on an Object using Struts internal IoC container + */ + protected void injectStrutsDependencies(Object object) { + container.inject(object); + } + + /** + * Sets up the configuration settings, XWork configuration, and + * message resources + */ + protected void setUp() throws Exception { + super.setUp(); + initServletMockObjects(); + setupBeforeInitDispatcher(); + dispatcher = initDispatcher(dispatcherInitParams); + setupAfterInitDispatcher(dispatcher); + } + + protected void setupBeforeInitDispatcher() throws Exception { + // empty by default + } + + protected void setupAfterInitDispatcher(Dispatcher dispatcher) { + // empty by default + } + + protected void initServletMockObjects() { + servletContext = new MockServletContext(resourceLoader); + response = new MockHttpServletResponse(); + request = new MockHttpServletRequest(); + pageContext = new MockPageContext(servletContext, request, response); + } + + protected Dispatcher initDispatcher(Map<String, String> params) { + Dispatcher du = StrutsTestCaseHelper.initDispatcher(servletContext, params); + configurationManager = du.getConfigurationManager(); + configuration = configurationManager.getConfiguration(); + container = configuration.getContainer(); + return du; + } + + protected void tearDown() throws Exception { + super.tearDown(); + // maybe someone else already destroyed Dispatcher + if (dispatcher != null && dispatcher.getConfigurationManager() != null) { + dispatcher.cleanup(); + dispatcher = null; + } + StrutsTestCaseHelper.tearDown(); + } + +} 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 index 0272043..fbc87db 100644 --- a/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java +++ b/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java @@ -22,7 +22,7 @@ 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.StrutsTestCasePortletTests; import org.apache.struts2.portlet.PortletConstants; import org.apache.struts2.mock.web.portlet.MockMimeResponse; import org.apache.struts2.mock.web.portlet.MockPortletContext; @@ -35,7 +35,7 @@ import java.io.StringWriter; import java.io.Writer; import java.util.Collections; -public class PortletUrlRendererTest extends StrutsTestCase { +public class PortletUrlRendererTest extends StrutsTestCasePortletTests { private ValueStack stack; diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java index 533b2ea..f324cf2 100644 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java +++ b/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java @@ -22,7 +22,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; -import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.StrutsTestCasePortletTests; import org.apache.struts2.dispatcher.DefaultActionSupport; import org.apache.struts2.portlet.PortletPhase; import org.apache.struts2.portlet.dispatcher.DirectRenderFromEventAction; @@ -39,7 +39,7 @@ import static org.apache.struts2.portlet.PortletConstants.REQUEST; import static org.apache.struts2.portlet.PortletConstants.RESPONSE; import static org.apache.struts2.portlet.PortletConstants.STACK_FROM_EVENT_PHASE; -public class PortletStateInterceptorTest extends StrutsTestCase { +public class PortletStateInterceptorTest extends StrutsTestCasePortletTests { private PortletStateInterceptor interceptor; diff --git a/pom.xml b/pom.xml index 2c83f31..bfbb5d4 100644 --- a/pom.xml +++ b/pom.xml @@ -566,12 +566,12 @@ </dependency> <dependency> <groupId>org.apache.struts</groupId> - <artifactId>struts2-junit-plugin</artifactId> + <artifactId>struts2-portlet-mocks-plugin</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> - <artifactId>struts2-junit-portlet-plugin</artifactId> + <artifactId>struts2-junit-plugin</artifactId> <version>${project.version}</version> </dependency> <dependency>