WW-4043 Moves TestUtils into junit-plugin
diff --git a/core/src/test/java/org/apache/struts2/TestUtils.java b/core/src/test/java/org/apache/struts2/TestUtils.java
deleted file mode 100644
index 32f5630..0000000
--- a/core/src/test/java/org/apache/struts2/TestUtils.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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 java.io.InputStream;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.StringTokenizer;
-
-/**
- * Utility methods for test classes
- *
- */
-public class TestUtils {
-    /**
-     * normalizes a string so that strings generated on different platforms can be compared.  any group of one or more
-     * space, tab, \r, and \n characters are converted to a single space character
-     *
-     * @param obj the object to be normalized.  normalize will perform its operation on obj.toString().trim() ;
-     * @param appendSpace
-     * @return the normalized string
-     */
-    public static String normalize(Object obj, boolean appendSpace) {
-        StringTokenizer st =
-            new StringTokenizer(obj.toString().trim(), " \t\r\n");
-        StringBuilder buffer = new StringBuilder(128);
-
-        while(st.hasMoreTokens()) {
-            buffer.append(st.nextToken());
-        }
-
-        return buffer.toString();
-    }
-
-    
-    public static String normalize(URL url) throws Exception {
-        return normalize(readContent(url), true);
-    }
-    /**
-     * Attempt to verify the contents of text against the contents of the URL specified. Performs a
-     * trim on both ends
-     *
-     * @param url the HTML snippet that we want to validate against
-     * @throws Exception if the validation failed
-     */
-    public static boolean compare(URL url, String text)
-        throws Exception {
-        /**
-         * compare the trimmed values of each buffer and make sure they're equivalent.  however, let's make sure to
-         * normalize the strings first to account for line termination differences between platforms.
-         */
-        String writerString = TestUtils.normalize(text, true);
-        String bufferString = TestUtils.normalize(readContent(url), true);
-
-        return bufferString.equals(writerString);
-    }
-    
-    
-
-    public static String readContent(URL url)
-        throws Exception {
-        if(url == null) {
-            throw new Exception("unable to verify a null URL");
-        }
-
-        StringBuilder buffer = new StringBuilder(128);
-        try (InputStream in = url.openStream()) {
-            byte[] buf = new byte[4096];
-            int nbytes;
-
-            while ((nbytes = in.read(buf)) > 0) {
-                buffer.append(new String(buf, 0, nbytes));
-            }
-        }
-
-        return buffer.toString();
-    }
-}
diff --git a/plugins/json/src/test/java/org/apache/struts2/json/DefaultJSONWriterTest.java b/plugins/json/src/test/java/org/apache/struts2/json/DefaultJSONWriterTest.java
index 1f34921..05e3280 100644
--- a/plugins/json/src/test/java/org/apache/struts2/json/DefaultJSONWriterTest.java
+++ b/plugins/json/src/test/java/org/apache/struts2/json/DefaultJSONWriterTest.java
@@ -21,6 +21,7 @@
 import org.apache.struts2.StrutsTestCase;
 import org.apache.struts2.json.annotations.JSONFieldBridge;
 import org.apache.struts2.json.bridge.StringBridge;
+import org.apache.struts2.util.TestUtils;
 import org.junit.Test;
 
 import java.net.URL;
diff --git a/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java b/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java
index 9f6b76f..5b9ad8b 100644
--- a/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java
+++ b/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java
@@ -24,6 +24,7 @@
 
 import org.apache.struts2.StrutsStatics;
 import org.apache.struts2.StrutsTestCase;
+import org.apache.struts2.util.TestUtils;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockServletContext;
diff --git a/plugins/json/src/test/java/org/apache/struts2/json/JSONPopulatorTest.java b/plugins/json/src/test/java/org/apache/struts2/json/JSONPopulatorTest.java
index b2101c6..dd6fa72 100644
--- a/plugins/json/src/test/java/org/apache/struts2/json/JSONPopulatorTest.java
+++ b/plugins/json/src/test/java/org/apache/struts2/json/JSONPopulatorTest.java
@@ -27,6 +27,7 @@
 import java.util.Map;
 
 import junit.framework.TestCase;
