From 6854397de29a86acdb279b022d00cd5a6bb913d4 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Tue, 28 Sep 2010 07:52:39 +0000 Subject: [PATCH] Resolved WW-3403 - added JUnit 4 StrutsTestCase git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1002045 13f79535-47bb-0310-9956-ffa450edef68 --- plugins/junit/pom.xml | 5 -- .../apache/struts2/StrutsJUnit4TestCase.java | 80 +++++++++++++++++++ .../xwork2/XWorkJUnit4TestCase.java | 68 ++++++++++++++++ 3 files changed, 148 insertions(+), 5 deletions(-) create mode 100644 plugins/junit/src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java create mode 100644 xwork-core/src/main/java/com/opensymphony/xwork2/XWorkJUnit4TestCase.java diff --git a/plugins/junit/pom.xml b/plugins/junit/pom.xml index 7bc42c28c..170e08232 100644 --- a/plugins/junit/pom.xml +++ b/plugins/junit/pom.xml @@ -40,11 +40,6 @@ - - junit - junit - 3.8.2 - org.springframework spring-test diff --git a/plugins/junit/src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java b/plugins/junit/src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java new file mode 100644 index 000000000..0ab97ccfe --- /dev/null +++ b/plugins/junit/src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java @@ -0,0 +1,80 @@ +package org.apache.struts2; + +import com.opensymphony.xwork2.XWorkJUnit4TestCase; +import com.opensymphony.xwork2.interceptor.annotations.After; +import com.opensymphony.xwork2.interceptor.annotations.Before; +import com.opensymphony.xwork2.util.logging.LoggerFactory; +import com.opensymphony.xwork2.util.logging.jdk.JdkLoggerFactory; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.util.StrutsTestCaseHelper; +import org.springframework.mock.web.MockServletContext; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.logging.ConsoleHandler; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + + +public class StrutsJUnit4TestCase extends XWorkJUnit4TestCase { + + static { + ConsoleHandler handler = new ConsoleHandler(); + final SimpleDateFormat df = new SimpleDateFormat("mm:ss.SSS"); + Formatter formatter = new Formatter() { + @Override + public String format(LogRecord record) { + StringBuilder sb = new StringBuilder(); + sb.append(record.getLevel()); + sb.append(':'); + for (int x = 9 - record.getLevel().toString().length(); x > 0; x--) { + sb.append(' '); + } + sb.append('['); + sb.append(df.format(new Date(record.getMillis()))); + sb.append("] "); + sb.append(formatMessage(record)); + sb.append('\n'); + return sb.toString(); + } + }; + handler.setFormatter(formatter); + Logger logger = Logger.getLogger(""); + if (logger.getHandlers().length > 0) + logger.removeHandler(logger.getHandlers()[0]); + logger.addHandler(handler); + logger.setLevel(Level.WARNING); + LoggerFactory.setLoggerFactory(new JdkLoggerFactory()); + } + + /** + * Sets up the configuration settings, XWork configuration, and + * message resources + */ + @Before + public void setUp() throws Exception { + + super.setUp(); + initDispatcher(null); + + } + + protected Dispatcher initDispatcher(Map params) { + Dispatcher du = StrutsTestCaseHelper.initDispatcher(new MockServletContext(), params); + configurationManager = du.getConfigurationManager(); + configuration = configurationManager.getConfiguration(); + container = configuration.getContainer(); + return du; + } + + @After + public void tearDown() throws Exception { + + super.tearDown(); + StrutsTestCaseHelper.tearDown(); + } + +} diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/XWorkJUnit4TestCase.java b/xwork-core/src/main/java/com/opensymphony/xwork2/XWorkJUnit4TestCase.java new file mode 100644 index 000000000..9269d405a --- /dev/null +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/XWorkJUnit4TestCase.java @@ -0,0 +1,68 @@ +package com.opensymphony.xwork2; + +import com.opensymphony.xwork2.config.Configuration; +import com.opensymphony.xwork2.config.ConfigurationException; +import com.opensymphony.xwork2.config.ConfigurationManager; +import com.opensymphony.xwork2.config.ConfigurationProvider; +import com.opensymphony.xwork2.inject.Container; +import com.opensymphony.xwork2.inject.ContainerBuilder; +import com.opensymphony.xwork2.inject.Context; +import com.opensymphony.xwork2.inject.Factory; +import com.opensymphony.xwork2.inject.Scope; +import com.opensymphony.xwork2.test.StubConfigurationProvider; +import com.opensymphony.xwork2.util.XWorkTestCaseHelper; +import com.opensymphony.xwork2.util.location.LocatableProperties; +import org.junit.After; +import org.junit.Before; + +public abstract class XWorkJUnit4TestCase { + + protected ConfigurationManager configurationManager; + protected Configuration configuration; + protected Container container; + protected ActionProxyFactory actionProxyFactory; + + @Before + public void setUp() throws Exception { + configurationManager = XWorkTestCaseHelper.setUp(); + configuration = configurationManager.getConfiguration(); + container = configuration.getContainer(); + actionProxyFactory = container.getInstance(ActionProxyFactory.class); + } + + @After + public void tearDown() throws Exception { + XWorkTestCaseHelper.tearDown(configurationManager); + configurationManager = null; + configuration = null; + container = null; + actionProxyFactory = null; + } + + protected void loadConfigurationProviders(ConfigurationProvider... providers) { + configurationManager = XWorkTestCaseHelper.loadConfigurationProviders(configurationManager, providers); + configuration = configurationManager.getConfiguration(); + container = configuration.getContainer(); + actionProxyFactory = container.getInstance(ActionProxyFactory.class); + } + + protected void loadButAdd(final Class type, final Object impl) { + loadButAdd(type, Container.DEFAULT_NAME, impl); + } + + protected void loadButAdd(final Class type, final String name, final Object impl) { + loadConfigurationProviders(new StubConfigurationProvider() { + @Override + public void register(ContainerBuilder builder, + LocatableProperties props) throws ConfigurationException { + builder.factory(type, name, new Factory() { + public Object create(Context context) throws Exception { + return impl; + } + + }, Scope.SINGLETON); + } + }); + } + +}