Repository: commons-fileupload
Updated Branches:
  refs/heads/master 94e5e1a77 -> 86a79bcea


FILEUPLOAD-283: add tests for the portlet package


Project: http://git-wip-us.apache.org/repos/asf/commons-fileupload/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/commons-fileupload/commit/f8f529ee
Tree: http://git-wip-us.apache.org/repos/asf/commons-fileupload/tree/f8f529ee
Diff: http://git-wip-us.apache.org/repos/asf/commons-fileupload/diff/f8f529ee

Branch: refs/heads/master
Commit: f8f529ee0baecc9262317cc5375af1eb42aadab4
Parents: b148d5f
Author: Bruno P. Kinoshita <brunodepau...@yahoo.com.br>
Authored: Sun Jun 11 17:23:07 2017 +1200
Committer: Bruno P. Kinoshita <brunodepau...@yahoo.com.br>
Committed: Sat Jun 17 11:05:42 2017 +1200

----------------------------------------------------------------------
 .../apache/commons/fileupload/Constants.java    |  32 ++
 .../commons/fileupload/DiskFileUploadTest.java  |  67 +++
 .../commons/fileupload/FileUploadTest.java      | 399 +++++++++++++++++
 .../commons/fileupload/FileUploadTestCase.java  |  52 ---
 .../fileupload/MockHttpServletRequest.java      |   2 +-
 .../commons/fileupload/MultipartStreamTest.java |   1 -
 .../fileupload/ProgressListenerTest.java        |  15 +-
 .../fileupload/ServletFileUploadTest.java       | 446 -------------------
 .../apache/commons/fileupload/SizesTest.java    |  30 +-
 .../org/apache/commons/fileupload/Util.java     |  63 +++
 .../portlet/MockPortletActionRequest.java       | 271 +++++++++++
 .../portlet/PortletFileUploadTest.java          |  86 ++++
 .../servlet/ServletFileUploadTest.java          |  89 ++++
 13 files changed, 1033 insertions(+), 520 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/Constants.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/fileupload/Constants.java 
