This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch fix/improves-code-quality
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 14437155e3c1210250666252c3330ca200bad046
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Sun Feb 2 16:21:07 2025 +0100

    Improves code quality
    Uses existing function to split input using comma
---
 .../convention/DefaultResultMapBuilder.java        | 201 ++++++++++-----------
 .../convention/DefaultResultMapBuilderTest.java    | 102 +++++++----
 2 files changed, 162 insertions(+), 141 deletions(-)

diff --git 
a/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
 
b/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
index 2688e32d7..380b77994 100644
--- 
a/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
+++ 
b/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
@@ -18,26 +18,27 @@
  */
 package org.apache.struts2.convention;
 
-import org.apache.struts2.action.Action;
+import jakarta.servlet.ServletContext;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.struts2.ActionContext;
+import org.apache.struts2.action.Action;
 import org.apache.struts2.config.ConfigurationException;
 import org.apache.struts2.config.entities.PackageConfig;
 import org.apache.struts2.config.entities.ResultConfig;
 import org.apache.struts2.config.entities.ResultTypeConfig;
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.convention.annotation.Results;
 import org.apache.struts2.inject.Container;
 import org.apache.struts2.inject.Inject;
+import org.apache.struts2.util.TextParseUtil;
 import org.apache.struts2.util.finder.ClassLoaderInterface;
 import org.apache.struts2.util.finder.ClassLoaderInterfaceDelegate;
 import org.apache.struts2.util.finder.ResourceFinder;
 import org.apache.struts2.util.finder.Test;
-import jakarta.servlet.ServletContext;
-import org.apache.commons.lang3.BooleanUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.struts2.convention.annotation.Result;
-import org.apache.struts2.convention.annotation.Results;
 
 import java.io.IOException;
 import java.net.URL;
