Repository: wicket
Updated Branches:
  refs/heads/wicket-7.x 423a93f20 -> 34d8ead09


WICKET-6270 check name of uploaded file is not empty


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/34d8ead0
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/34d8ead0
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/34d8ead0

Branch: refs/heads/wicket-7.x
Commit: 34d8ead0926269af5392d8d55cc2a001e9c3ecc3
Parents: 423a93f
Author: Sven Meier <[email protected]>
Authored: Mon Nov 7 19:20:07 2016 +0100
Committer: Sven Meier <[email protected]>
Committed: Mon Nov 7 19:21:03 2016 +0100

----------------------------------------------------------------------
 .../html/form/upload/FileUploadField.java       |  6 ++-
 .../http/mock/MockHttpServletRequest.java       | 51 +++++++++++---------
 .../apache/wicket/util/tester/FormTester.java   |  2 +-
 .../html/form/upload/FileUploadFieldTest.java   | 41 +++++++++++++---
 4 files changed, 68 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/34d8ead0/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
index e604fae..5a8f288 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
@@ -27,6 +27,7 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.protocol.http.IMultipartWebRequest;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.util.convert.ConversionException;
+import org.apache.wicket.util.string.Strings;
 
 /**
  * Form component that corresponds to a &lt;input type=&quot;file&quot;&gt;. 
When a FileInput
@@ -111,7 +112,10 @@ public class FileUploadField extends 
FormComponent<List<FileUpload>>
                        {
                                for (FileItem item : fileItems)
                                {
-                                       fileUploads.add(new FileUpload(item));
+                                       // WICKET-6270 detect empty field by 
missing file name
+                                       if (Strings.isEmpty(item.getName()) == 
false) {
+                                               fileUploads.add(new 
FileUpload(item));
+                                       }
                                }
                        }
                }

http://git-wip-us.apache.org/repos/asf/wicket/blob/34d8ead0/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
index a7bd476..05c5c1b 100755
--- 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
@@ -65,7 +65,6 @@ import org.apache.wicket.util.encoding.UrlDecoder;
 import org.apache.wicket.util.encoding.UrlEncoder;
 import org.apache.wicket.util.file.File;
 import org.apache.wicket.util.io.IOUtils;
-import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.value.ValueMap;
@@ -255,19 +254,19 @@ public class MockHttpServletRequest implements 
HttpServletRequest
         */
        public void addFile(String fieldName, File file, String contentType)
        {
-               Args.notNull(file, "file");
-
-               if (file.exists() == false)
-               {
-                       throw new IllegalArgumentException(
-                               "File does not exists. You must provide an 
existing file: "
-                                       + file.getAbsolutePath());
-               }
+               if (file != null) {
+                       if (file.exists() == false)
+                       {
+                               throw new IllegalArgumentException(
+                                       "File does not exists. You must provide 
an existing file: "
+                                               + file.getAbsolutePath());
+                       }
 
-               if (file.isFile() == false)
-               {
-                       throw new IllegalArgumentException(
-                               "You can only add a File, which is not a 
directory. Only files can be uploaded.");
+                       if (file.isFile() == false)
+                       {
+                               throw new IllegalArgumentException(
+                                       "You can only add a File, which is not 
a directory. Only files can be uploaded.");
+                       }
                }
 
                if (uploadedFiles == null)
@@ -1706,7 +1705,9 @@ public class MockHttpServletRequest implements 
HttpServletRequest
                                                out.write("; 
name=\"".getBytes());
                                                out.write(fieldName.getBytes());
                                                out.write("\"; 
filename=\"".getBytes());
-                                               
out.write(uf.getFile().getName().getBytes());
+                                               if (uf.getFile() != null) {
+                                                       
out.write(uf.getFile().getName().getBytes());
+                                               }
                                                out.write("\"".getBytes());
                                                out.write(crlf.getBytes());
                                                out.write("Content-Type: 
".getBytes());
@@ -1714,16 +1715,18 @@ public class MockHttpServletRequest implements 
HttpServletRequest
                                                out.write(crlf.getBytes());
                                                out.write(crlf.getBytes());
 
-                                               // Load the file and put it 
into the the inputstream
-                                               FileInputStream fis = new 
FileInputStream(uf.getFile());
-
-                                               try
-                                               {
-                                                       IOUtils.copy(fis, out);
-                                               }
-                                               finally
-                                               {
-                                                       fis.close();
+                                               if (uf.getFile() != null) {
+                                                       // Load the file and 
put it into the the inputstream
+                                                       FileInputStream fis = 
new FileInputStream(uf.getFile());
+
+                                                       try
+                                                       {
+                                                               
IOUtils.copy(fis, out);
+                                                       }
+                                                       finally
+                                                       {
+                                                               fis.close();
+                                                       }
                                                }
                                                out.write(crlf.getBytes());
                                        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/34d8ead0/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java 
b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
index 91c8890..91bde51 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
@@ -656,7 +656,7 @@ public class FormTester
         *            <code>FormComponent</code>. The 
<code>FormComponent</code> must be of a type
         *            <code>FileUploadField</code>.
         * @param file
-        *            the <code>File</code> to upload.
+        *            the <code>File</code> to upload or {@code null} for an 
empty input
         * @param contentType
         *            the content type of the file. Must be a valid mime type.
         * @return This

http://git-wip-us.apache.org/repos/asf/wicket/blob/34d8ead0/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
index 7f17962..7454602 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
@@ -128,22 +128,51 @@ public class FileUploadFieldTest extends WicketTestCase
 
        /** 
         * https://issues.apache.org/jira/browse/WICKET-5691
-        * 
-        * */
+        */
        @Test
        public void testEmptyField() throws Exception
        {
                tester.startPage(TestValidationPage.class);
                
+               FileUploadField uploadField = 
(FileUploadField)tester.getComponentFromLastRenderedPage("form:upload");
+               uploadField.add(new IValidator<List<FileUpload>>() {
+                       @Override
+                       public void validate(IValidatable<List<FileUpload>> 
validatable)
+                       {
+                               // must check during validation, since the 
uploads are nullified on detach
+                               assertEquals(0, validatable.getValue().size());
+                       }
+               });
                FormTester formtester = tester.newFormTester("form");
                formtester.submit();
                
-               FileUploadField fileUploadField = 
(FileUploadField)tester.getComponentFromLastRenderedPage("form:upload");
-               
-               assertEquals(0, fileUploadField.getFileUploads().size());
+               tester.assertNoErrorMessage();
+       }
+
+       /** 
+        * https://issues.apache.org/jira/browse/WICKET-6270
+        */
+       @Test
+       public void testEmptyFieldAsBrowserSendsIt() throws Exception
+       {
+               tester.startPage(TestValidationPage.class);
+
+               FileUploadField uploadField = 
(FileUploadField)tester.getComponentFromLastRenderedPage("form:upload");
+               uploadField.add(new IValidator<List<FileUpload>>() {
+                       @Override
+                       public void validate(IValidatable<List<FileUpload>> 
validatable)
+                       {
+                               // must check during validation, since the 
uploads are nullified on detach
+                               assertEquals(0, validatable.getValue().size());
+                       }
+               });
+               FormTester formtester = tester.newFormTester("form");
+               formtester.setFile("upload", null, "text/xml");
+               formtester.submit();
+
+               tester.assertNoErrorMessage();
        }
 
-       
        public static class TestValidationPage extends 
MockPageWithFormAndUploadField
        {
                /** */

Reply via email to