+import org.apache.struts2.util.TestUtils;
 
 public class JSONPopulatorTest extends TestCase {
 
diff --git a/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java b/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java
index 5062103..5f6aef7 100644
--- a/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java
+++ b/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java
@@ -35,10 +35,9 @@
 
 import javax.servlet.http.HttpServletResponse;
 
-import org.aopalliance.intercept.MethodInterceptor;
-import org.aopalliance.intercept.MethodInvocation;
 import org.apache.struts2.StrutsStatics;
 import org.apache.struts2.StrutsTestCase;
+import org.apache.struts2.util.TestUtils;
 import org.springframework.aop.framework.ProxyFactory;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
diff --git a/plugins/json/src/test/java/org/apache/struts2/json/JSONValidationInterceptorTest.java b/plugins/json/src/test/java/org/apache/struts2/json/JSONValidationInterceptorTest.java
index a4fd58d..d0bd903 100644
--- a/plugins/json/src/test/java/org/apache/struts2/json/JSONValidationInterceptorTest.java
+++ b/plugins/json/src/test/java/org/apache/struts2/json/JSONValidationInterceptorTest.java
@@ -32,6 +32,7 @@
 import org.apache.struts2.StrutsTestCase;
 import org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor;
 import org.apache.struts2.interceptor.validation.SkipValidation;
+import org.apache.struts2.util.TestUtils;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.PrintWriter;
diff --git a/plugins/json/src/test/java/org/apache/struts2/json/TestUtils.java b/plugins/junit/src/main/java/org/apache/struts2/util/TestUtils.java
similarity index 71%
rename from plugins/json/src/test/java/org/apache/struts2/json/TestUtils.java
rename to plugins/junit/src/main/java/org/apache/struts2/util/TestUtils.java
index f48e07b..131f009 100644
--- a/plugins/json/src/test/java/org/apache/struts2/json/TestUtils.java
+++ b/plugins/junit/src/main/java/org/apache/struts2/util/TestUtils.java
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.struts2.json;
+package org.apache.struts2.util;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.junit.Assert;
 
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -39,21 +40,16 @@
      * normalizes a string so that strings generated on different platforms can
      * be compared. any group of one or more space, tab, \r, and \n characters
      * are converted to a single space character
-     * 
-     * @param obj
-     *            the object to be normalized. normalize will perform its
-     *            operation on obj.toString().trim() ;
-     * @param appendSpace
+     *
+     * @param json         the JSON to be normalized. normalize will trim before starting
+     * @param removeSpaces removes white spaces from the JSON or not
      * @return the normalized string
      */
-    public static String normalize(Object obj, boolean appendSpace) {
-        Matcher matcher = WHITESPACE_BLOCK.matcher(StringUtils.trim(obj.toString()));
-        /*
-        FIXME: appendSpace has been always ignored, uncommenting the following line will cause dozen of test fails
-        if (appendSpace) {
-            return matcher.replaceAll(" ");
+    public static String normalize(String json, boolean removeSpaces) {
+        Matcher matcher = WHITESPACE_BLOCK.matcher(StringUtils.trim(json));
+        if (removeSpaces) {
+            return matcher.replaceAll("").replaceAll(" ", "");
         }
-        */
         return matcher.replaceAll("");
     }
 
@@ -64,17 +60,15 @@
     /**
      * Attempt to verify the contents of text against the contents of the URL
      * specified. Performs a trim on both ends
-     * 
-     * @param url
-     *            the HTML snippet that we want to validate against
-     * @throws Exception
-     *             if the validation failed
+     *
+     * @param url the HTML snippet that we want to validate against
+     * @throws Exception if the validation failed
      */
     public static boolean compare(URL url, String text) throws Exception {
-        /**
-         * compare the trimmed values of each buffer and make sure they're
-         * equivalent. however, let's make sure to normalize the strings first
-         * to account for line termination differences between platforms.
+        /*
+          compare the trimmed values of each buffer and make sure they're
+          equivalent. however, let's make sure to normalize the strings first
+          to account for line termination differences between platforms.
          */
         String writerString = TestUtils.normalize(text, true);
         String bufferString = TestUtils.normalize(readContent(url), true);
@@ -85,13 +79,13 @@
     public static void assertEquals(URL source, String text) throws Exception {
         String writerString = TestUtils.normalize(text, true);
         String bufferString = TestUtils.normalize(readContent(source), true);
-        Assert.assertEquals(bufferString,writerString);
+        Assert.assertEquals(bufferString, writerString);
     }
 
     public static String readContent(URL url) throws Exception {
         if (url == null)
             throw new Exception("unable to verify a null URL");
 
-        return IOUtils.toString(url.openStream());
+        return IOUtils.toString(url.openStream(), StandardCharsets.UTF_8);
     }
 }