Updated Branches:
  refs/heads/master 1c68a3b9c -> 2ac70462d

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/2ac70462
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2ac70462
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2ac70462

Branch: refs/heads/master
Commit: 2ac70462dd77692696afbaf86252c0009a01c0d9
Parents: 1c68a3b
Author: martin-g <[email protected]>
Authored: Fri Dec 23 12:46:57 2011 +0200
Committer: martin-g <[email protected]>
Committed: Fri Dec 23 12:46:57 2011 +0200

----------------------------------------------------------------------
 .../wicket/util/tester/BaseWicketTester.java       |    2 +-
 .../apache/wicket/util/tester/FormTesterTest.java  |   37 ++++++++++
 .../apache/wicket/util/tester/NestedFormPage.html  |   10 +++
 .../apache/wicket/util/tester/NestedFormPage.java  |   53 +++++++++++++++
 4 files changed, 101 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/2ac70462/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java 
b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
index 209dc97..7368e1b 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
@@ -1818,7 +1818,7 @@ public class BaseWicketTester
        public void submitForm(String path)
        {
                Form<?> form = (Form<?>)getComponentFromLastRenderedPage(path);
-               Url url = 
Url.parse(form.urlFor(IFormSubmitListener.INTERFACE).toString(),
+               Url url = 
Url.parse(form.getRootForm().urlFor(IFormSubmitListener.INTERFACE).toString(),
                        Charset.forName(request.getCharacterEncoding()));
 
                // make url absolute

http://git-wip-us.apache.org/repos/asf/wicket/blob/2ac70462/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java 
b/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
index 6989965..525717a 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
@@ -298,4 +298,41 @@ public class FormTesterTest extends WicketTestCase
 
                assertEquals("opt 1", page.selection);
        }
+
+       @Test
+       public void testNestedFormHandlingOnInnerSubmit() throws Exception
+       {
+               NestedFormPage page = 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.url.contains("inner"));
+               assertFalse("outer form should not be processed", 
page.outerSubmitted);
+               assertTrue("inner form should be processed", 
page.innerSubmitted);
+       }
+
+       @Test
+       public void testNestedFormHandlingOnInnerSubmitWithOuterForm() throws 
Exception
+       {
+               NestedFormPage page = 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.url.contains("inner"));
+               assertFalse("outer form should not be processed", 
page.outerSubmitted);
+               assertTrue("inner form should be processed", 
page.innerSubmitted);
+       }
+
+       @Test
+       public void testNestedFormHandlingOnOuterSubmit() throws Exception
+       {
+               NestedFormPage page = tester.startPage(NestedFormPage.class);
+               FormTester form = tester.newFormTester("outer");
+               form.submit();
+               assertFalse("should not directly submit inner form - browsers 
submit the outer form!",
+                       page.url.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/2ac70462/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html 
b/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html
new file mode 100644
index 0000000..e978c75
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org";>
+       <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/2ac70462/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java 
b/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java
new file mode 100644
index 0000000..62b5037
--- /dev/null
+++ 
b/wicket-core/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 url = "";
+       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()
+                       {
+                               url = getRequest().getUrl().toString();
+                               innerSubmitted = true;
+                       }
+               };
+               outer.add(inner);
+               inner.add(new Button("submit"));
+       }
+}

Reply via email to