You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2013/10/28 09:46:12 UTC

[05/27] git commit: WICKET-5346 Support MultiFileUploadField in FormTester

WICKET-5346 Support MultiFileUploadField in FormTester


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

Branch: refs/heads/wicket-4997
Commit: 0ff9269369b4a6c9a4d42d27f7323e6255c27b09
Parents: 9ed34b9
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri Sep 27 13:13:32 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Sep 27 13:13:32 2013 +0200

----------------------------------------------------------------------
 .../html/form/upload/MultiFileUploadField.java  |   4 +-
 .../apache/wicket/util/tester/FormTester.java   |  30 +++--
 .../form/upload/MultiFileUploadFieldTest.java   | 123 +++++++++++++++++++
 .../form/upload/MultiFileUploadFieldTest0.txt   |   1 +
 .../form/upload/MultiFileUploadFieldTest1.txt   |   1 +
 5 files changed, 148 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/0ff92693/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java
index bec6489..4e803a3 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java
@@ -90,13 +90,11 @@ public class MultiFileUploadField extends FormComponentPanel<Collection<FileUplo
 
 	private static final String NAME_ATTR = "name";
 
-	private static final String MAGIC_SEPARATOR = "_mf_";
-
+	public static final String MAGIC_SEPARATOR = "_mf_";
 
 	public static final ResourceReference JS = new JavaScriptResourceReference(
 		MultiFileUploadField.class, "MultiFileUploadField.js");
 
-
 	private final WebComponent upload;
 	private final WebMarkupContainer container;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/0ff92693/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 ab3bf72..20bacdc 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
@@ -40,6 +40,7 @@ import org.apache.wicket.markup.html.form.ListMultipleChoice;
 import org.apache.wicket.markup.html.form.Radio;
 import org.apache.wicket.markup.html.form.RadioGroup;
 import org.apache.wicket.markup.html.form.upload.FileUploadField;
+import org.apache.wicket.markup.html.form.upload.MultiFileUploadField;
 import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
 import org.apache.wicket.util.file.File;
 import org.apache.wicket.util.lang.Args;