b/src/test/java/org/apache/commons/fileupload/Constants.java
new file mode 100644
index 0000000..69eaa53
--- /dev/null
+++ b/src/test/java/org/apache/commons/fileupload/Constants.java
@@ -0,0 +1,32 @@
+/*
+ * 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.commons.fileupload;
+
+/**
+ * Constants used for testing.
+ *
+ * @since 1.4
+ */
+public final class Constants {
+
+    /**
+     * The content type used in several tests.
+     */
+    public static final String CONTENT_TYPE = "multipart/form-data; 
boundary=---1234";
+
+    private Constants() {}
+}

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/DiskFileUploadTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/DiskFileUploadTest.java 
b/src/test/java/org/apache/commons/fileupload/DiskFileUploadTest.java
new file mode 100644
index 0000000..49f65f0
--- /dev/null
+++ b/src/test/java/org/apache/commons/fileupload/DiskFileUploadTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.commons.fileupload;
+
+import static org.junit.Assert.fail;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test for {@link DiskFileUpload}. Remove when deprecated class is removed.
+ *
+ * @since 1.4
+ */
+@SuppressWarnings({"deprecation"}) // unit tests for deprecated class
+public class DiskFileUploadTest {
+
+    private DiskFileUpload upload;
+
+    @Before
+    public void setUp() {
+        upload = new DiskFileUpload();
+    }
+
+    @Test
+    public void testWithInvalidRequest() {
+        HttpServletRequest req = 
HttpServletRequestFactory.createInvalidHttpServletRequest();
+
+        try {
+            upload.parseRequest(req);
+            fail("testWithInvalidRequest: expected exception was not thrown");
+        } catch (FileUploadException expected) {
+            // this exception is expected
+        }
+    }
+
+    @Test
+    public void testWithNullContentType() {
+        HttpServletRequest req = 
HttpServletRequestFactory.createHttpServletRequestWithNullContentType();
+
+        try {
+            upload.parseRequest(req);
+            fail("testWithNullContentType: expected exception was not thrown");
+        } catch (DiskFileUpload.InvalidContentTypeException expected) {
+            // this exception is expected
+        } catch (FileUploadException unexpected) {
+            fail("testWithNullContentType: unexpected exception was thrown");
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/FileUploadTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/fileupload/FileUploadTest.java 
b/src/test/java/org/apache/commons/fileupload/FileUploadTest.java
new file mode 100644
index 0000000..a795c7e
--- /dev/null
+++ b/src/test/java/org/apache/commons/fileupload/FileUploadTest.java
@@ -0,0 +1,399 @@
+/*
+ * 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.commons.fileupload;
+
+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 java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+
+import org.apache.commons.fileupload.portlet.PortletFileUploadTest;
+import org.apache.commons.fileupload.servlet.ServletFileUploadTest;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+/**
+ * Common tests for implementations of {@link FileUpload}. This is a 
parameterized test.
+ * Tests must be valid and common to all implementations of FileUpload added 
as parameter
+ * in this class.
+ *
+ * @see ServletFileUploadTest
+ * @see PortletFileUploadTest
+ * @since 1.4
+ */
+@RunWith(Parameterized.class)
+public class FileUploadTest {
+
+    /**
+     * @return {@link FileUpload} classes under test.
+     */
+    @Parameters(name="{0}")
+    public static Iterable<? extends Object> data() {
+        return Util.fileUploadImplementations();
+    }
+
+    /**
+     * Current parameterized FileUpload.
+     */
+    @Parameter
+    public FileUpload upload;
+
+    // --- Test methods common to all implementations of a FileUpload
+
+    @Test
+    public void testFileUpload()
+            throws IOException, FileUploadException {
+        List<FileItem> fileItems = Util.parseUpload(upload, 
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"file\"; filename=\"foo.tab\"\r\n" +
+                                               "Content-Type: 
text/whatever\r\n" +
+                                               "\r\n" +
+                                               "This is the content of the 
file\n" +
+                                               "\r\n" +
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"field\"\r\n" +
+                                               "\r\n" +
+                                               "fieldValue\r\n" +
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"multi\"\r\n" +
+                                               "\r\n" +
+                                               "value1\r\n" +
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"multi\"\r\n" +
+                                               "\r\n" +
+                                               "value2\r\n" +
+                                               "-----1234--\r\n");
+        assertEquals(4, fileItems.size());
+
+        FileItem file = fileItems.get(0);
+        assertEquals("file", file.getFieldName());
+        assertFalse(file.isFormField());
+        assertEquals("This is the content of the file\n", file.getString());
+        assertEquals("text/whatever", file.getContentType());
+        assertEquals("foo.tab", file.getName());
+
+        FileItem field = fileItems.get(1);
+        assertEquals("field", field.getFieldName());
+        assertTrue(field.isFormField());
+        assertEquals("fieldValue", field.getString());
+
+        FileItem multi0 = fileItems.get(2);
+        assertEquals("multi", multi0.getFieldName());
+        assertTrue(multi0.isFormField());
+        assertEquals("value1", multi0.getString());
+
+        FileItem multi1 = fileItems.get(3);
+        assertEquals("multi", multi1.getFieldName());
+        assertTrue(multi1.isFormField());
+        assertEquals("value2", multi1.getString());
+    }
+
+    @Test
+    public void testFilenameCaseSensitivity()
+            throws IOException, FileUploadException {
+        List<FileItem> fileItems = Util.parseUpload(upload,
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"FiLe\"; filename=\"FOO.tab\"\r\n" +
+                                               "Content-Type: 
text/whatever\r\n" +
+                                               "\r\n" +
+                                               "This is the content of the 
file\n" +
+                                               "\r\n" +
+                                               "-----1234--\r\n");
+        assertEquals(1, fileItems.size());
+
+        FileItem file = fileItems.get(0);
+        assertEquals("FiLe", file.getFieldName());
+        assertEquals("FOO.tab", file.getName());
+    }
+
+    /**
+     * This is what the browser does if you submit the form without choosing a 
file.
+     */
+    @Test
+    public void testEmptyFile()
+            throws UnsupportedEncodingException, FileUploadException {
+        List<FileItem> fileItems = Util.parseUpload (upload,
+                                                "-----1234\r\n" +
+                                                "Content-Disposition: 
form-data; name=\"file\"; filename=\"\"\r\n" +
+                                                "\r\n" +
+                                                "\r\n" +
+                                                "-----1234--\r\n");
+        assertEquals(1, fileItems.size());
+
+        FileItem file = fileItems.get(0);
+        assertFalse(file.isFormField());
+        assertEquals("", file.getString());
+        assertEquals("", file.getName());
+    }
+
+    /**
+     * Internet Explorer 5 for the Mac has a bug where the carriage
+     * return is missing on any boundary line immediately preceding
+     * an input with type=image. (type=submit does not have the bug.)
+     */
+    @Test
+    public void testIE5MacBug()
+            throws UnsupportedEncodingException, FileUploadException {
+        List<FileItem> fileItems = Util.parseUpload(upload,
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"field1\"\r\n" +
+                                               "\r\n" +
+                                               "fieldValue\r\n" +
+                                               "-----1234\n" + // NOTE \r 
missing
+                                               "Content-Disposition: 
form-data; name=\"submitName.x\"\r\n" +
+                                               "\r\n" +
+                                               "42\r\n" +
+                                               "-----1234\n" + // NOTE \r 
missing
+                                               "Content-Disposition: 
form-data; name=\"submitName.y\"\r\n" +
+                                               "\r\n" +
+                                               "21\r\n" +
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"field2\"\r\n" +
+                                               "\r\n" +
+                                               "fieldValue2\r\n" +
+                                               "-----1234--\r\n");
+
+        assertEquals(4, fileItems.size());
+
+        FileItem field1 = fileItems.get(0);
+        assertEquals("field1", field1.getFieldName());
+        assertTrue(field1.isFormField());
+        assertEquals("fieldValue", field1.getString());
+
+        FileItem submitX = fileItems.get(1);
+        assertEquals("submitName.x", submitX.getFieldName());
+        assertTrue(submitX.isFormField());
+        assertEquals("42", submitX.getString());
+
+        FileItem submitY = fileItems.get(2);
+        assertEquals("submitName.y", submitY.getFieldName());
+        assertTrue(submitY.isFormField());
+        assertEquals("21", submitY.getString());
+
+        FileItem field2 = fileItems.get(3);
+        assertEquals("field2", field2.getFieldName());
+        assertTrue(field2.isFormField());
+        assertEquals("fieldValue2", field2.getString());
+    }
+
+    /**
+     * Test for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-62";>FILEUPLOAD-62</a>
+     */
+    @Test
+    public void testFILEUPLOAD62() throws Exception {
+        final String contentType = "multipart/form-data; boundary=AaB03x";
+        final String request =
+            "--AaB03x\r\n" +
+            "content-disposition: form-data; name=\"field1\"\r\n" +
+            "\r\n" +
+            "Joe Blow\r\n" +
+            "--AaB03x\r\n" +
+            "content-disposition: form-data; name=\"pics\"\r\n" +
+            "Content-type: multipart/mixed; boundary=BbC04y\r\n" +
+            "\r\n" +
+            "--BbC04y\r\n" +
+            "Content-disposition: attachment; filename=\"file1.txt\"\r\n" +
+            "Content-Type: text/plain\r\n" +
+            "\r\n" +
+            "... contents of file1.txt ...\r\n" +
+            "--BbC04y\r\n" +
+            "Content-disposition: attachment; filename=\"file2.gif\"\r\n" +
+            "Content-type: image/gif\r\n" +
+            "Content-Transfer-Encoding: binary\r\n" +
+            "\r\n" +
+            "...contents of file2.gif...\r\n" +
+            "--BbC04y--\r\n" +
+            "--AaB03x--";
+        List<FileItem> fileItems = Util.parseUpload(upload, 
request.getBytes("US-ASCII"), contentType);
+        assertEquals(3, fileItems.size());
+        FileItem item0 = fileItems.get(0);
+        assertEquals("field1", item0.getFieldName());
+        assertNull(item0.getName());
+        assertEquals("Joe Blow", new String(item0.get()));
+        FileItem item1 = fileItems.get(1);
+        assertEquals("pics", item1.getFieldName());
+        assertEquals("file1.txt", item1.getName());
+        assertEquals("... contents of file1.txt ...", new String(item1.get()));
+        FileItem item2 = fileItems.get(2);
+        assertEquals("pics", item2.getFieldName());
+        assertEquals("file2.gif", item2.getName());
+        assertEquals("...contents of file2.gif...", new String(item2.get()));
+    }
+
+    /**
+     * Test for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-111";>FILEUPLOAD-111</a>
+     */
+    @Test
+    public void testFoldedHeaders()
+            throws IOException, FileUploadException {
+        List<FileItem> fileItems = Util.parseUpload(upload, "-----1234\r\n" +
+                "Content-Disposition: form-data; name=\"file\"; 
filename=\"foo.tab\"\r\n" +
+                "Content-Type: text/whatever\r\n" +
+                "\r\n" +
+                "This is the content of the file\n" +
+                "\r\n" +
+                "-----1234\r\n" +
+                "Content-Disposition: form-data; \r\n" +
+                "\tname=\"field\"\r\n" +
+                "\r\n" +
+                "fieldValue\r\n" +
+                "-----1234\r\n" +
+                "Content-Disposition: form-data;\r\n" +
+                "     name=\"multi\"\r\n" +
+                "\r\n" +
+                "value1\r\n" +
+                "-----1234\r\n" +
+                "Content-Disposition: form-data; name=\"multi\"\r\n" +
+                "\r\n" +
+                "value2\r\n" +
+                "-----1234--\r\n");
+        assertEquals(4, fileItems.size());
+
+        FileItem file = fileItems.get(0);
+        assertEquals("file", file.getFieldName());
+        assertFalse(file.isFormField());
+        assertEquals("This is the content of the file\n", file.getString());
+        assertEquals("text/whatever", file.getContentType());
+        assertEquals("foo.tab", file.getName());
+
+        FileItem field = fileItems.get(1);
+        assertEquals("field", field.getFieldName());
+        assertTrue(field.isFormField());
+        assertEquals("fieldValue", field.getString());
+
+        FileItem multi0 = fileItems.get(2);
+        assertEquals("multi", multi0.getFieldName());
+        assertTrue(multi0.isFormField());
+        assertEquals("value1", multi0.getString());
+
+        FileItem multi1 = fileItems.get(3);
+        assertEquals("multi", multi1.getFieldName());
+        assertTrue(multi1.isFormField());
+        assertEquals("value2", multi1.getString());
+    }
+
+    /**
+     * Test case for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-130";>
+     */
+    @Test
+    public void testFileUpload130()
+            throws Exception {
+        final String[] headerNames = new String[]
+        {
+            "SomeHeader", "OtherHeader", "YetAnotherHeader", "WhatAHeader"
+        };
+        final String[] headerValues = new String[]
+        {
+            "present", "Is there", "Here", "Is That"
+        };
+        List<FileItem> fileItems = Util.parseUpload(upload, 
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"file\"; filename=\"foo.tab\"\r\n" +
+                                               "Content-Type: 
text/whatever\r\n" +
+                                               headerNames[0] + ": " + 
headerValues[0] + "\r\n" +
+                                               "\r\n" +
+                                               "This is the content of the 
file\n" +
+                                               "\r\n" +
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; \r\n" +
+                                               "\tname=\"field\"\r\n" +
+                                               headerNames[1] + ": " + 
headerValues[1] + "\r\n" +
+                                               "\r\n" +
+                                               "fieldValue\r\n" +
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data;\r\n" +
+                                               "     name=\"multi\"\r\n" +
+                                               headerNames[2] + ": " + 
headerValues[2] + "\r\n" +
+                                               "\r\n" +
+                                               "value1\r\n" +
+                                               "-----1234\r\n" +
+                                               "Content-Disposition: 
form-data; name=\"multi\"\r\n" +
+                                               headerNames[3] + ": " + 
headerValues[3] + "\r\n" +
+                                               "\r\n" +
+                                               "value2\r\n" +
+                                               "-----1234--\r\n");
+        assertEquals(4, fileItems.size());
+
+        FileItem file = fileItems.get(0);
+        assertHeaders(headerNames, headerValues, file, 0);
+
+        FileItem field = fileItems.get(1);
+        assertHeaders(headerNames, headerValues, field, 1);
+
+        FileItem multi0 = fileItems.get(2);
+        assertHeaders(headerNames, headerValues, multi0, 2);
+
+        FileItem multi1 = fileItems.get(3);
+        assertHeaders(headerNames, headerValues, multi1, 3);
+    }
+
+    /**
+     * Test for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-239";>FILEUPLOAD-239</a>
+     */
+    @Test
+    public void testContentTypeAttachment()
+            throws IOException, FileUploadException {
+        List<FileItem> fileItems = Util.parseUpload(upload,
+                "-----1234\r\n" +
+                "content-disposition: form-data; name=\"field1\"\r\n" +
+                "\r\n" +
+                "Joe Blow\r\n" +
+                "-----1234\r\n" +
+                "content-disposition: form-data; name=\"pics\"\r\n" +
+                "Content-type: multipart/mixed, boundary=---9876\r\n" +
+                "\r\n" +
+                "-----9876\r\n" +
+                "Content-disposition: attachment; filename=\"file1.txt\"\r\n" +
+                "Content-Type: text/plain\r\n" +
+                "\r\n" + 
+                "... contents of file1.txt ...\r\n" +
+                "-----9876--\r\n" +
+                "-----1234--\r\n");
+        assertEquals(2, fileItems.size());
+
+        FileItem field = fileItems.get(0);
+        assertEquals("field1", field.getFieldName());
+        assertTrue(field.isFormField());
+        assertEquals("Joe Blow", field.getString());
+
+        FileItem file = fileItems.get(1);
+        assertEquals("pics", file.getFieldName());
+        assertFalse(file.isFormField());
+        assertEquals("... contents of file1.txt ...", file.getString());
+        assertEquals("text/plain", file.getContentType());
+        assertEquals("file1.txt", file.getName());
+    }
+
+    private void assertHeaders(String[] pHeaderNames, String[] pHeaderValues,
+            FileItem pItem, int pIndex) {
+        for (int i = 0; i < pHeaderNames.length; i++) {
+            final String value = pItem.getHeaders().getHeader(pHeaderNames[i]);
+            if (i == pIndex) {
+                assertEquals(pHeaderValues[i], value);
+            } else {
+                assertNull(value);
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/FileUploadTestCase.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/FileUploadTestCase.java 
b/src/test/java/org/apache/commons/fileupload/FileUploadTestCase.java
deleted file mode 100644
index f93ebb4..0000000
--- a/src/test/java/org/apache/commons/fileupload/FileUploadTestCase.java
+++ /dev/null
@@ -1,52 +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.commons.fileupload;
-
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-
-/**
- * Base class for deriving test cases.
- */
-public abstract class FileUploadTestCase {
-
-    protected static final String CONTENT_TYPE = "multipart/form-data; 
boundary=---1234";
-
-    protected List<FileItem> parseUpload(byte[] bytes) throws 
FileUploadException {
-        return parseUpload(bytes, CONTENT_TYPE);
-    }
-
-    protected List<FileItem> parseUpload(byte[] bytes, String contentType) 
throws FileUploadException {
-        ServletFileUpload upload = new ServletFileUpload(new 
DiskFileItemFactory());
-        HttpServletRequest request = new MockHttpServletRequest(bytes, 
contentType);
-
-        List<FileItem> fileItems = upload.parseRequest(request);
-        return fileItems;
-    }
-
-    protected List<FileItem> parseUpload(String content)
-        throws UnsupportedEncodingException, FileUploadException {
-        byte[] bytes = content.getBytes("US-ASCII");
-        return parseUpload(bytes, CONTENT_TYPE);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java 
b/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java
index 0d04ed1..7df2bdd 100644
--- a/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java
+++ b/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java
@@ -32,7 +32,7 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
-class MockHttpServletRequest implements HttpServletRequest {
+public class MockHttpServletRequest implements HttpServletRequest {
 
     private final InputStream m_requestData;
 

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java 
b/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java
index a7d3eec..edbc370 100644
--- a/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java
+++ b/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java
@@ -46,7 +46,6 @@ public class MultipartStreamTest {
         assertNotNull(ms);
     }
 
-    @SuppressWarnings("unused")
     @Test(expected=IllegalArgumentException.class)
     public void testSmallBuffer() throws Exception {
         final String strData = "foobar";

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java 
b/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java
index 30aa1de..721498f 100644
--- a/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java
+++ b/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java
@@ -23,14 +23,15 @@ import static org.junit.Assert.fail;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.junit.Test;
 
 /**
- * Tests the progress listener.
+ * Tests the {@link ProgressListener}.
  */
-public class ProgressListenerTest extends FileUploadTestCase {
+public class ProgressListenerTest {
 
     private class ProgressListenerImpl implements ProgressListener {
 
@@ -76,18 +77,18 @@ public class ProgressListenerTest extends 
FileUploadTestCase {
             String header = "-----1234\r\n"
                 + "Content-Disposition: form-data; name=\"field" + (i+1) + 
"\"\r\n"
                 + "\r\n";
-            baos.write(header.getBytes("US-ASCII"));
+            baos.write(header.getBytes(StandardCharsets.US_ASCII.name()));
             for (int j = 0;  j < 16384+i;  j++) {
                 baos.write((byte) j);
             }
-            baos.write("\r\n".getBytes("US-ASCII"));
+            baos.write("\r\n".getBytes(StandardCharsets.US_ASCII.name()));
         }
-        baos.write("-----1234--\r\n".getBytes("US-ASCII"));
+        
baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII.name()));
         byte[] contents = baos.toByteArray();
 
-        MockHttpServletRequest request = new MockHttpServletRequest(contents, 
"multipart/form-data; boundary=---1234");
+        MockHttpServletRequest request = new MockHttpServletRequest(contents, 
Constants.CONTENT_TYPE);
         runTest(NUM_ITEMS, contents.length, request);
-        request = new MockHttpServletRequest(contents, "multipart/form-data; 
boundary=---1234"){
+        request = new MockHttpServletRequest(contents, Constants.CONTENT_TYPE){
             @Override
             public int getContentLength() {
                 return -1;

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java 
b/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java
deleted file mode 100644
index 4b36f56..0000000
--- a/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java
+++ /dev/null
@@ -1,446 +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.commons.fileupload;
-
-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;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.junit.Test;
-
-/**
- * Unit tests {@link org.apache.commons.fileupload.DiskFileUpload}.
- */
-@SuppressWarnings({"deprecation", "javadoc"}) // unit tests for deprecated 
class
-public class ServletFileUploadTest extends FileUploadTestCase {
-
-    @Test
-    public void testWithInvalidRequest() {
-        FileUploadBase fu = null;
-
-        fu = new DiskFileUpload();
-
-        HttpServletRequest req = 
HttpServletRequestFactory.createInvalidHttpServletRequest();
-
-
-        try {
-            fu.parseRequest(req);
-            fail("testWithInvalidRequest: expected exception was not thrown");
-        } catch (FileUploadException expected) {
-            // this exception is expected
-        }
-    }
-
-    @Test
-    public void testWithNullContentType() {
-        FileUploadBase fu = new DiskFileUpload();
-
-        HttpServletRequest req = 
HttpServletRequestFactory.createHttpServletRequestWithNullContentType();
-
-        try {
-            fu.parseRequest(req);
-            fail("testWithNullContentType: expected exception was not thrown");
-        } catch (DiskFileUpload.InvalidContentTypeException expected) {
-            // this exception is expected
-        } catch (FileUploadException unexpected) {
-            fail("testWithNullContentType: unexpected exception was thrown");
-        }
-    }
-
-    @Test
-    public void testFileUpload()
-            throws IOException, FileUploadException {
-        List<FileItem> fileItems = parseUpload("-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"file\"; filename=\"foo.tab\"\r\n" +
-                                               "Content-Type: 
text/whatever\r\n" +
-                                               "\r\n" +
-                                               "This is the content of the 
file\n" +
-                                               "\r\n" +
-                                               "-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"field\"\r\n" +
-                                               "\r\n" +
-                                               "fieldValue\r\n" +
-                                               "-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"multi\"\r\n" +
-                                               "\r\n" +
-                                               "value1\r\n" +
-                                               "-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"multi\"\r\n" +
-                                               "\r\n" +
-                                               "value2\r\n" +
-                                               "-----1234--\r\n");
-        assertEquals(4, fileItems.size());
-
-        FileItem file = fileItems.get(0);
-        assertEquals("file", file.getFieldName());
-        assertFalse(file.isFormField());
-        assertEquals("This is the content of the file\n", file.getString());
-        assertEquals("text/whatever", file.getContentType());
-        assertEquals("foo.tab", file.getName());
-
-        FileItem field = fileItems.get(1);
-        assertEquals("field", field.getFieldName());
-        assertTrue(field.isFormField());
-        assertEquals("fieldValue", field.getString());
-
-        FileItem multi0 = fileItems.get(2);
-        assertEquals("multi", multi0.getFieldName());
-        assertTrue(multi0.isFormField());
-        assertEquals("value1", multi0.getString());
-
-        FileItem multi1 = fileItems.get(3);
-        assertEquals("multi", multi1.getFieldName());
-        assertTrue(multi1.isFormField());
-        assertEquals("value2", multi1.getString());
-    }
-
-    @Test
-    public void testFilenameCaseSensitivity()
-            throws IOException, FileUploadException {
-        List<FileItem> fileItems = parseUpload("-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"FiLe\"; filename=\"FOO.tab\"\r\n" +
-                                               "Content-Type: 
text/whatever\r\n" +
-                                               "\r\n" +
-                                               "This is the content of the 
file\n" +
-                                               "\r\n" +
-                                               "-----1234--\r\n");
-        assertEquals(1, fileItems.size());
-
-        FileItem file = fileItems.get(0);
-        assertEquals("FiLe", file.getFieldName());
-        assertEquals("FOO.tab", file.getName());
-    }
-
-    /**
-     * This is what the browser does if you submit the form without choosing a 
file.
-     */
-    @Test
-    public void testEmptyFile()
-            throws UnsupportedEncodingException, FileUploadException {
-        List<FileItem> fileItems = parseUpload ("-----1234\r\n" +
-                                                "Content-Disposition: 
form-data; name=\"file\"; filename=\"\"\r\n" +
-                                                "\r\n" +
-                                                "\r\n" +
-                                                "-----1234--\r\n");
-        assertEquals(1, fileItems.size());
-
-        FileItem file = fileItems.get(0);
-        assertFalse(file.isFormField());
-        assertEquals("", file.getString());
-        assertEquals("", file.getName());
-    }
-
-    /**
-     * Internet Explorer 5 for the Mac has a bug where the carriage
-     * return is missing on any boundary line immediately preceding
-     * an input with type=image. (type=submit does not have the bug.)
-     */
-    @Test
-    public void testIE5MacBug()
-            throws UnsupportedEncodingException, FileUploadException {
-        List<FileItem> fileItems = parseUpload("-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"field1\"\r\n" +
-                                               "\r\n" +
-                                               "fieldValue\r\n" +
-                                               "-----1234\n" + // NOTE \r 
missing
-                                               "Content-Disposition: 
form-data; name=\"submitName.x\"\r\n" +
-                                               "\r\n" +
-                                               "42\r\n" +
-                                               "-----1234\n" + // NOTE \r 
missing
-                                               "Content-Disposition: 
form-data; name=\"submitName.y\"\r\n" +
-                                               "\r\n" +
-                                               "21\r\n" +
-                                               "-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"field2\"\r\n" +
-                                               "\r\n" +
-                                               "fieldValue2\r\n" +
-                                               "-----1234--\r\n");
-
-        assertEquals(4, fileItems.size());
-
-        FileItem field1 = fileItems.get(0);
-        assertEquals("field1", field1.getFieldName());
-        assertTrue(field1.isFormField());
-        assertEquals("fieldValue", field1.getString());
-
-        FileItem submitX = fileItems.get(1);
-        assertEquals("submitName.x", submitX.getFieldName());
-        assertTrue(submitX.isFormField());
-        assertEquals("42", submitX.getString());
-
-        FileItem submitY = fileItems.get(2);
-        assertEquals("submitName.y", submitY.getFieldName());
-        assertTrue(submitY.isFormField());
-        assertEquals("21", submitY.getString());
-
-        FileItem field2 = fileItems.get(3);
-        assertEquals("field2", field2.getFieldName());
-        assertTrue(field2.isFormField());
-        assertEquals("fieldValue2", field2.getString());
-    }
-
-    /**
-     * Test for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-62";>FILEUPLOAD-62</a>
-     */
-    @Test
-    public void testFILEUPLOAD62() throws Exception {
-        final String contentType = "multipart/form-data; boundary=AaB03x";
-        final String request =
-            "--AaB03x\r\n" +
-            "content-disposition: form-data; name=\"field1\"\r\n" +
-            "\r\n" +
-            "Joe Blow\r\n" +
-            "--AaB03x\r\n" +
-            "content-disposition: form-data; name=\"pics\"\r\n" +
-            "Content-type: multipart/mixed; boundary=BbC04y\r\n" +
-            "\r\n" +
-            "--BbC04y\r\n" +
-            "Content-disposition: attachment; filename=\"file1.txt\"\r\n" +
-            "Content-Type: text/plain\r\n" +
-            "\r\n" +
-            "... contents of file1.txt ...\r\n" +
-            "--BbC04y\r\n" +
-            "Content-disposition: attachment; filename=\"file2.gif\"\r\n" +
-            "Content-type: image/gif\r\n" +
-            "Content-Transfer-Encoding: binary\r\n" +
-            "\r\n" +
-            "...contents of file2.gif...\r\n" +
-            "--BbC04y--\r\n" +
-            "--AaB03x--";
-        List<FileItem> fileItems = parseUpload(request.getBytes("US-ASCII"), 
contentType);
-        assertEquals(3, fileItems.size());
-        FileItem item0 = fileItems.get(0);
-        assertEquals("field1", item0.getFieldName());
-        assertNull(item0.getName());
-        assertEquals("Joe Blow", new String(item0.get()));
-        FileItem item1 = fileItems.get(1);
-        assertEquals("pics", item1.getFieldName());
-        assertEquals("file1.txt", item1.getName());
-        assertEquals("... contents of file1.txt ...", new String(item1.get()));
-        FileItem item2 = fileItems.get(2);
-        assertEquals("pics", item2.getFieldName());
-        assertEquals("file2.gif", item2.getName());
-        assertEquals("...contents of file2.gif...", new String(item2.get()));
-    }
-
-    /**
-     * Test for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-111";>FILEUPLOAD-111</a>
-     */
-    @Test
-    public void testFoldedHeaders()
-            throws IOException, FileUploadException {
-        List<FileItem> fileItems = parseUpload("-----1234\r\n" +
-                "Content-Disposition: form-data; name=\"file\"; 
filename=\"foo.tab\"\r\n" +
-                "Content-Type: text/whatever\r\n" +
-                "\r\n" +
-                "This is the content of the file\n" +
-                "\r\n" +
-                "-----1234\r\n" +
-                "Content-Disposition: form-data; \r\n" +
-                "\tname=\"field\"\r\n" +
-                "\r\n" +
-                "fieldValue\r\n" +
-                "-----1234\r\n" +
-                "Content-Disposition: form-data;\r\n" +
-                "     name=\"multi\"\r\n" +
-                "\r\n" +
-                "value1\r\n" +
-                "-----1234\r\n" +
-                "Content-Disposition: form-data; name=\"multi\"\r\n" +
-                "\r\n" +
-                "value2\r\n" +
-                "-----1234--\r\n");
-        assertEquals(4, fileItems.size());
-
-        FileItem file = fileItems.get(0);
-        assertEquals("file", file.getFieldName());
-        assertFalse(file.isFormField());
-        assertEquals("This is the content of the file\n", file.getString());
-        assertEquals("text/whatever", file.getContentType());
-        assertEquals("foo.tab", file.getName());
-
-        FileItem field = fileItems.get(1);
-        assertEquals("field", field.getFieldName());
-        assertTrue(field.isFormField());
-        assertEquals("fieldValue", field.getString());
-
-        FileItem multi0 = fileItems.get(2);
-        assertEquals("multi", multi0.getFieldName());
-        assertTrue(multi0.isFormField());
-        assertEquals("value1", multi0.getString());
-
-        FileItem multi1 = fileItems.get(3);
-        assertEquals("multi", multi1.getFieldName());
-        assertTrue(multi1.isFormField());
-        assertEquals("value2", multi1.getString());
-    }
-
-    /**
-     * Test case for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-130";>
-     */
-    @Test
-    public void testFileUpload130()
-            throws Exception {
-        final String[] headerNames = new String[]
-        {
-            "SomeHeader", "OtherHeader", "YetAnotherHeader", "WhatAHeader"
-        };
-        final String[] headerValues = new String[]
-        {
-            "present", "Is there", "Here", "Is That"
-        };
-        List<FileItem> fileItems = parseUpload("-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"file\"; filename=\"foo.tab\"\r\n" +
-                                               "Content-Type: 
text/whatever\r\n" +
-                                               headerNames[0] + ": " + 
headerValues[0] + "\r\n" +
-                                               "\r\n" +
-                                               "This is the content of the 
file\n" +
-                                               "\r\n" +
-                                               "-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; \r\n" +
-                                               "\tname=\"field\"\r\n" +
-                                               headerNames[1] + ": " + 
headerValues[1] + "\r\n" +
-                                               "\r\n" +
-                                               "fieldValue\r\n" +
-                                               "-----1234\r\n" +
-                                               "Content-Disposition: 
form-data;\r\n" +
-                                               "     name=\"multi\"\r\n" +
-                                               headerNames[2] + ": " + 
headerValues[2] + "\r\n" +
-                                               "\r\n" +
-                                               "value1\r\n" +
-                                               "-----1234\r\n" +
-                                               "Content-Disposition: 
form-data; name=\"multi\"\r\n" +
-                                               headerNames[3] + ": " + 
headerValues[3] + "\r\n" +
-                                               "\r\n" +
-                                               "value2\r\n" +
-                                               "-----1234--\r\n");
-        assertEquals(4, fileItems.size());
-
-        FileItem file = fileItems.get(0);
-        assertHeaders(headerNames, headerValues, file, 0);
-
-        FileItem field = fileItems.get(1);
-        assertHeaders(headerNames, headerValues, field, 1);
-
-        FileItem multi0 = fileItems.get(2);
-        assertHeaders(headerNames, headerValues, multi0, 2);
-
-        FileItem multi1 = fileItems.get(3);
-        assertHeaders(headerNames, headerValues, multi1, 3);
-    }
-
-    /**
-     * Test case for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-210";>
-     */
-    @Test
-    public void parseParameterMap()
-            throws Exception {
-        String text = "-----1234\r\n" +
-                      "Content-Disposition: form-data; name=\"file\"; 
filename=\"foo.tab\"\r\n" +
-                      "Content-Type: text/whatever\r\n" +
-                      "\r\n" +
-                      "This is the content of the file\n" +
-                      "\r\n" +
-                      "-----1234\r\n" +
-                      "Content-Disposition: form-data; name=\"field\"\r\n" +
-                      "\r\n" +
-                      "fieldValue\r\n" +
-                      "-----1234\r\n" +
-                      "Content-Disposition: form-data; name=\"multi\"\r\n" +
-                      "\r\n" +
-                      "value1\r\n" +
-                      "-----1234\r\n" +
-                      "Content-Disposition: form-data; name=\"multi\"\r\n" +
-                      "\r\n" +
-                      "value2\r\n" +
-                      "-----1234--\r\n";
-        byte[] bytes = text.getBytes("US-ASCII");
-        ServletFileUpload upload = new ServletFileUpload(new 
DiskFileItemFactory());
-        HttpServletRequest request = new MockHttpServletRequest(bytes, 
CONTENT_TYPE);
-
-        Map<String, List<FileItem>> mappedParameters = 
upload.parseParameterMap(request);
-        assertTrue(mappedParameters.containsKey("file"));
-        assertEquals(1, mappedParameters.get("file").size());
-
-        assertTrue(mappedParameters.containsKey("field"));
-        assertEquals(1, mappedParameters.get("field").size());
-
-        assertTrue(mappedParameters.containsKey("multi"));
-        assertEquals(2, mappedParameters.get("multi").size());
-    }
-
-    /**
-     * Test for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-239";>FILEUPLOAD-239</a>
-     */
-    @Test
-    public void testContentTypeAttachment()
-            throws IOException, FileUploadException {
-        List<FileItem> fileItems = parseUpload(
-                       "-----1234\r\n" +
-                       "content-disposition: form-data; name=\"field1\"\r\n" +
-                       "\r\n" +
-                       "Joe Blow\r\n" +
-                       "-----1234\r\n" +
-                       "content-disposition: form-data; name=\"pics\"\r\n" +
-                       "Content-type: multipart/mixed, boundary=---9876\r\n" +
-                       "\r\n" +
-                       "-----9876\r\n" +
-                       "Content-disposition: attachment; 
filename=\"file1.txt\"\r\n" +
-                       "Content-Type: text/plain\r\n" +
-                       "\r\n" + 
-                       "... contents of file1.txt ...\r\n" +
-                       "-----9876--\r\n" +
-                       "-----1234--\r\n");                                     
-        assertEquals(2, fileItems.size());
-
-        FileItem field = fileItems.get(0);
-        assertEquals("field1", field.getFieldName());
-        assertTrue(field.isFormField());
-        assertEquals("Joe Blow", field.getString());
-
-        FileItem file = fileItems.get(1);
-        assertEquals("pics", file.getFieldName());
-        assertFalse(file.isFormField());
-        assertEquals("... contents of file1.txt ...", file.getString());
-        assertEquals("text/plain", file.getContentType());
-        assertEquals("file1.txt", file.getName());
-    }
-
-    private void assertHeaders(String[] pHeaderNames, String[] pHeaderValues,
-                               FileItem pItem, int pIndex) {
-        for (int i = 0;  i < pHeaderNames.length;  i++) {
-            final String value = pItem.getHeaders().getHeader(pHeaderNames[i]);
-            if (i == pIndex) {
-                assertEquals(pHeaderValues[i], value);
-            } else {
-                assertNull(value);
-            }
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/SizesTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/fileupload/SizesTest.java 
b/src/test/java/org/apache/commons/fileupload/SizesTest.java
index 806f793..f328d41 100644
--- a/src/test/java/org/apache/commons/fileupload/SizesTest.java
+++ b/src/test/java/org/apache/commons/fileupload/SizesTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.fail;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.Iterator;
 import java.util.List;
 
@@ -39,7 +40,7 @@ import org.junit.Test;
 /**
  * Unit test for items with varying sizes.
  */
-public class SizesTest extends FileUploadTestCase {
+public class SizesTest {
 
     /**
      * Runs a test with varying file sizes.
@@ -65,7 +66,8 @@ public class SizesTest extends FileUploadTestCase {
         }
         baos.write("-----1234--\r\n".getBytes("US-ASCII"));
 
-        List<FileItem> fileItems = parseUpload(baos.toByteArray());
+        List<FileItem> fileItems =
+                Util.parseUpload(new ServletFileUpload(new 
DiskFileItemFactory()), baos.toByteArray());
         Iterator<FileItem> fileIter = fileItems.iterator();
         add = 16;
         num = 0;
@@ -100,7 +102,8 @@ public class SizesTest extends FileUploadTestCase {
 
         ServletFileUpload upload = new ServletFileUpload(new 
DiskFileItemFactory());
         upload.setFileSizeMax(-1);
-        HttpServletRequest req = new 
MockHttpServletRequest(request.getBytes("US-ASCII"), CONTENT_TYPE);
+        HttpServletRequest req = new MockHttpServletRequest(
+                request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         List<FileItem> fileItems = upload.parseRequest(req);
         assertEquals(1, fileItems.size());
         FileItem item = fileItems.get(0);
@@ -108,7 +111,7 @@ public class SizesTest extends FileUploadTestCase {
 
         upload = new ServletFileUpload(new DiskFileItemFactory());
         upload.setFileSizeMax(40);
-        req = new MockHttpServletRequest(request.getBytes("US-ASCII"), 
CONTENT_TYPE);
+        req = new 
MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         fileItems = upload.parseRequest(req);
         assertEquals(1, fileItems.size());
         item = fileItems.get(0);
@@ -116,7 +119,7 @@ public class SizesTest extends FileUploadTestCase {
 
         upload = new ServletFileUpload(new DiskFileItemFactory());
         upload.setFileSizeMax(30);
-        req = new MockHttpServletRequest(request.getBytes("US-ASCII"), 
CONTENT_TYPE);
+        req = new 
MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         try {
             upload.parseRequest(req);
             fail("Expected exception.");
@@ -142,7 +145,8 @@ public class SizesTest extends FileUploadTestCase {
 
         ServletFileUpload upload = new ServletFileUpload(new 
DiskFileItemFactory());
         upload.setFileSizeMax(-1);
-        HttpServletRequest req = new 
MockHttpServletRequest(request.getBytes("US-ASCII"), CONTENT_TYPE);
+        HttpServletRequest req = new MockHttpServletRequest(
+                request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         List<FileItem> fileItems = upload.parseRequest(req);
         assertEquals(1, fileItems.size());
         FileItem item = fileItems.get(0);
@@ -150,7 +154,7 @@ public class SizesTest extends FileUploadTestCase {
 
         upload = new ServletFileUpload(new DiskFileItemFactory());
         upload.setFileSizeMax(40);
-        req = new MockHttpServletRequest(request.getBytes("US-ASCII"), 
CONTENT_TYPE);
+        req = new 
MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         fileItems = upload.parseRequest(req);
         assertEquals(1, fileItems.size());
         item = fileItems.get(0);
@@ -159,7 +163,7 @@ public class SizesTest extends FileUploadTestCase {
         // provided Content-Length is larger than the FileSizeMax -> handled 
by ctor
         upload = new ServletFileUpload(new DiskFileItemFactory());
         upload.setFileSizeMax(5);
-        req = new MockHttpServletRequest(request.getBytes("US-ASCII"), 
CONTENT_TYPE);
+        req = new 
MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         try {
             upload.parseRequest(req);
             fail("Expected exception.");
@@ -170,7 +174,7 @@ public class SizesTest extends FileUploadTestCase {
         // provided Content-Length is wrong, actual content is larger -> 
handled by LimitedInputStream
         upload = new ServletFileUpload(new DiskFileItemFactory());
         upload.setFileSizeMax(15);
-        req = new MockHttpServletRequest(request.getBytes("US-ASCII"), 
CONTENT_TYPE);
+        req = new 
MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         try {
             upload.parseRequest(req);
             fail("Expected exception.");
@@ -204,14 +208,14 @@ public class SizesTest extends FileUploadTestCase {
         upload.setFileSizeMax(-1);
         upload.setSizeMax(200);
 
-        MockHttpServletRequest req = new 
MockHttpServletRequest(request.getBytes("US-ASCII"), CONTENT_TYPE);
+        MockHttpServletRequest req = new MockHttpServletRequest(
+                request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         try {
             upload.parseRequest(req);
             fail("Expected exception.");
         } catch (FileUploadBase.SizeLimitExceededException e) {
             assertEquals(200, e.getPermittedSize());
         }
-
     }
 
     @Test
@@ -241,7 +245,8 @@ public class SizesTest extends FileUploadTestCase {
         // set the read limit to 10 to simulate a "real" stream
         // otherwise the buffer would be immediately filled
 
-        MockHttpServletRequest req = new 
MockHttpServletRequest(request.getBytes("US-ASCII"), CONTENT_TYPE);
+        MockHttpServletRequest req = new MockHttpServletRequest(
+                request.getBytes(StandardCharsets.US_ASCII.name()), 
Constants.CONTENT_TYPE);
         req.setContentLength(-1);
         req.setReadLimit(10);
 
@@ -277,7 +282,6 @@ public class SizesTest extends FileUploadTestCase {
         } catch (FileUploadIOException e) {
             // expected
         }
-
     }
 
 }

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/Util.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/fileupload/Util.java 
b/src/test/java/org/apache/commons/fileupload/Util.java
new file mode 100644
index 0000000..42041e3
--- /dev/null
+++ b/src/test/java/org/apache/commons/fileupload/Util.java
@@ -0,0 +1,63 @@
+/*
+ * 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.commons.fileupload;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.portlet.PortletFileUpload;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.fileupload.servlet.ServletRequestContext;
+
+/**
+ * Test utility methods.
+ *
+ * @since 1.4
+ */
+public class Util {
+
+    public static List<FileItem> parseUpload(FileUpload upload, byte[] bytes) 
throws FileUploadException {
+        return parseUpload(upload, bytes, Constants.CONTENT_TYPE);
+    }
+
+    public static List<FileItem> parseUpload(FileUpload upload, byte[] bytes, 
String contentType) throws FileUploadException {
+        final HttpServletRequest request = new MockHttpServletRequest(bytes, 
contentType);
+        List<FileItem> fileItems = upload.parseRequest(new 
ServletRequestContext(request));
+        return fileItems;
+    }
+
+    public static List<FileItem> parseUpload(FileUpload upload, String content)
+        throws UnsupportedEncodingException, FileUploadException {
+        byte[] bytes = content.getBytes(StandardCharsets.US_ASCII.name());
+        return parseUpload(upload, bytes, Constants.CONTENT_TYPE);
+    }
+
+    /**
+     * Return a list of {@link FileUpload} implementations for parameterized 
tests.
+     * @return a list of {@link FileUpload} implementations
+     */
+    public static List<FileUpload> fileUploadImplementations() {
+        return Arrays.asList(
+                new ServletFileUpload(new DiskFileItemFactory()),
+                new PortletFileUpload(new DiskFileItemFactory()));
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/portlet/MockPortletActionRequest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/portlet/MockPortletActionRequest.java
 
b/src/test/java/org/apache/commons/fileupload/portlet/MockPortletActionRequest.java
new file mode 100644
index 0000000..5f13788
--- /dev/null
+++ 
b/src/test/java/org/apache/commons/fileupload/portlet/MockPortletActionRequest.java
@@ -0,0 +1,271 @@
+/*
+ * 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.commons.fileupload.portlet;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.PortalContext;
+import javax.portlet.PortletMode;
+import javax.portlet.PortletPreferences;
+import javax.portlet.PortletSession;
+import javax.portlet.WindowState;
+
+import org.apache.commons.fileupload.FileUploadBase;
+
+/**
+ * Mock class for tests. Implements an {@link ActionRequest}.
+ *
+ * @see PortletFileUploadTest
+ * @since 1.4
+ */
+@SuppressWarnings("rawtypes") // because of the portlet ActionRequest API does 
not use generics
+public class MockPortletActionRequest implements ActionRequest {
+
+    private final Hashtable<String, Object> attributes = new Hashtable<String, 
Object>();
+
+    private final Map<String, String> parameters = new HashMap<String, 
String>();
+
+    private String characterEncoding;
+    private int length;
+    private final String contentType;
+    private final InputStream requestData;
+
+    public MockPortletActionRequest(final byte[] requestData, final String 
contentType) {
+        this(new ByteArrayInputStream(requestData), requestData.length, 
contentType);
+    }
+
+    public MockPortletActionRequest(ByteArrayInputStream byteArrayInputStream, 
int requestLength, String contentType) {
+        this.requestData = byteArrayInputStream;
+        length = requestLength;
+        this.contentType = contentType;
+        attributes.put(FileUploadBase.CONTENT_TYPE, contentType);
+    }
+
+    @Override
+    public Object getAttribute(String key) {
+        return attributes.get(key);
+    }
+
+    @Override
+    public Enumeration getAttributeNames() {
+        return attributes.keys();
+    }
+
+    @Override
+    public String getAuthType() {
+        return null;
+    }
+
+    @Override
+    public String getContextPath() {
+        return null;
+    }
+
+    @Override
+    public Locale getLocale() {
+        return Locale.getDefault();
+    }
+
+    @Override
+    public Enumeration getLocales() {
+        return 
Collections.enumeration(Arrays.asList(Locale.getAvailableLocales()));
+    }
+
+    @Override
+    public String getParameter(String key) {
+        return parameters.get(key);
+    }
+
+    @Override
+    public Map getParameterMap() {
+        return Collections.unmodifiableMap(parameters);
+    }
+
+    @Override
+    public Enumeration getParameterNames() {
+        return Collections.enumeration(parameters.keySet());
+    }
+
+    @Override
+    public String[] getParameterValues(String arg0) {
+        return null;
+    }
+
+    @Override
+    public PortalContext getPortalContext() {
+        return null;
+    }
+
+    @Override
+    public PortletMode getPortletMode() {
+        return null;
+    }
+
+    @Override
+    public PortletSession getPortletSession() {
+        return null;
+    }
+
+    @Override
+    public PortletSession getPortletSession(boolean arg0) {
+        return null;
+    }
+
+    @Override
+    public PortletPreferences getPreferences() {
+        return null;
+    }
+
+    @Override
+    public Enumeration getProperties(String arg0) {
+        return null;
+    }
+
+    @Override
+    public String getProperty(String arg0) {
+        return null;
+    }
+
+    @Override
+    public Enumeration getPropertyNames() {
+        return null;
+    }
+
+    @Override
+    public String getRemoteUser() {
+        return null;
+    }
+
+    @Override
+    public String getRequestedSessionId() {
+        return null;
+    }
+
+    @Override
+    public String getResponseContentType() {
+        return null;
+    }
+
+    @Override
+    public Enumeration getResponseContentTypes() {
+        return null;
+    }
+
+    @Override
+    public String getScheme() {
+        return null;
+    }
+
+    @Override
+    public String getServerName() {
+        return null;
+    }
+
+    @Override
+    public int getServerPort() {
+        return 0;
+    }
+
+    @Override
+    public Principal getUserPrincipal() {
+        return null;
+    }
+
+    @Override
+    public WindowState getWindowState() {
+        return null;
+    }
+
+    @Override
+    public boolean isPortletModeAllowed(PortletMode arg0) {
+        return false;
+    }
+
+    @Override
+    public boolean isRequestedSessionIdValid() {
+        return false;
+    }
+
+    @Override
+    public boolean isSecure() {
+        return false;
+    }
+
+    @Override
+    public boolean isUserInRole(String arg0) {
+        return false;
+    }
+
+    @Override
+    public boolean isWindowStateAllowed(WindowState arg0) {
+        return false;
+    }
+
+    @Override
+    public void removeAttribute(String key) {
+        attributes.remove(key);
+    }
+
+    @Override
+    public void setAttribute(String key, Object value) {
+        attributes.put(key, value);
+    }
+
+    @Override
+    public String getCharacterEncoding() {
+        return characterEncoding;
+    }
+
+    @Override
+    public int getContentLength() {
+        return length;
+    }
+
+    @Override
+    public String getContentType() {
+        return contentType;
+    }
+
+    @Override
+    public InputStream getPortletInputStream() throws IOException {
+        return requestData;
+    }
+
+    @Override
+    public BufferedReader getReader() throws UnsupportedEncodingException, 
IOException {
+        return null;
+    }
+
+    @Override
+    public void setCharacterEncoding(String characterEncoding) throws 
UnsupportedEncodingException {
+        this.characterEncoding = characterEncoding;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/portlet/PortletFileUploadTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/portlet/PortletFileUploadTest.java
 
b/src/test/java/org/apache/commons/fileupload/portlet/PortletFileUploadTest.java
new file mode 100644
index 0000000..7b2aa80
--- /dev/null
+++ 
b/src/test/java/org/apache/commons/fileupload/portlet/PortletFileUploadTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.commons.fileupload.portlet;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Map;
+
+import javax.portlet.ActionRequest;
+
+import org.apache.commons.fileupload.Constants;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadTest;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test for {@link PortletFileUpload}.
+ *
+ * @see FileUploadTest
+ * @since 1.4
+ */
+public class PortletFileUploadTest {
+
+    private PortletFileUpload upload;
+
+    @Before
+    public void setUp() {
+        upload = new PortletFileUpload(new DiskFileItemFactory());
+    }
+
+    @Test
+    public void parseParameterMap()
+            throws Exception {
+        String text = "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"file\"; 
filename=\"foo.tab\"\r\n" +
+                      "Content-Type: text/whatever\r\n" +
+                      "\r\n" +
+                      "This is the content of the file\n" +
+                      "\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"field\"\r\n" +
+                      "\r\n" +
+                      "fieldValue\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"multi\"\r\n" +
+                      "\r\n" +
+                      "value1\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"multi\"\r\n" +
+                      "\r\n" +
+                      "value2\r\n" +
+                      "-----1234--\r\n";
+        byte[] bytes = text.getBytes(StandardCharsets.US_ASCII.name());
+        ActionRequest request = new MockPortletActionRequest(bytes, 
Constants.CONTENT_TYPE);
+
+        Map<String, List<FileItem>> mappedParameters = 
upload.parseParameterMap(request);
+        assertTrue(mappedParameters.containsKey("file"));
+        assertEquals(1, mappedParameters.get("file").size());
+
+        assertTrue(mappedParameters.containsKey("field"));
+        assertEquals(1, mappedParameters.get("field").size());
+
+        assertTrue(mappedParameters.containsKey("multi"));
+        assertEquals(2, mappedParameters.get("multi").size());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/commons-fileupload/blob/f8f529ee/src/test/java/org/apache/commons/fileupload/servlet/ServletFileUploadTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/fileupload/servlet/ServletFileUploadTest.java
 
b/src/test/java/org/apache/commons/fileupload/servlet/ServletFileUploadTest.java
new file mode 100644
index 0000000..69480d7
--- /dev/null
+++ 
b/src/test/java/org/apache/commons/fileupload/servlet/ServletFileUploadTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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.commons.fileupload.servlet;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.fileupload.Constants;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.MockHttpServletRequest;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test for {@link ServletFileUpload}.
+ *
+ * @see FileUploadTest
+ * @since 1.4
+ */
+public class ServletFileUploadTest {
+
+    private ServletFileUpload upload;
+
+    @Before
+    public void setUp() {
+        upload = new ServletFileUpload(new DiskFileItemFactory());
+    }
+
+    /**
+     * Test case for <a 
href="http://issues.apache.org/jira/browse/FILEUPLOAD-210";>
+     */
+    @Test
+    public void parseParameterMap()
+            throws Exception {
+        String text = "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"file\"; 
filename=\"foo.tab\"\r\n" +
+                      "Content-Type: text/whatever\r\n" +
+                      "\r\n" +
+                      "This is the content of the file\n" +
+                      "\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"field\"\r\n" +
+                      "\r\n" +
+                      "fieldValue\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"multi\"\r\n" +
+                      "\r\n" +
+                      "value1\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"multi\"\r\n" +
+                      "\r\n" +
+                      "value2\r\n" +
+                      "-----1234--\r\n";
+        byte[] bytes = text.getBytes(StandardCharsets.US_ASCII.name());
+        HttpServletRequest request = new MockHttpServletRequest(bytes, 
Constants.CONTENT_TYPE);
+
+        Map<String, List<FileItem>> mappedParameters = 
upload.parseParameterMap(request);
+        assertTrue(mappedParameters.containsKey("file"));
+        assertEquals(1, mappedParameters.get("file").size());
+
+        assertTrue(mappedParameters.containsKey("field"));
+        assertEquals(1, mappedParameters.get("field").size());
+
+        assertTrue(mappedParameters.containsKey("multi"));
+        assertEquals(2, mappedParameters.get("multi").size());
+    }
+
+}

Reply via email to