You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2018/05/08 07:41:09 UTC

svn commit: r1831151 - in /turbine/fulcrum/trunk: factory/ json/jackson2/ parser/ parser/src/test/org/apache/fulcrum/parser/ testcontainer/ testcontainer/src/java/org/apache/fulcrum/testcontainer/ upload/ upload/src/test/org/apache/fulcrum/upload/

Author: gk
Date: Tue May  8 07:41:08 2018
New Revision: 1831151

URL: http://svn.apache.org/viewvc?rev=1831151&view=rev
Log:
- Fulcrum factory fix parent pom version
- Fulcrum json jackson2 commons-lang align
- Fulcrum parser and upload JUnit 4
- Fulcrum Testcontainer endow with Mockito (default request mock copied from Turbine test)
- Fulcrum uplad with duplicate mock until not upgraded to testcontainer 1.0.8

Modified:
    turbine/fulcrum/trunk/factory/pom.xml
    turbine/fulcrum/trunk/json/jackson2/pom.xml
    turbine/fulcrum/trunk/parser/pom.xml
    turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/BaseValueParserTest.java
    turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java
    turbine/fulcrum/trunk/testcontainer/pom.xml
    turbine/fulcrum/trunk/testcontainer/src/java/org/apache/fulcrum/testcontainer/BaseUnit4Test.java
    turbine/fulcrum/trunk/upload/pom.xml
    turbine/fulcrum/trunk/upload/src/test/org/apache/fulcrum/upload/UploadServiceTest.java

Modified: turbine/fulcrum/trunk/factory/pom.xml
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/factory/pom.xml?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/factory/pom.xml (original)
+++ turbine/fulcrum/trunk/factory/pom.xml Tue May  8 07:41:08 2018
@@ -19,7 +19,8 @@
   <parent>
     <artifactId>turbine-parent</artifactId>
        <groupId>org.apache.turbine</groupId>
-       <version>4-SNAPSHOT</version>
+       <version>4</version>
+       <relativePath></relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>

Modified: turbine/fulcrum/trunk/json/jackson2/pom.xml
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/pom.xml?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson2/pom.xml (original)
+++ turbine/fulcrum/trunk/json/jackson2/pom.xml Tue May  8 07:41:08 2018
@@ -63,7 +63,7 @@
         <dependency>
             <groupId>commons-lang</groupId>
             <artifactId>commons-lang</artifactId>
-            <version>2.5</version>
+            <version>2.6</version>
         </dependency>
         <dependency>
             <groupId>org.apache.avalon.framework</groupId>

Modified: turbine/fulcrum/trunk/parser/pom.xml
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/parser/pom.xml?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/parser/pom.xml (original)
+++ turbine/fulcrum/trunk/parser/pom.xml Tue May  8 07:41:08 2018
@@ -112,7 +112,7 @@
     <dependency>
       <groupId>org.apache.fulcrum</groupId>
       <artifactId>fulcrum-testcontainer</artifactId>
-      <version>1.0.6</version>
+      <version>1.0.7</version>
       <scope>test</scope>
     </dependency>
     <dependency>

Modified: turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/BaseValueParserTest.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/BaseValueParserTest.java?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/BaseValueParserTest.java (original)
+++ turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/BaseValueParserTest.java Tue May  8 07:41:08 2018
@@ -1,6 +1,13 @@
 package org.apache.fulcrum.parser;
 
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -26,7 +33,10 @@ import java.util.Calendar;
 import java.util.Locale;
 
 import org.apache.avalon.framework.component.ComponentException;
-import org.apache.fulcrum.testcontainer.BaseUnitTest;
+import org.apache.fulcrum.testcontainer.BaseUnit4Test;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Testing of the BaseValueParser class
@@ -34,12 +44,8 @@ import org.apache.fulcrum.testcontainer.
  * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
  * @version $Id: BaseValueParserTest.java 222043 2004-12-06 17:47:33Z painter $
  */
