Author: jbq
Date: Tue Aug 21 09:06:39 2007
New Revision: 568182

URL: http://svn.apache.org/viewvc?rev=568182&view=rev
Log:
WICKET-728 WicketTester could not handle Multipart form without upload

Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java?rev=568182&r1=568181&r2=568182&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
 Tue Aug 21 09:06:39 2007
@@ -178,6 +178,8 @@
 
        private Map/* <String, UploadedFile> */uploadedFiles;
 
+       private boolean useMultiPartContentType;
+
        /**
         * Create the request using the supplied session object.
         * 
@@ -313,16 +315,27 @@
        }
 
        /**
-        * Return the length of the content. This is always -1 except if there 
has
-        * been added uploaded files. Then the length will be the length of the
-        * generated request.
+        * true will force Request genarate multiPart ContentType and 
ContentLength
+        * 
+        * @param useMultiPartContentType
+        */
+       public void setUseMultiPartContentType(boolean useMultiPartContentType)
+       {
+               this.useMultiPartContentType = useMultiPartContentType;
+       }
+
+
+       /**
+        * Return the length of the content. This is always -1 except if
+        * useMultiPartContentType set as true. Then the length will be the 
length
+        * of the generated request.
         * 
-        * @return -1 if no uploaded files has been added. Else the length of 
the
+        * @return -1 if useMultiPartContentType is false. Else the length of 
the
         *         generated request.
         */
        public int getContentLength()
        {
-               if (uploadedFiles != null && uploadedFiles.size() > 0)
+               if (useMultiPartContentType)
                {
                        String request = buildRequest();
                        return request.length();
@@ -332,14 +345,14 @@
        }
 
        /**
-        * If there has been added uploaded files return the correct 
content-type.
+        * If useMultiPartContentType set as true return the correct 
content-type.
         * 
-        * @return The correct multipart content-type if there has been added
-        *         uploaded files. Else null.
+        * @return The correct multipart content-type if 
useMultiPartContentType is
+        *         true. Else null.
         */
        public String getContentType()
        {
-               if (uploadedFiles != null && uploadedFiles.size() > 0)
+               if (useMultiPartContentType)
                {
                        return FileUploadBase.MULTIPART_FORM_DATA + "; 
boundary=abcdefgABCDEFG";
                }

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java?rev=568182&r1=568181&r2=568182&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
 Tue Aug 21 09:06:39 2007
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.util.tester;
 
+import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Arrays;
@@ -43,10 +44,8 @@
 import org.apache.wicket.markup.html.form.upload.FileUploadField;
 import org.apache.wicket.protocol.http.MockHttpServletRequest;
 import org.apache.wicket.protocol.http.WebRequestCycle;
-import org.apache.wicket.protocol.http.servlet.MultipartServletWebRequest;
 import org.apache.wicket.util.file.File;
 import org.apache.wicket.util.string.Strings;
-import org.apache.wicket.util.upload.FileUploadException;
 
 
 /**
@@ -556,24 +555,38 @@
                try
                {
                        MockHttpServletRequest servletRequest = 
baseWicketTester.getServletRequest();
+
                        WebRequestCycle requestCycle = 
baseWicketTester.createRequestCycle();
                        servletRequest.setRequestToComponent(workingForm);
 
-                       if (servletRequest.hasUploadedFiles())
-                       {
-                               requestCycle.setRequest(new 
MultipartServletWebRequest(servletRequest, workingForm
-                                               .getMaxSize()));
-                       }
-
+                       
servletRequest.setUseMultiPartContentType(isMultiPart());
                        baseWicketTester.processRequestCycle(requestCycle);
                }
-               catch (FileUploadException e)
-               {
-                       throw new WicketRuntimeException(e);
-               }
                finally
                {
                        closed = true;
+               }
+       }
+
+       private boolean isMultiPart()
+       {
+               try
+               {
+                       Field multiPart = 
Form.class.getDeclaredField("multiPart");
+                       multiPart.setAccessible(true);
+                       return multiPart.getBoolean(workingForm);
+               }
+               catch (SecurityException e)
+               {
+                       throw new RuntimeException(e);
+               }
+               catch (NoSuchFieldException e)
+               {
+                       throw new RuntimeException(e);
+               }
+               catch (IllegalAccessException e)
+               {
+                       throw new RuntimeException(e);
                }
        }
 

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java?rev=568182&r1=568181&r2=568182&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
 Tue Aug 21 09:06:39 2007
@@ -107,7 +107,7 @@
         * Test that formTester deal with Multipart form correctly when no 
actual
         * upload
         */
-       public void bugTestSubmitWithoutUploadFile()
+       public void testSubmitWithoutUploadFile()
        {
                tester.startPage(MockFormFileUploadPage.class);
                MockFormFileUploadPage page = 
(MockFormFileUploadPage)tester.getLastRenderedPage();

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.java?rev=568182&r1=568181&r2=568182&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.java
 Tue Aug 21 09:06:39 2007
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.util.tester;
 
+import java.io.Serializable;
+
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.TextField;
@@ -38,8 +40,10 @@
         * 
         * @author frankbille
         */
-       public static class MockDomainObjectFileUpload
+       public static class MockDomainObjectFileUpload implements Serializable
        {
+               private static final long serialVersionUID = 1L;
+
                private String text;
 
                /**
@@ -85,6 +89,7 @@
                form.setMaxSize(Bytes.kilobytes(100));
                form.add(new TextField("text"));
                fileUploadField = new FileUploadField("file");
+               fileUploadField.setRequired(true);
                form.add(fileUploadField);
        }
 

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java?rev=568182&r1=568181&r2=568182&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
 Tue Aug 21 09:06:39 2007
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.util.tester;
 
+import java.io.Serializable;
+
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.html.form.CheckBox;
@@ -36,8 +38,10 @@
        /**
         * Domain object
         */
-       public class MockDomainObject
+       public class MockDomainObject implements Serializable
        {
+               private static final long serialVersionUID = 1L;
+
                private String text;
                private boolean checkbox;
                private String textarea;


Reply via email to