Updated Branches:
  refs/heads/wicket-1.4.x 17200f8f4 -> 52d53fc42

WICKET-4298
FormTester doesn't handle nested forms correctly


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

Branch: refs/heads/wicket-1.4.x
Commit: 52d53fc42209ee87ad82c1ef1e4b46b548ce15b4
Parents: 17200f8
Author: martin-g <[email protected]>
Authored: Fri Dec 23 12:55:53 2011 +0200
Committer: martin-g <[email protected]>
Committed: Fri Dec 23 12:55:53 2011 +0200

----------------------------------------------------------------------
 .../org/apache/wicket/util/tester/FormTester.java  |    2 +-
 .../apache/wicket/util/tester/FormTesterTest.java  |   33 +++++++++
 .../apache/wicket/util/tester/NestedFormPage.html  |    9 +++
 .../apache/wicket/util/tester/NestedFormPage.java  |   53 +++++++++++++++
 4 files changed, 96 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/52d53fc4/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
----------------------------------------------------------------------
diff --git a/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java 
b/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
index 67e2be8..b3d8839 100644
--- a/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
+++ b/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
@@ -689,7 +689,7 @@ public class FormTester
                        MockHttpServletRequest servletRequest = 
baseWicketTester.getServletRequest();
 
                        WebRequestCycle requestCycle = 
baseWicketTester.createRequestCycle();
-                       servletRequest.setRequestToComponent(workingForm);
+                       
servletRequest.setRequestToComponent(workingForm.getRootForm());
 
                        
servletRequest.setUseMultiPartContentType(isMultiPart());
                        baseWicketTester.processRequestCycle(requestCycle);

http://git-wip-us.apache.org/repos/asf/wicket/blob/52d53fc4/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
----------------------------------------------------------------------
diff --git 
a/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java 
b/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
index 12dbb07..cb42941 100644
--- a/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
+++ b/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
@@ -227,4 +227,37 @@ public class FormTesterTest extends WicketTestCase
                FormTester formTester = tester.newFormTester("form");
                formTester.submit();
        }
+
+       public void testNestedFormHandlingOnInnerSubmit() throws Exception
+       {
+               NestedFormPage page = 
(NestedFormPage)tester.startPage(NestedFormPage.class);
+               FormTester form = tester.newFormTester("outer:inner");
+               form.submit("submit");
+               assertFalse("should not directly submit inner form - browsers 
submit the outer form!",
+                       page.iface.contains("inner"));
+               assertFalse("outer form should not be processed", 
page.outerSubmitted);
+               assertTrue("inner form should be processed", 
page.innerSubmitted);
+       }
+
+       public void testNestedFormHandlingOnInnerSubmitWithOuterForm() throws 
Exception
+       {
+               NestedFormPage page = 
(NestedFormPage)tester.startPage(NestedFormPage.class);
+               FormTester form = tester.newFormTester("outer");
+               form.submit("inner:submit");
+               assertFalse("should not directly submit inner form - browsers 
submit the outer form!",
+                       page.iface.contains("inner"));
+               assertFalse("outer form should not be processed", 
page.outerSubmitted);
+               assertTrue("inner form should be processed", 
page.innerSubmitted);
+       }
+
+       public void testNestedFormHandlingOnOuterSubmit() throws Exception
+       {
+               NestedFormPage page = 
(NestedFormPage)tester.startPage(NestedFormPage.class);
+               FormTester form = tester.newFormTester("outer");
+               form.submit();
+               assertFalse("should not directly submit inner form - browsers 
submit the outer form!",
+                       page.iface.contains("inner"));
+               assertTrue("outer form should be processed", 
page.outerSubmitted);
+               assertTrue("inner form should be processed", 
page.innerSubmitted);
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/52d53fc4/wicket/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html
----------------------------------------------------------------------
diff --git 
a/wicket/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html 
b/wicket/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html
new file mode 100644
index 0000000..e7efbf9
--- /dev/null
+++ b/wicket/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html
@@ -0,0 +1,9 @@
+<html>
+<body>
+<form wicket:id="outer">
+<form wicket:id="inner">
+<input type="submit" wicket:id="submit"/>
+</form>
+</form>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/52d53fc4/wicket/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java
----------------------------------------------------------------------
diff --git 
a/wicket/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java 
b/wicket/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java
new file mode 100644
index 0000000..0f2352a
--- /dev/null
+++ b/wicket/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java
@@ -0,0 +1,53 @@
+/*
+ * 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 org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.Form;
+
+public class NestedFormPage extends WebPage
+{
+       public String iface;
+       public boolean outerSubmitted;
+       public boolean innerSubmitted;
+
+       public NestedFormPage()
+       {
+               Form<?> outer = new Form("outer")
+               {
+                       @Override
+                       protected void onSubmit()
+                       {
+                               super.onSubmit();
+                               outerSubmitted = true;
+                       }
+               };
+               add(outer);
+               Form<?> inner = new Form("inner")
+               {
+                       @Override
+                       protected void onSubmit()
+                       {
+                               iface = 
getRequest().getParameter("wicket:interface");
+                               innerSubmitted = true;
+                       }
+               };
+               outer.add(inner);
+               inner.add(new Button("submit"));
+       }
+}

Reply via email to