-public class BaseValueParserTest extends BaseUnitTest
+public class BaseValueParserTest extends BaseUnit4Test
 {
-    public BaseValueParserTest(String name)
-    {
-		super(name);
-	}
 
 	private BaseValueParser parser;
 
@@ -49,9 +55,9 @@ public class BaseValueParserTest extends
      * Performs any initialization that must happen before each test is run.
      * @throws Exception
      */
-    protected void setUp() throws Exception
+    @Before
+    public void setUp() throws Exception
     {
-        super.setUp();
         try
         {
             parserService = (ParserService)this.lookup(ParserService.ROLE);
@@ -67,12 +73,13 @@ public class BaseValueParserTest extends
     /**
      * Clean up after each test is run.
      */
-    protected void tearDown()
+    @After
+    public void tearDown()
     {
         parserService.putParser(parser);
         this.release(parserService);
     }
-
+    @Test
     public void testDate()
     {
         parser.clear();
@@ -99,7 +106,7 @@ public class BaseValueParserTest extends
 
         assertEquals("Wrong Date value (German)", cal.getTime(), parser.getDate("foo"));
     }
-
+    @Test
     public void testGetByte()
     {
         // no param
@@ -120,7 +127,7 @@ public class BaseValueParserTest extends
         result = parser.getByte("unparsable");
         assertEquals(result, 0);
     }
-
+    @Test
     public void testGetByteObject()
     {
         // no param
@@ -141,7 +148,7 @@ public class BaseValueParserTest extends
         result = parser.getByteObject("unparsable");
         assertNull(result);
     }
-
+    @Test
     public void testGetInt()
     {
         // no param
@@ -186,7 +193,7 @@ public class BaseValueParserTest extends
             assertEquals(compare2[i], arrayResult2[i] );
         }
     }
-
+    @Test
     public void testGetIntObject()
     {
         // no param
@@ -231,7 +238,7 @@ public class BaseValueParserTest extends
             assertEquals(compare2[i], arrayResult2[i] );
         }
     }
-
+    @Test
     public void testGetFloat()
     {
         // no param
@@ -276,7 +283,7 @@ public class BaseValueParserTest extends
             assertEquals(compare2[i], arrayResult2[i], 0);
         }
     }
-
+    @Test
     public void testGetFloatObject()
     {
         // no param
@@ -321,7 +328,7 @@ public class BaseValueParserTest extends
             assertEquals(compare2[i], arrayResult2[i] );
         }
     }
-
+    @Test
     public void testGetDouble()
     {
         // no param
@@ -366,7 +373,7 @@ public class BaseValueParserTest extends
             assertEquals(compare2[i], arrayResult2[i], 0);
         }
     }
-
+    @Test
     public void testGetDoubleObject()
     {
         // no param
@@ -411,7 +418,7 @@ public class BaseValueParserTest extends
             assertEquals(compare2[i], arrayResult2[i] );
         }
     }
-
+    @Test
     public void testGetLong()
     {
         // no param
@@ -456,7 +463,7 @@ public class BaseValueParserTest extends
             assertEquals(compare2[i], arrayResult2[i]);
         }
     }
-
+    @Test
     public void testGetLongObject()
     {
         // no param
@@ -501,7 +508,7 @@ public class BaseValueParserTest extends
             assertEquals(compare2[i], arrayResult2[i] );
         }
     }
-
+    @Test
     public void testGetBoolean()
     {
         // no param
@@ -532,7 +539,7 @@ public class BaseValueParserTest extends
         assertEquals(result, false);
 
     }
-
+    @Test
     public void testGetBooleanObject()
     {
         // no param
@@ -577,12 +584,12 @@ public class BaseValueParserTest extends
         result = parser.getBooleanObject("unparsable");
         assertNull(result);
     }
