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")); + } +}
