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