-
-    public void OFFtestGetBigDecimal()
+    @Test
+    public void testGetBigDecimal()
     {
         // no param
         BigDecimal result = parser.getBigDecimal("invalid");
-        assertEquals(new BigDecimal(0), result);
+        assertNull(result); // object returns NOT new BigDecimal(0)
 
         // default
         result = parser.getBigDecimal("default", new BigDecimal(3));
@@ -596,7 +603,7 @@ public class BaseValueParserTest extends
         // unparsable value
         parser.add("unparsable", "a");
         result = parser.getBigDecimal("unparsable");
-        assertEquals(new BigDecimal(0), result);
+        assertNull(result); //assertEquals(new BigDecimal(0), result);
 
         // array
         parser.add("array", "1");
@@ -624,7 +631,7 @@ public class BaseValueParserTest extends
         }
     }
 
-
+    @Test
     public void testGetString()
     {
         // no param
@@ -657,14 +664,14 @@ public class BaseValueParserTest extends
         }
 
     }
-
+    @Test
     public void testRecycling() throws Exception {
     		parser.setCharacterEncoding("fake");
     		parser.recycle();
     		assertEquals("US-ASCII",parser.getCharacterEncoding());
     }
 
-
+    @Test
     public void testSetup()
     {
         try
@@ -698,7 +705,7 @@ public class BaseValueParserTest extends
 //
 //        assertEquals("Wrong Character Encoding", encoding, vp.getCharacterEncoding());
 //    }
-
+    @Test
     public void testClear()
     {
         parser.clear();
@@ -714,6 +721,7 @@ public class BaseValueParserTest extends
         assertEquals("Wrong number of keys", 0, parser.keySet().size());
     }
 
+    @Test
     public void testDispose()
     {
         parser.clear();
@@ -730,7 +738,7 @@ public class BaseValueParserTest extends
 
         assertTrue(parser.isDisposed());
     }
-
+    @Test
     public void testKeyArray()
     {
         parser.clear();
@@ -784,7 +792,7 @@ public class BaseValueParserTest extends
         Double result = parser.getDoubleObject("unparsable2");
         assertNull("Double object should be null", result);
     }
-
+    @Test
     public void testIntAdd()
     {
         parser.clear();
@@ -811,7 +819,7 @@ public class BaseValueParserTest extends
 
         assertEquals("Wrong Int array value", testValue, intObjs[0].intValue());
     }
-
+    @Test
     public void testIntegerAdd()
     {
         parser.clear();
@@ -838,7 +846,7 @@ public class BaseValueParserTest extends
 
         assertEquals("Wrong Int array value", testValue.intValue(), intObjs[0].intValue());
     }
-
+    @Test
     public void testLongAdd()
     {
         parser.clear();
@@ -865,7 +873,7 @@ public class BaseValueParserTest extends
 
         assertEquals("Wrong Long array value", testValue, longObjs[0].longValue());
     }
-
+    @Test
     public void testLongToInt()
     {
         parser.clear();
@@ -919,7 +927,7 @@ public class BaseValueParserTest extends
 
         assertEquals("Wrong Long array value", testValue, longObjs[0].longValue());
     }
-
+    @Test
     public void testIntToDouble()
     {
         parser.clear();
@@ -946,7 +954,7 @@ public class BaseValueParserTest extends
 
         assertEquals("Wrong Double array value", testValue, doubleObjs[0].doubleValue(), 0.001);
     }
-
+    @Test
     public void testLongToDouble()
     {
         parser.clear();
@@ -1049,7 +1057,7 @@ public class BaseValueParserTest extends
 
         assertEquals("Wrong Long array value", Long.valueOf(testValue).longValue(), longObjs[0].longValue());
     }
-
+    @Test
     public void testStringArray()
     {
         parser.clear();
@@ -1091,7 +1099,7 @@ public class BaseValueParserTest extends
         // should append at the end.
         assertEquals("Wrong element returned", testValue[0], parser.getString("foo"));
     }
-
+    @Test
     public void testRemove()
     {
         parser.clear();
@@ -1118,7 +1126,7 @@ public class BaseValueParserTest extends
         // Test removing null value
         assertNull(parser.remove(null));
     }
-
+    @Test
     public void testRemoveArray()
     {
         parser.clear();
@@ -1152,7 +1160,7 @@ public class BaseValueParserTest extends
 
         assertNull(parser.getString("foo"));
     }
-
+    @Test
     public void testContainsKey()
     {
         parser.clear();
@@ -1164,7 +1172,7 @@ public class BaseValueParserTest extends
         assertTrue(parser.containsKey("bar"));
         assertFalse(parser.containsKey("baz"));
     }
-
+    @Test
     public void testBooleanObject()
     {
         parser.clear();
@@ -1205,7 +1213,7 @@ public class BaseValueParserTest extends
 
         assertNull(parser.getBooleanObject("does-not-exist"));
     }
-
+    @Test
     public void testBoolDefault()
     {
         parser.clear();
@@ -1224,7 +1232,7 @@ public class BaseValueParserTest extends
         assertFalse(parser.getBoolean("does not exist", false));
         assertTrue(parser.getBoolean("does not exist", true));
     }
-
+    @Test
     public void testBooleanDefault()
     {
         parser.clear();
@@ -1244,7 +1252,7 @@ public class BaseValueParserTest extends
 
         assertNull(parser.getBooleanObject("does not exist", null));
     }
-
+    @Test
     public void testDoubleArray()
     {
         parser.clear();
@@ -1312,7 +1320,7 @@ public class BaseValueParserTest extends
         // should append at the end.
         assertEquals("Wrong element returned", testValue[0], parser.getDouble("foo"), 0.001);
     }
-
+    @Test
     public void testFloatArray()
     {
         parser.clear();
@@ -1380,7 +1388,7 @@ public class BaseValueParserTest extends
         // should append at the end.
         assertEquals("Wrong element returned", testValue[0], parser.getFloat("foo"), 0.001f);
     }
-
+    @Test
     public void testBigDecimalArray()
     {
         parser.clear();
@@ -1428,7 +1436,7 @@ public class BaseValueParserTest extends
         // should append at the end.
         assertEquals("Wrong element returned", testValue[0], parser.getBigDecimal("foo").longValue());
     }
-
+    @Test
     public void testIntegerArray()
     {
         parser.clear();
@@ -1496,7 +1504,7 @@ public class BaseValueParserTest extends
         // should append at the end.
         assertEquals("Wrong element returned", testValue[0], parser.getInt("foo"));
     }
-
+    @Test
     public void testLongArray()
     {
         parser.clear();
@@ -1564,7 +1572,7 @@ public class BaseValueParserTest extends
         // should append at the end.
         assertEquals("Wrong element returned", testValue[0], parser.getLong("foo"));
     }
-
+    @Test
     public void testByteArray()
             throws Exception
     {
@@ -1589,7 +1597,7 @@ public class BaseValueParserTest extends
             assertEquals("Wrong value", res[i], testByte[0]);
         }
     }
