Author: mgrigorov
Date: Fri May 27 12:21:18 2011
New Revision: 1128275

URL: http://svn.apache.org/viewvc?rev=1128275&view=rev
Log:
WICKET-3711 FormTester doesn't treat SubmitLink and AjaxSubmitLink correctly


Added:
    
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html
    
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java
Modified:
    
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
    
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
    
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java?rev=1128275&r1=1128274&r2=1128275&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
 Fri May 27 12:21:18 2011
@@ -110,7 +110,7 @@ public class MockWebApplication
        private WebRequest wicketRequest;
 
        /** Parameters to be set on the next request. */
-       private Map<String, String[]> parametersForNextRequest = new 
HashMap<String, String[]>();
+       private Map<String, String[]> parametersForNextRequest;
 
        /** Response. */
        private WebResponse wicketResponse;
@@ -144,6 +144,7 @@ public class MockWebApplication
         */
        public MockWebApplication(final WebApplication application, final 
String path)
        {
+               parametersForNextRequest = new HashMap<String, String[]>();
                this.application = application;
 
                context = newServletContext(path);
@@ -532,6 +533,8 @@ public class MockWebApplication
                        }
                        cycle.detach();
                        createRequestCycle();
+                       parametersForNextRequest.clear();
+                       servletRequest.getParameterMap().clear();
                }
                finally
                {

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=1128275&r1=1128274&r2=1128275&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 Fri May 27 12:21:18 2011
@@ -1447,9 +1447,11 @@ public class BaseWicketTester extends Mo
 
                                                // Set request parameter with 
the field value, but do not modify an existing
                                                // request parameter explicitly 
set using FormTester.setValue()
-                                               if 
(requestParameters.containsKey(name) == false)
+                                               if 
(!getServletRequest().getParameterMap().containsKey(name) &&
+                                                       
!getParametersForNextRequest().containsKey(name))
                                                {
-                                                       
requestParameters.put(name, new String[] { value });
+                                                       
getServletRequest().setParameter(name, value);
+                                                       
getParametersForNextRequest().put(name, new String[] { value });
                                                }
                                        }
                                }

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java?rev=1128275&r1=1128274&r2=1128275&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
 Fri May 27 12:21:18 2011
@@ -831,6 +831,8 @@ public class FormTester
         */
        private void setFormComponentValue(FormComponent<?> formComponent, 
String value)
        {
+               
baseWicketTester.getParametersForNextRequest().put(formComponent.getInputName(),
+                       new String[] { value });
                
baseWicketTester.getServletRequest().setParameter(formComponent.getInputName(), 
value);
        }
 

Added: 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest%24TestPage.html?rev=1128275&view=auto
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html
 (added)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html
 Fri May 27 12:21:18 2011
@@ -0,0 +1,15 @@
+<html 
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"; >
+    <head>
+        <title>Wicket Quickstart Archetype Homepage</title>
+    </head>
+    <body>
+        <form wicket:id="form">
+            <input type="text" wicket:id="text"/>
+            <a href="" wicket:id="submit">submit</a>
+        </form>
+        <form wicket:id="form2">
+            <input type="text" wicket:id="text"/>
+            <a href="" wicket:id="submit">submit</a>
+        </form>
+    </body>
+</html>

Added: 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java?rev=1128275&view=auto
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java
 (added)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java
 Fri May 27 12:21:18 2011
@@ -0,0 +1,117 @@
+/*
+ * 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.util.tester;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.SubmitLink;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.Model;
+
+public class FormTesterSubmitLinkTest extends TestCase
+{
+       private WicketTester tester;
+
+       @Override
+       protected void setUp() throws Exception
+       {
+               super.setUp();
+               tester = new WicketTester();
+       }
+
+       /**
+        * this should work the same as regular submit
+        */
+       public void testSubmitLink() throws Exception
+       {
+               tester.startPage(TestPage.class);
+
+               FormTester form = tester.newFormTester("form");
+               form.setValue("text", "some test text");
+               form.submitLink("submit", false);
+               assertEquals("some test text", 
tester.getComponentFromLastRenderedPage("form:text")
+                       .getDefaultModelObjectAsString());
+       }
+
+       public void testAjaxSubmitLink() throws Exception
+       {
+               tester.startPage(TestPage.class);
+
+               FormTester form = tester.newFormTester("form2");
+               form.setValue("text", "some test text");
+               tester.clickLink("form2:submit", true);
+               assertEquals("some test text", 
tester.getComponentFromLastRenderedPage("form2:text")
+                       .getDefaultModelObjectAsString());
+       }
+
+       public void testAjaxSubmitLinkMustNotLosePreviousInput() throws 
Exception
+       {
+               tester.startPage(TestPage.class);
+
+               FormTester form = tester.newFormTester("form2");
+               form.setValue("text", "some test text");
+               tester.clickLink("form2:submit", true);
+               // click again for no-change resubmit. should still contain the 
same values now.
+               tester.clickLink("form2:submit", true);
+               assertEquals("some test text", 
tester.getComponentFromLastRenderedPage("form2:text")
+                       .getDefaultModelObjectAsString());
+       }
+
+       public void testRegularSubmit() throws Exception
+       {
+               tester.startPage(TestPage.class);
+
+               FormTester form = tester.newFormTester("form");
+               form.setValue("text", "some test text");
+               form.submit();
+               assertEquals("some test text", 
tester.getComponentFromLastRenderedPage("form:text")
+                       .getDefaultModelObjectAsString());
+       }
+
+       @Override
+       protected void tearDown() throws Exception
+       {
+               tester.destroy();
+               super.tearDown();
+       }
+
+       public static class TestPage extends WebPage
+       {
+               public TestPage()
+               {
+                       Form form = new Form("form");
+                       add(form);
+                       form.add(new TextField<String>("text", Model.of(""), 
String.class));
+                       form.add(new SubmitLink("submit"));
+                       Form form2 = new Form("form2");
+                       add(form2);
+                       form2.add(new TextField<String>("text", Model.of(""), 
String.class));
+                       form2.add(new AjaxSubmitLink("submit")
+                       {
+                               @Override
+                               protected void onSubmit(AjaxRequestTarget 
target, Form<?> form)
+                               {
+                               }
+                       });
+               }
+       }
+
+}


Reply via email to