@@ -123,23 +124,24 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
     /**
      * Constructs the SimpleResultMapBuilder using the given result location.
      *
-     * @param   servletContext The ServletContext for finding the resources of 
the web application.
-     * @param   container The Xwork container
-     * @param   relativeResultTypes The list of result types that can have 
locations that are relative
-     *          and the result location (which is the resultPath plus the 
namespace) prepended to them.
+     * @param servletContext      The ServletContext for finding the resources 
of the web application.
+     * @param container           The Xwork container
+     * @param relativeResultTypes The list of result types that can have 
locations that are relative
+     *                            and the result location (which is the 
resultPath plus the namespace) prepended to them.
      */
     @Inject
     public DefaultResultMapBuilder(ServletContext servletContext, Container 
container,
-            @Inject(ConventionConstants.CONVENTION_RELATIVE_RESULT_TYPES) 
String relativeResultTypes) {
+                                   
@Inject(ConventionConstants.CONVENTION_RELATIVE_RESULT_TYPES) String 
relativeResultTypes) {
         this.servletContext = servletContext;
-        this.relativeResultTypes = 
Set.of(relativeResultTypes.split("\\s*[,]\\s*"));
-        this.conventionsService = 
container.getInstance(ConventionsService.class, 
container.getInstance(String.class, 
ConventionConstants.CONVENTION_CONVENTIONS_SERVICE));
+        this.relativeResultTypes = 
TextParseUtil.commaDelimitedStringToSet(relativeResultTypes);
+        String instanceName = container.getInstance(String.class, 
ConventionConstants.CONVENTION_CONVENTIONS_SERVICE);
+        this.conventionsService = 
container.getInstance(ConventionsService.class, instanceName);
     }
 
     /**
      * @param flatResultLayout If 'true' result resources will be expected to 
be in the form
-     *          ${namespace}/${actionName}-${result}.${extension}, otherwise 
in the form
-     *          ${namespace}/${actionName}/${result}.${extension}
+     *                         
${namespace}/${actionName}-${result}.${extension}, otherwise in the form
+     *                         
${namespace}/${actionName}/${result}.${extension}
      */
     @Inject(ConventionConstants.CONVENTION_RESULT_FLAT_LAYOUT)
     public void setFlatResultLayout(String flatResultLayout) {
@@ -150,8 +152,8 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
      * {@inheritDoc}
      */
     public Map<String, ResultConfig> build(Class<?> actionClass,
-        org.apache.struts2.convention.annotation.Action annotation, String 
actionName,
-            PackageConfig packageConfig) {
+                                           
org.apache.struts2.convention.annotation.Action annotation, String actionName,
+                                           PackageConfig packageConfig) {
 
         // Get the default result location from the annotation or configuration
         String defaultResultPath = 
conventionsService.determineResultPath(actionClass);
@@ -164,7 +166,7 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
         // Check for resources with the action name
         final String namespace = packageConfig.getNamespace();
         if (namespace != null && namespace.startsWith("/")) {
-             defaultResultPath = defaultResultPath + namespace.substring(1);
+            defaultResultPath = defaultResultPath + namespace.substring(1);
         } else if (namespace != null) {
             defaultResultPath = defaultResultPath + namespace;
         }
@@ -184,7 +186,7 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
         Map<String, ResultConfig> results = new HashMap<>();
         Map<String, ResultTypeConfig> resultsByExtension = 
conventionsService.getResultTypesByExtension(packageConfig);
         createFromResources(actionClass, results, defaultResultPath, 
resultPrefix, actionName,
-            packageConfig, resultsByExtension);
+                packageConfig, resultsByExtension);
 
         //get inherited @Results and @Result (class level)
         for (Class<?> clazz : ReflectionTools.getClassHierarchy(actionClass)) {
@@ -202,11 +204,12 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
 
     /**
      * Creates results from @Results and @Result annotations
-     * @param actionClass  class to check for annotations
-     * @param packageConfig packageConfig where the action will be located
-     * @param defaultResultPath default result path
-     * @param results map of results
-     * @param resultsByExtension  map of result types keyed by extension
+     *
+     * @param actionClass        class to check for annotations
+     * @param packageConfig      packageConfig where the action will be located
+     * @param defaultResultPath  default result path
+     * @param results            map of results
+     * @param resultsByExtension map of result types keyed by extension
      */
     protected void createResultsFromAnnotations(Class<?> actionClass, 
PackageConfig packageConfig, String defaultResultPath,
                                                 Map<String, ResultConfig> 
results, Map<String, ResultTypeConfig> resultsByExtension) {
@@ -228,24 +231,23 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
      * Creates any result types from the resources available in the web 
application. This scans the
      * web application resources using the servlet context.
      *
-     * @param   actionClass The action class the results are being built for.
-     * @param   results The results map to put the result configs created into.
-     * @param   resultPath The calculated path to the resources.
-     * @param   resultPrefix The prefix for the result. This is usually 
<code>/resultPath/actionName</code>.
-     * @param   actionName The action name which is used only for logging in 
this implementation.
-     * @param   packageConfig The package configuration which is passed along 
in order to determine
-     * @param   resultsByExtension The map of extensions to result type 
configuration instances.
+     * @param actionClass        The action class the results are being built 
for.
+     * @param results            The results map to put the result configs 
created into.
+     * @param resultPath         The calculated path to the resources.
+     * @param resultPrefix       The prefix for the result. This is usually 
<code>/resultPath/actionName</code>.
+     * @param actionName         The action name which is used only for 
logging in this implementation.
+     * @param packageConfig      The package configuration which is passed 
along in order to determine
+     * @param resultsByExtension The map of extensions to result type 
configuration instances.
      */
     protected void createFromResources(Class<?> actionClass, Map<String, 
ResultConfig> results,
-            final String resultPath, final String resultPrefix, final String 
actionName,
-            PackageConfig packageConfig, Map<String, ResultTypeConfig> 
resultsByExtension) {
+                                       final String resultPath, final String 
resultPrefix, final String actionName,
+                                       PackageConfig packageConfig, 
Map<String, ResultTypeConfig> resultsByExtension) {
         if (LOG.isTraceEnabled()) {
-            LOG.trace("Searching for results in the Servlet container at [{}]" 
+
-                       " with result prefix of [#1]", resultPath, 
resultPrefix);
+            LOG.trace("Searching for results in the Servlet container at [{}] 
with result prefix of [{}]",
+                    resultPath, resultPrefix);
         }
 
         // Build from web application using the ServletContext
-        @SuppressWarnings("unchecked")
         Set<String> paths = servletContext.getResourcePaths(flatResultLayout ? 
resultPath : resultPrefix);
         if (paths != null) {
             for (String path : paths) {
@@ -255,13 +257,12 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
                 if (StringUtils.isBlank(fileName) || 
StringUtils.startsWith(fileName, ".")) {
                     LOG.trace("Ignoring file without name [{}]", path);
                     continue;
-                }
-                else if(fileName.lastIndexOf(".") > 0){
-                    String suffix = 
fileName.substring(fileName.lastIndexOf(".")+1);
+                } else if (fileName.lastIndexOf(".") > 0) {
+                    String suffix = 
fileName.substring(fileName.lastIndexOf(".") + 1);
 
-                    
if(conventionsService.getResultTypesByExtension(packageConfig).get(suffix) == 
null) {
+                    if 
(conventionsService.getResultTypesByExtension(packageConfig).get(suffix) == 
null) {
                         LOG.debug("No result type defined for file suffix : 
[{}]. Ignoring file {}", suffix, fileName);
-                       continue;
+                        continue;
                     }
                 }
 
@@ -270,11 +271,10 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
         }
 
         // Building from the classpath
-        String classPathLocation = resultPath.startsWith("/") ?
-            resultPath.substring(1, resultPath.length()) : resultPath;
+        String classPathLocation = resultPath.startsWith("/") ? 
resultPath.substring(1) : resultPath;
         if (LOG.isTraceEnabled()) {
             LOG.trace("Searching for results in the class path at [{}]"
-                    + " with a result prefix of [{}] and action name [{}]", 
classPathLocation, resultPrefix,
+                            + " with a result prefix of [{}] and action name 
[{}]", classPathLocation, resultPrefix,
                     actionName);
         }
 
@@ -296,7 +296,7 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
                 }
             }
         } catch (IOException ex) {
-            LOG.error("Unable to scan directory [{}] for results", ex, 
classPathLocation);
+            LOG.error("Unable to scan directory [{}] for results", 
classPathLocation, ex);
         }
     }
 
@@ -320,30 +320,28 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
     }
 
     private Test<URL> getResourceTest(final String resultPath, final String 
actionName) {
-        return new Test<URL>() {
-            public boolean test(URL url) {
-                String urlStr = url.toString();
-                int index = urlStr.lastIndexOf(resultPath);
-                String path = urlStr.substring(index + resultPath.length());
-                return path.startsWith(actionName);
-            }
+        return url -> {
+            String urlStr = url.toString();
+            int index = urlStr.lastIndexOf(resultPath);
+            String path = urlStr.substring(index + resultPath.length());
+            return path.startsWith(actionName);
         };
     }
 
     /**
      * Makes all the results for the given path.
      *
-     * @param   actionClass The action class the results are being built for.
-     * @param   path The path to build the result for.
-     * @param   resultPrefix The is the result prefix which is the result 
location plus the action name.
-     *          This is used to determine if the path contains a result code 
or not.
-     * @param   results The Map to place the result(s)
-     * @param   packageConfig The package config the results belong to.
-     * @param   resultsByExtension The map of extensions to result type 
configuration instances.
+     * @param actionClass        The action class the results are being built 
for.
+     * @param path               The path to build the result for.
+     * @param resultPrefix       The is the result prefix which is the result 
location plus the action name.
+     *                           This is used to determine if the path 
contains a result code or not.
+     * @param results            The Map to place the result(s)
+     * @param packageConfig      The package config the results belong to.
+     * @param resultsByExtension The map of extensions to result type 
configuration instances.
      */
     protected void makeResults(Class<?> actionClass, String path, String 
resultPrefix,
-            Map<String, ResultConfig> results, PackageConfig packageConfig,
-            Map<String, ResultTypeConfig> resultsByExtension) {
+                               Map<String, ResultConfig> results, 
PackageConfig packageConfig,
+                               Map<String, ResultTypeConfig> 
resultsByExtension) {
 
         if (path.startsWith(resultPrefix)) {
             int indexOfDot = path.indexOf('.', resultPrefix.length());
@@ -351,26 +349,27 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
             // This case is when the path doesn't contain a result code
             if (indexOfDot == resultPrefix.length()) {
                 if (LOG.isTraceEnabled()) {
-                    LOG.trace("The result file [{}] has no result code and 
therefore" +
-                        " will be associated with success, input and error by 
default. This might" +
-                        " be overridden by another result file or an 
annotation.", path);
+                    LOG.trace("""
+                            The result file [{}] has no result code and 
therefore
+                            will be associated with success, input and error 
by default.
+                            This might be overridden by another result file or 
an annotation.
+                            """.stripIndent(), path);
                 }
 
                 addResult(actionClass, path, results, packageConfig, 
resultsByExtension, Action.SUCCESS);
                 addResult(actionClass, path, results, packageConfig, 
resultsByExtension, Action.INPUT);
                 addResult(actionClass, path, results, packageConfig, 
resultsByExtension, Action.ERROR);
 
-            // This case is when the path contains a result code
+                // This case is when the path contains a result code
             } else if (indexOfDot > resultPrefix.length()) {
                 if (LOG.isTraceEnabled()) {
-                    LOG.trace("The result file [{}] has a result code and 
therefore" +
-                        " will be associated with only that result code.", 
path);
+                    LOG.trace("The result file [{}] has a result code and 
therefore will be associated with only that result code.", path);
                 }
 
                 String resultCode = path.substring(resultPrefix.length() + 1, 
indexOfDot);
                 ResultConfig result = createResultConfig(actionClass,
-                    new ResultInfo(resultCode, path, packageConfig, 
resultsByExtension),
-                    packageConfig, null);
+                        new ResultInfo(resultCode, path, packageConfig, 
resultsByExtension),
+                        packageConfig, null);
                 results.put(resultCode, result);
             }
         }
@@ -380,16 +379,16 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
      * Checks if result was already assigned, if not checks global results 
first and if exists, adds reference to it.
      * If not, creates package specific result.
      *
-     * @param   actionClass The action class the results are being built for.
-     * @param   path The path to build the result for.
-     * @param   results The Map to place the result(s)
-     * @param   packageConfig The package config the results belong to.
-     * @param   resultsByExtension The map of extensions to result type 
configuration instances.
-     * @param   resultKey The result name to use
+     * @param actionClass        The action class the results are being built 
for.
+     * @param path               The path to build the result for.
+     * @param results            The Map to place the result(s)
+     * @param packageConfig      The package config the results belong to.
+     * @param resultsByExtension The map of extensions to result type 
configuration instances.
+     * @param resultKey          The result name to use
      */
     protected void addResult(Class<?> actionClass, String path, Map<String, 
ResultConfig> results,
-                           PackageConfig packageConfig, Map<String, 
ResultTypeConfig> resultsByExtension,
-                           String resultKey) {
+                             PackageConfig packageConfig, Map<String, 
ResultTypeConfig> resultsByExtension,
+                             String resultKey) {
 
         if (!results.containsKey(resultKey)) {
             Map<String, ResultConfig> globalResults = 
packageConfig.getAllGlobalResults();
@@ -405,8 +404,8 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
     }
 
     protected void createFromAnnotations(Map<String, ResultConfig> 
resultConfigs,
-            String resultPath, PackageConfig packageConfig, Result[] results,
-            Class<?> actionClass, Map<String, ResultTypeConfig> 
resultsByExtension) {
+                                         String resultPath, PackageConfig 
packageConfig, Result[] results,
+                                         Class<?> actionClass, Map<String, 
ResultTypeConfig> resultsByExtension) {
         // Check for multiple results on the class
         for (Result result : results) {
             for (String name : result.name()) {
@@ -425,25 +424,23 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
      * information from the annotation and anything that isn't specified will 
be fetched from the
      * PackageConfig defaults (if they exist).
      *
-     * @param   actionClass The action class the results are being built for.
-     * @param   info The result info that is used to create the ResultConfig 
instance.
-     * @param   packageConfig The PackageConfig to use to fetch defaults for 
result and parameters.
-     * @param   result (Optional) The result annotation to pull additional 
information from.
-     * @return  The ResultConfig or null if the Result annotation is given and 
the annotation is
-     *          targeted to some other action than this one.
+     * @param actionClass   The action class the results are being built for.
+     * @param info          The result info that is used to create the 
ResultConfig instance.
+     * @param packageConfig The PackageConfig to use to fetch defaults for 
result and parameters.
+     * @param result        (Optional) The result annotation to pull 
additional information from.
+     * @return The ResultConfig or null if the Result annotation is given and 
the annotation is
+     * targeted to some other action than this one.
      */
-    @SuppressWarnings(value = {"unchecked"})
-    protected ResultConfig createResultConfig(Class<?> actionClass, ResultInfo 
info,
-            PackageConfig packageConfig, Result result) {
+    protected ResultConfig createResultConfig(Class<?> actionClass, ResultInfo 
info, PackageConfig packageConfig, Result result) {
         // Look up by the type that was determined from the annotation or by 
the extension in the
         // ResultInfo class
         ResultTypeConfig resultTypeConfig = 
packageConfig.getAllResultTypeConfigs().get(info.type);
         if (resultTypeConfig == null) {
             throw new ConfigurationException("The Result type [" + info.type + 
"] which is" +
-                " defined in the Result annotation on the class [" + 
actionClass + "] or determined" +
-                " by the file extension or is the default result type for the 
PackageConfig of the" +
-                " action, could not be found as a result-type defined for the 
Struts/XWork package [" +
-                packageConfig.getName() + "]");
+                    " defined in the Result annotation on the class [" + 
actionClass + "] or determined" +
+                    " by the file extension or is the default result type for 
the PackageConfig of the" +
+                    " action, could not be found as a result-type defined for 
the Struts/XWork package [" +
+                    packageConfig.getName() + "]");
         }
 
         // Add the default parameters for the result type config (if any)
@@ -474,15 +471,15 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
         public final String type;
 
         public ResultInfo(String name, String location, PackageConfig 
packageConfig,
-                Map<String, ResultTypeConfig> resultsByExtension) {
+                          Map<String, ResultTypeConfig> resultsByExtension) {
             this.name = name;
             this.location = location;
             this.type = determineType(location, packageConfig, 
resultsByExtension);
         }
 
         public ResultInfo(String name, Result result, PackageConfig 
packageConfig,
-                String resultPath, Class<?> actionClass,
-                Map<String, ResultTypeConfig> resultsByExtension) {
+                          String resultPath, Class<?> actionClass,
+                          Map<String, ResultTypeConfig> resultsByExtension) {
             this.name = name;
             if (StringUtils.isNotBlank(result.type())) {
                 this.type = result.type();
@@ -490,8 +487,8 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
                 this.type = determineType(result.location(), packageConfig, 
resultsByExtension);
             } else {
                 throw new ConfigurationException("The action class [" + 
actionClass + "] contains a " +
-                    "result annotation that has no type parameter and no 
location parameter. One of " +
-                    "these must be defined.");
+                        "result annotation that has no type parameter and no 
location parameter. One of " +
+                        "these must be defined.");
             }
 
             // See if we can handle relative locations or not
@@ -507,7 +504,7 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
         }
 
         String determineType(String location, PackageConfig packageConfig,
-                Map<String, ResultTypeConfig> resultsByExtension) {
+                             Map<String, ResultTypeConfig> resultsByExtension) 
{
             int indexOfDot = location.lastIndexOf(".");
             if (indexOfDot > 0) {
                 String extension = location.substring(indexOfDot + 1);
@@ -516,7 +513,7 @@ public class DefaultResultMapBuilder implements 
ResultMapBuilder {
                     return resultTypeConfig.getName();
                 } else
                     throw new ConfigurationException("Unable to find a result 
type for extension [" + extension + "] " +
-                               "in location attribute [" + location + "].");
+                            "in location attribute [" + location + "].");
             } else {
                 return packageConfig.getFullDefaultResultType();
             }
diff --git 
a/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
 
b/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
index 0b7ab7c6e..9ae2808ff 100644
--- 
a/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
+++ 
b/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
@@ -18,36 +18,48 @@
  */
 package org.apache.struts2.convention;
 
+import jakarta.servlet.ServletContext;
 import org.apache.struts2.config.entities.PackageConfig;
 import org.apache.struts2.config.entities.ResultConfig;
 import org.apache.struts2.config.entities.ResultTypeConfig;
-import org.apache.struts2.inject.Container;
-import junit.framework.TestCase;
 import org.apache.struts2.convention.actions.NoAnnotationAction;
-import org.apache.struts2.convention.actions.result.*;
+import org.apache.struts2.convention.actions.result.ActionLevelResultAction;
+import org.apache.struts2.convention.actions.result.ActionLevelResultsAction;
+import 
org.apache.struts2.convention.actions.result.ActionLevelResultsNamesAction;
+import org.apache.struts2.convention.actions.result.ClassLevelResultAction;
+import org.apache.struts2.convention.actions.result.ClassLevelResultsAction;
+import org.apache.struts2.convention.actions.result.GlobalResultAction;
+import org.apache.struts2.convention.actions.result.GlobalResultOverrideAction;
+import org.apache.struts2.convention.actions.result.InheritedResultExtends;
+import org.apache.struts2.convention.actions.result.InheritedResultsExtends;
+import 
org.apache.struts2.convention.actions.result.OverrideInheritedResultExtends;
+import org.apache.struts2.convention.actions.result.OverrideResultAction;
 import 
org.apache.struts2.convention.actions.resultpath.ClassLevelResultPathAction;
 import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.inject.Container;
 import org.apache.struts2.result.ServletDispatcherResult;
 import org.easymock.EasyMock;
-import org.easymock.IAnswer;
+import org.junit.Before;
+import org.junit.Test;
 
-import jakarta.servlet.ServletContext;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
 import static org.apache.struts2.convention.ReflectionTools.getAnnotation;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
 /**
- * <p>
  * This class tests the simple result map builder.
- * </p>
  */
-public class DefaultResultMapBuilderTest extends TestCase {
+public class DefaultResultMapBuilderTest {
+
     private Container container;
     private ConventionsService conventionsService;
 
-    public void testBuild() throws Exception {
+    @Test
+    public void testBuild() {
         ServletContext context = mockServletContext("/WEB-INF/location");
 
         // Test with a slash
@@ -66,7 +78,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         verify(context, "/WEB-INF/location", results, false);
     }
 
-    public void testResultOverrride() throws Exception {
+    @Test
+    public void testResultOverride() throws Exception {
         ServletContext context = mockServletContext("/WEB-INF/location");
 
         // Test with a slash
@@ -80,7 +93,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         assertEquals("/WEB-INF/location/namespace/error-overriden.jsp", 
result.getParams().get("location"));
     }
 
-    public void testGlobalResult() throws Exception {
+    @Test
+    public void testGlobalResult() {
 
         ServletContext context = mockServletContext("/WEB-INF/location");
         this.conventionsService = new 
ConventionsServiceImpl("/WEB-INF/location");
@@ -105,8 +119,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         assertEquals("/globalError.jsp", result.getParams().get("location"));
     }
 
-    public void testGlobalResultOverride() throws Exception {
-
+    @Test
+    public void testGlobalResultOverride() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
         String resultPath = "/WEB-INF/location";
         // Setup some mock jsps
@@ -139,7 +153,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         assertEquals(resultPath + "/namespace/action-error.jsp", 
result.getParams().get("location"));
     }
 
-    public void testNull() throws Exception {
+    @Test
+    public void testNull() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
         
EasyMock.expect(context.getResourcePaths("/WEB-INF/location/namespace/")).andReturn(null);
         EasyMock.replay(context);
@@ -153,7 +168,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testResultPath() throws Exception {
+    @Test
+    public void testResultPath() {
         ServletContext context = mockServletContext("/class-level");
 
         // Test with a result path
@@ -164,7 +180,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         verify(context, "/class-level", results, false);
     }
 
-    public void testFromServletContextWithBadNames() throws Exception {
+    @Test
+    public void testFromServletContextWithBadNames() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -184,7 +201,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
 
     }
 
-    public void testFromServletContext() throws Exception {
+    @Test
+    public void testFromServletContext() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -218,7 +236,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
 
     }
 
-    public void testFromServletContextNotFlat() throws Exception {
+    @Test
+    public void testFromServletContextNotFlat() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -254,7 +273,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testIgnoreFilesWithoutName() throws Exception {
+    @Test
+    public void testIgnoreFilesWithoutName() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -278,7 +298,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
 
     }
 
-    public void testClassLevelSingleResultAnnotation() throws Exception {
+    @Test
+    public void testClassLevelSingleResultAnnotation() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -301,7 +322,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testClassLevelInheritedSingleResultAnnotation() throws 
Exception {
+    @Test
+    public void testClassLevelInheritedSingleResultAnnotation() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -324,7 +346,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-     public void testClassLevelOverwriteInheritedSingleResultAnnotation() 
throws Exception {
+    @Test
+    public void testClassLevelOverwriteInheritedSingleResultAnnotation() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -349,7 +372,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testClassLevelMultipleResultAnnotation() throws Exception {
+    @Test
+    public void testClassLevelMultipleResultAnnotation() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -388,7 +412,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testClassLevelInheritanceMultipleResultAnnotation() throws 
Exception {
+    @Test
+    public void testClassLevelInheritanceMultipleResultAnnotation() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -427,7 +452,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testActionLevelSingleResultAnnotation() throws Exception {
+    @Test
+    public void testActionLevelSingleResultAnnotation() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -450,7 +476,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testActionLevelMultipleResultAnnotation() throws Exception {
+    @Test
+    public void testActionLevelMultipleResultAnnotation() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -485,7 +512,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testActionLevelMultipleResultNamesAnnotation() throws 
Exception {
+    @Test
+    public void testActionLevelMultipleResultNamesAnnotation() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -520,7 +548,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testActionLevelMultipleResultNamesAnnotationNoName() throws 
Exception {
+    @Test
+    public void testActionLevelMultipleResultNamesAnnotationNoName() {
         ServletContext context = 
EasyMock.createStrictMock(ServletContext.class);
 
         // Setup some mock jsps
@@ -543,7 +572,8 @@ public class DefaultResultMapBuilderTest extends TestCase {
         EasyMock.verify(context);
     }
 
-    public void testClassPath() throws Exception {
+    @Test
+    public void testClassPath() {
         ServletContext context = EasyMock.createNiceMock(ServletContext.class);
 
         ResultTypeConfig resultType = new 
ResultTypeConfig.Builder("freemarker", 
"org.apache.struts2.result.ServletDispatcherResult").
@@ -600,8 +630,7 @@ public class DefaultResultMapBuilderTest extends TestCase {
         return context;
     }
 
-    private void verify(ServletContext context, String resultPath, Map<String, 
ResultConfig> results,
-                        boolean redirect) {
+    private void verify(ServletContext context, String resultPath, Map<String, 
ResultConfig> results, boolean redirect) {
         assertEquals(4, results.size());
         assertEquals("success", results.get("success").getName());
         assertEquals("input", results.get("input").getName());
@@ -633,16 +662,11 @@ public class DefaultResultMapBuilderTest extends TestCase 
{
         EasyMock.verify(context);
     }
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
+    @Before
+    public void setup() throws Exception {
         this.container = EasyMock.createNiceMock(Container.class);
         EasyMock.expect(container.getInstance(String.class, 
ConventionConstants.CONVENTION_CONVENTIONS_SERVICE)).andReturn("convention").anyTimes();
-        EasyMock.expect(container.getInstance(ConventionsService.class, 
"convention")).andAnswer(new IAnswer<ConventionsService>() {
-            public ConventionsService answer() throws Throwable {
-                return DefaultResultMapBuilderTest.this.conventionsService;
-            }
-        }).anyTimes();
+        EasyMock.expect(container.getInstance(ConventionsService.class, 
"convention")).andAnswer(() -> 
DefaultResultMapBuilderTest.this.conventionsService).anyTimes();
         EasyMock.replay(this.container);
     }
 }


Reply via email to