-
+    @Test
     public void testByte()
     {
         parser.clear();
@@ -1624,7 +1632,7 @@ public class BaseValueParserTest extends
         assertEquals("Wrong value", new Byte((byte) 100),  parser.getByteObject("foo5"));
 
     }
-
+    @Test
     public void testStringDefault()
     {
         parser.clear();
@@ -1639,7 +1647,7 @@ public class BaseValueParserTest extends
         assertEquals("Wrong value found", "baz", parser.getString("does-not-exist", "baz"));
         assertNull(parser.getString("does-not-exist", null));
     }
-
+    @Test
     public void testSetString()
     {
         parser.clear();
@@ -1671,7 +1679,7 @@ public class BaseValueParserTest extends
         assertEquals("Wrong number of values", 1, res.length);
         assertEquals("Wrong value found", "xxx", res[0]);
     }
-
+    @Test
     public void testSetStrings()
     {
         parser.clear();
@@ -1709,7 +1717,7 @@ public class BaseValueParserTest extends
             assertEquals("Wrong value found", newValues[i], res[i]);
         }
     }
-
+    @Test
     public void testSetProperties()
             throws Exception
     {
@@ -1753,7 +1761,7 @@ public class BaseValueParserTest extends
         assertEquals("Wrong number of keys", 1, parser.keySet().size());
 
     }