@@ -58,6 +59,11 @@ import org.apache.wicket.util.visit.IVisitor;
 public class FormTester
 {
 	/**
+	 * An auto incrementing index used as a suffix for MultiFileUploadField's inputName
+	 */
+	private int multiFileUploadIndex = 0;
+
+	/**
 	 * A selector template for selecting selectable <code>FormComponent</code>s with an index of
 	 * option -- supports <code>RadioGroup</code>, <code>CheckGroup</code>, and
 	 * <code>AbstractChoice</code> family.
@@ -293,9 +299,9 @@ public class FormTester
 			if (formComponent == null)
 			{
 				fail("Trying to select on null component.");
+				return null;
 			}
-
-			if (formComponent instanceof RadioGroup ||
+			else if (formComponent instanceof RadioGroup ||
 				formComponent instanceof AbstractSingleSelectChoice)
 			{
 				return new SingleChoiceSelector(formComponent);
@@ -420,7 +426,7 @@ public class FormTester
 		{
 			if (formComponent instanceof IFormSubmittingComponent)
 			{
-				// buttons have to be sumitted explicitely
+				// buttons have to be submitted explicitely
 			}
 			else if (formComponent instanceof AbstractTextComponent)
 			{
@@ -565,7 +571,7 @@ public class FormTester
 	{
 		checkClosed();
 
-		if (replace == true)
+		if (replace)
 		{
 			// Reset first
 			setValue(formComponentId, "");
@@ -661,16 +667,24 @@ public class FormTester
 
 		FormComponent<?> formComponent = (FormComponent<?>)workingForm.get(formComponentId);
 
-		if (formComponent instanceof FileUploadField == false)
+		MockHttpServletRequest servletRequest = tester.getRequest();
+
+		if (formComponent instanceof FileUploadField)
+		{
+			servletRequest.addFile(formComponent.getInputName(), file, contentType);
+		}
+		else if (formComponent instanceof MultiFileUploadField)
+		{
+			String inputName = formComponent.getInputName() + MultiFileUploadField.MAGIC_SEPARATOR + multiFileUploadIndex++;
+			servletRequest.addFile(inputName, file, contentType);
+		}
+		else
 		{
 			fail("'" + formComponentId + "' is not " +
 				"a FileUploadField. You can only attach a file to form " +
 				"component of this type.");
 		}
 
-		MockHttpServletRequest servletRequest = tester.getRequest();
-		servletRequest.addFile(formComponent.getInputName(), file, contentType);
-
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/0ff92693/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest.java
new file mode 100644
index 0000000..472c8e8
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest.java
@@ -0,0 +1,123 @@
+/*
+ * 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.wicket.markup.html.form.upload;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.util.file.File;
+import org.apache.wicket.util.io.IOUtils;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.FormTester;
+import org.junit.Test;
+
+/**
+ * Tests for MultiFileUploadField
+ */
+public class MultiFileUploadFieldTest extends WicketTestCase
+{
+	/**
+	 * FormTester supports MultiFileUploadField
+	 *
+	 * https://issues.apache.org/jira/browse/WICKET-5346
+	 */
+	@Test
+	public void submitMultiFileUploadFields()
+	{
+		final AtomicBoolean submitted = new AtomicBoolean(false);
+		final ListModel<FileUpload> filesModel = new ListModel<FileUpload>(new ArrayList<FileUpload>());
+
+		TestPage page = new TestPage(filesModel)
+		{
+			@Override
+			protected void onSubmit()
+			{
+				super.onSubmit();
+
+				List<FileUpload> uploads = filesModel.getObject();
+				assertEquals(2, uploads.size());
+
+				for (int i = 1; i < 2; i++)
+				{
+					FileUpload fileUpload = uploads.get(i);
+					assertEquals(MultiFileUploadFieldTest.class.getSimpleName()+i+".txt", fileUpload.getClientFileName());
+					try
+					{
+						assertEquals("Test"+i, IOUtils.toString(fileUpload.getInputStream()));
+					} catch (IOException e)
+					{
+						fail("Reading file upload '"+i+"' failed: " + e.getMessage());
+					}
+				}
+				submitted.set(true);
+			}
+		};
+		tester.startPage(page);
+
+		FormTester ft = tester.newFormTester("f");
+
+		ft.setFile("muf", new File("target/test-classes/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest0.txt"), "plain/text");
+		ft.setFile("muf", new File("target/test-classes/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest1.txt"), "plain/text");
+		ft.submit();
+
+		assertEquals("The form is not submitted", true, submitted.get());
+	}
+
+	private static class TestPage extends WebPage implements IMarkupResourceStreamProvider
+	{
+		public TestPage(final ListModel<FileUpload> model)
+		{
+			Form f = new Form("f")
+			{
+				@Override
+				protected void onSubmit()
+				{
+					super.onSubmit();
+
+					TestPage.this.onSubmit();
+				}
+			};
+			add(f);
+
+			f.add(new MultiFileUploadField("muf", model));
+		}
+
+		protected void onSubmit()
+		{
+		}
+
+		@Override
+		public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
+		{
+			return new StringResourceStream("<html><body>\n" +
+					"\t\t<form wicket:id=\"f\">\n" +
+					"\t\t\t<input type=\"file\" wicket:id=\"muf\" />\n" +
+					"\t\t\t<input type=\"submit\" value=\"Submit!\" />\t\n" +
+					"\t\t</form>\n" +
+					"\t</body></html>");
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/0ff92693/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest0.txt
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest0.txt b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest0.txt
new file mode 100644
index 0000000..2eca140
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest0.txt
@@ -0,0 +1 @@
+Test0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/0ff92693/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest1.txt
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest1.txt b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest1.txt
new file mode 100644
index 0000000..e88ded9
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadFieldTest1.txt
@@ -0,0 +1 @@
+Test1
\ No newline at end of file