-
+    @Test
     public void testAddNullArrays()
     {
         String [] res = null;
@@ -1797,7 +1805,7 @@ public class BaseValueParserTest extends
         assertEquals("Wrong number of keys", 1, parser.keySet().size());
         assertEquals("Wrong number of values", 4, res.length);
     }
-
+    @Test
     public void testNonExistingResults()
     {
         parser.clear();
@@ -1846,6 +1854,7 @@ public class BaseValueParserTest extends
         assertEquals("Wrong number of keys", 0, parser.keySet().size());
     }
 
+    @Test
     public void testBooleanArray() {
         String[] booleanString = {"on", "off", "false", "true", " ", "justaword"};
         parser.add("foo", booleanString);
@@ -1861,7 +1870,7 @@ public class BaseValueParserTest extends
 
         assertNull(parser.getBooleans("keydontexist"));
     }
-
+    @Test
     public void testBooleanObjectArray() {
         String[] booleanString = {"on", "off", "false", "true", " ", "justaword"};
         parser.add("foo", booleanString);
@@ -1877,7 +1886,7 @@ public class BaseValueParserTest extends
 
         assertNull(parser.getBooleanObjects("keydontexist"));
     }
-
+    @Test
     public void testGet() {
 
         // no param

Modified: turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java (original)
+++ turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java Tue May  8 07:41:08 2018
@@ -1,5 +1,11 @@
 package org.apache.fulcrum.parser;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -27,32 +33,24 @@ import org.apache.commons.fileupload.Fil
 import org.apache.commons.fileupload.FileItemFactory;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.fulcrum.parser.ValueParser.URLCaseFolding;
-import org.apache.fulcrum.testcontainer.BaseUnitTest;
+import org.apache.fulcrum.testcontainer.BaseUnit4Test;
+import org.junit.Before;
+import org.junit.Test;
 /**
  * Basic test that ParameterParser instantiates.
  *
  * @author <a href="epugh@opensourceconnections.com">Eric Pugh</a>
  * @version $Id$
  */
-public class ParameterParserTest extends BaseUnitTest
+public class ParameterParserTest extends BaseUnit4Test
 {
     private ParameterParser parameterParser = null;
 
     private ParserService parserService;
 
-    /**
-     * Defines the testcase name for JUnit.
-     *
-     * @param name the testcase's name.
-     */
-    public ParameterParserTest(String name)
+    @Before
+    public void setUpBefore() throws Exception
     {
-        super(name);
-    }
-
-    protected void setUp() throws Exception
-    {
-        super.setUp();
         try
         {
             parserService = (ParserService)this.lookup(ParserService.ROLE);
@@ -64,25 +62,27 @@ public class ParameterParserTest extends
             fail(e.getMessage());
         }
     }
-
+    
+    @Test
     public void testConfiguredUrlCaseFolding() throws Exception
     {
         assertTrue(parameterParser.getUrlFolding() == URLCaseFolding.NONE);
     }
-
+    @Test
     public void testConfiguredAutomaticUpload() throws Exception {
         assertTrue(parserService.getAutomaticUpload());
     }
-
+    @Test
     public void testConfiguredParameterEncoding() throws Exception {
         assertEquals("utf-8", parserService.getParameterEncoding());
     }
-
+    
     /**
      * Simple test to verify that URL Case Folding works properly
      *
      * @throws Exception
      */
+    @Test
     public void testRepositoryExists() throws Exception
     {
         assertEquals("TRIMMED_and_Not_Modified",parameterParser.convertAndTrim(" TRIMMED_and_Not_Modified ", URLCaseFolding.NONE));
@@ -97,6 +97,7 @@ public class ParameterParserTest extends
      *
      * @throws Exception
      */
+    @Test
     public void testAddPathInfo() throws Exception
     {
         FileItemFactory factory = new DiskFileItemFactory(10240, null);

Modified: turbine/fulcrum/trunk/testcontainer/pom.xml
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/testcontainer/pom.xml?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/testcontainer/pom.xml (original)
+++ turbine/fulcrum/trunk/testcontainer/pom.xml Tue May  8 07:41:08 2018
@@ -70,6 +70,18 @@
       <version>1.0.6</version>
       <optional>true</optional>
     </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <version>2.5</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>2.18.3</version>
+      <scope>test</scope>
+    </dependency>
     <!-- Needed if testing with ECM -->
     <dependency>
       <groupId>org.apache.excalibur.component</groupId>

Modified: turbine/fulcrum/trunk/testcontainer/src/java/org/apache/fulcrum/testcontainer/BaseUnit4Test.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/testcontainer/src/java/org/apache/fulcrum/testcontainer/BaseUnit4Test.java?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/testcontainer/src/java/org/apache/fulcrum/testcontainer/BaseUnit4Test.java (original)
+++ turbine/fulcrum/trunk/testcontainer/src/java/org/apache/fulcrum/testcontainer/BaseUnit4Test.java Tue May  8 07:41:08 2018
@@ -1,5 +1,20 @@
 package org.apache.fulcrum.testcontainer;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -21,6 +36,8 @@ package org.apache.fulcrum.testcontainer
 import org.apache.avalon.framework.component.ComponentException;
 import org.apache.avalon.framework.logger.ConsoleLogger;
 import org.junit.After;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 
 /**
  * Alternative Base class to {@link BaseUnitTest} for component tests. 
@@ -174,4 +191,79 @@ public class BaseUnit4Test
             container.release(component);
         }
     }
+    
+    public Map<String,Object> attributes = new HashMap<String,Object>();
+    public int maxInactiveInterval = 0;
+
+    protected HttpServletRequest getMockRequest()
+    {
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpSession session = mock(HttpSession.class);
+
+        doAnswer(new Answer<Object>()
+        {
+            @Override
+            public Object answer(InvocationOnMock invocation) throws Throwable
+            {
+                String key = (String) invocation.getArguments()[0];
+                return attributes.get(key);
+            }
+        }).when(session).getAttribute(anyString());
+
+        doAnswer(new Answer<Object>()
+        {
+            @Override
+            public Object answer(InvocationOnMock invocation) throws Throwable
+            {
+                String key = (String) invocation.getArguments()[0];
+                Object value = invocation.getArguments()[1];
+                attributes.put(key, value);
+                return null;
+            }
+        }).when(session).setAttribute(anyString(), any());
+
+        when(session.getMaxInactiveInterval()).thenReturn(maxInactiveInterval);
+
+        doAnswer(new Answer<Integer>()
+        {
+            @Override
+            public Integer answer(InvocationOnMock invocation) throws Throwable
+            {
+                return Integer.valueOf(maxInactiveInterval);
+            }
+        }).when(session).getMaxInactiveInterval();
+
+        doAnswer(new Answer<Object>()
+        {
+            @Override
+            public Object answer(InvocationOnMock invocation) throws Throwable
+            {
+                Integer value = (Integer) invocation.getArguments()[0];
+                maxInactiveInterval = value.intValue();
+                return null;
+            }
+        }).when(session).setMaxInactiveInterval(anyInt());
+
+        when(session.isNew()).thenReturn(true);
+        when(request.getSession()).thenReturn(session);
+
+        when(request.getServerName()).thenReturn("bob");
+        when(request.getProtocol()).thenReturn("http");
+        when(request.getScheme()).thenReturn("scheme");
+        when(request.getPathInfo()).thenReturn("damn");
+        when(request.getServletPath()).thenReturn("damn2");
+        when(request.getContextPath()).thenReturn("wow");
+        when(request.getContentType()).thenReturn("html/text");
+
+        when(request.getCharacterEncoding()).thenReturn("US-ASCII");
+        when(request.getServerPort()).thenReturn(8080);
+        when(request.getLocale()).thenReturn(Locale.US);
+
+        when(request.getHeader("Content-type")).thenReturn("html/text");
+        when(request.getHeader("Accept-Language")).thenReturn("en-US");
+
+        Vector<String> v = new Vector<String>();
+        when(request.getParameterNames()).thenReturn(v.elements());
+        return request;
+    }
 }

Modified: turbine/fulcrum/trunk/upload/pom.xml
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/upload/pom.xml?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/upload/pom.xml (original)
+++ turbine/fulcrum/trunk/upload/pom.xml Tue May  8 07:41:08 2018
@@ -110,15 +110,32 @@
       <version>1.0.7</version>
       <scope>test</scope>
     </dependency>
+    <!-- remove mockito, if testcontainer upgrading to v1.0.8 -->
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>2.18.3</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
     <sourceDirectory>${basedir}/src/java</sourceDirectory>
     <testSourceDirectory>${basedir}/src/test</testSourceDirectory>
+    <plugins>
+        <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-surefire-plugin</artifactId>
+              <configuration>
+                <argLine>-Dfile.encoding=UTF-8</argLine>
+              </configuration>
+        </plugin>
+    </plugins>
   </build>
 
   <properties>
     <turbine.site.path>fulcrum/fulcrum-upload</turbine.site.path>
+   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>  
 	
 </project>
\ No newline at end of file

Modified: turbine/fulcrum/trunk/upload/src/test/org/apache/fulcrum/upload/UploadServiceTest.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/upload/src/test/org/apache/fulcrum/upload/UploadServiceTest.java?rev=1831151&r1=1831150&r2=1831151&view=diff
==============================================================================
--- turbine/fulcrum/trunk/upload/src/test/org/apache/fulcrum/upload/UploadServiceTest.java (original)
+++ turbine/fulcrum/trunk/upload/src/test/org/apache/fulcrum/upload/UploadServiceTest.java Tue May  8 07:41:08 2018
@@ -1,5 +1,18 @@
 package org.apache.fulcrum.upload;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayInputStream;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -21,32 +34,39 @@ package org.apache.fulcrum.upload;
 
 
 import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 
 import org.apache.avalon.framework.component.ComponentException;
-import org.apache.fulcrum.testcontainer.BaseUnitTest;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemIterator;
+import org.apache.fulcrum.testcontainer.BaseUnit4Test;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 /**
  * UploadServiceTest
  *
  * @author <a href="epugh@upstate.com">Eric Pugh</a>
  * @version $Id$
  */
-public class UploadServiceTest extends BaseUnitTest
+public class UploadServiceTest extends BaseUnit4Test
 {
     private UploadService uploadService = null;
 
-    /**
-     * Defines the testcase name for JUnit.
-     *
-     * @param name the testcase's name.
-     */
-    public UploadServiceTest(String name)
-    {
-        super(name);
-    }
 
-    protected void setUp() throws Exception
+    @Before
+    public void setUp() throws Exception
     {
-        super.setUp();
         try
         {
             uploadService = (UploadService) this.lookup(UploadService.ROLE);
@@ -61,10 +81,132 @@ public class UploadServiceTest extends B
      * Simple test that verify an object can be created and deleted.
      * @throws Exception
      */
+    @Test
     public void testRepositoryExists() throws Exception
     {
         File f = new File(uploadService.getRepository());
         assertTrue(f.exists());
+    }
+    
+    // This is Apache Commons, but we want to make be really sure it runs clean in Fulcrum
+    @Test
+    public void testUploadEncoding() throws Exception {
+        HttpServletRequest request = getMockRequest();
+        when(request.getContentType()).thenReturn("multipart/form-data; boundary=boundary");
+        when(request.getContentLength()).thenReturn(-1);// -1
+        when(request.getMethod()).thenReturn("post");
+        String testData= "Überfülle=\r\nf";
+        //override default settings
+        requestFormData( request, testData );
+        assertTrue(uploadService.isMultipart( request ));
+        List<FileItem> fil = uploadService.parseRequest( request );
+        assertNotNull(fil);
+        assertTrue( fil.size() >0);
+        FileItem fi = fil.get( 0 );
+        System.out.println( fi.getString() );
+        assertEquals(15,fi.getSize());
+        // default is ISO-8859-1
+        assertTrue("data string:'" +fi.getString("UTF-8") +"' not as expected", fi.getString("UTF-8").startsWith( "Überfülle" ));
+        
+        //reset inputstream
+        requestFormData( request, testData);
+        FileItemIterator fii = uploadService.getItemIterator( request );
+        assertNotNull(fii);
+        assertTrue( fii.hasNext());
+        assertNotNull(fii.next());
+    }
+
+    private void requestFormData( HttpServletRequest request, String data)
+        throws IOException
+    {
+        String example ="--boundary\r\n"
+            + "Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"12345678.txt\"\r\n"
+            + "Content-Type: text/plain\r\n"
+//            + "Content-Transfer-Encoding: UTF-8\r\n"
+            + "\r\n"
+            + data 
+            + "\r\n--boundary--\r\n";
+        final ByteArrayInputStream is = new ByteArrayInputStream (example.getBytes());// "UTF-8"
+        when(request.getInputStream()).thenReturn(new ServletInputStream() {
+                @Override
+                public int read() throws IOException {
+                    return is.read();
+                }
+            });
+    }
+    
+    protected Map<String,Object> attributes = new HashMap<String,Object>();
+    protected int maxInactiveInterval = 0;
+    // from Turbine org.apache.turbine.test.BaseTestCase, should be later in Fulcrum Testcontainer BaseUnit4Test
+    protected HttpServletRequest getMockRequest()
+    {
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpSession session = mock(HttpSession.class);
+
+        doAnswer(new Answer<Object>()
+        {
+            @Override
+            public Object answer(InvocationOnMock invocation) throws Throwable
+            {
+                String key = (String) invocation.getArguments()[0];
+                return attributes.get(key);
+            }
+        }).when(session).getAttribute(anyString());
+
+        doAnswer(new Answer<Object>()
+        {
+            @Override
+            public Object answer(InvocationOnMock invocation) throws Throwable
+            {
+                String key = (String) invocation.getArguments()[0];
+                Object value = invocation.getArguments()[1];
+                attributes.put(key, value);
+                return null;
+            }
+        }).when(session).setAttribute(anyString(), any());
+
+        when(session.getMaxInactiveInterval()).thenReturn(maxInactiveInterval);
 
+        doAnswer(new Answer<Integer>()
+        {
+            @Override
+            public Integer answer(InvocationOnMock invocation) throws Throwable
+            {
+                return Integer.valueOf(maxInactiveInterval);
+            }
+        }).when(session).getMaxInactiveInterval();
+
+        doAnswer(new Answer<Object>()
+        {
+            @Override
+            public Object answer(InvocationOnMock invocation) throws Throwable
+            {
+                Integer value = (Integer) invocation.getArguments()[0];
+                maxInactiveInterval = value.intValue();
+                return null;
+            }
+        }).when(session).setMaxInactiveInterval(anyInt());
+
+        when(session.isNew()).thenReturn(true);
+        when(request.getSession()).thenReturn(session);
+
+        when(request.getServerName()).thenReturn("bob");
+        when(request.getProtocol()).thenReturn("http");
+        when(request.getScheme()).thenReturn("scheme");
+        when(request.getPathInfo()).thenReturn("damn");
+        when(request.getServletPath()).thenReturn("damn2");
+        when(request.getContextPath()).thenReturn("wow");
+        when(request.getContentType()).thenReturn("html/text");
+
+        when(request.getCharacterEncoding()).thenReturn("US-ASCII");
+        when(request.getServerPort()).thenReturn(8080);
+        when(request.getLocale()).thenReturn(Locale.US);
+
+        when(request.getHeader("Content-type")).thenReturn("html/text");
+        when(request.getHeader("Accept-Language")).thenReturn("en-US");
+
+        Vector<String> v = new Vector<String>();
+        when(request.getParameterNames()).thenReturn(v.elements());
+        return request;
     }
 }