Updated Branches: refs/heads/wicket-1.5.x e0286bada -> f65696d4f
WICKET-4616 onError now called post-order, just like onSubmit Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f65696d4 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f65696d4 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f65696d4 Branch: refs/heads/wicket-1.5.x Commit: f65696d4f38383bc4299e18110c52ddf9a85e448 Parents: e0286ba Author: Carl-Eric Menzel <[email protected]> Authored: Sun Jun 24 02:18:13 2012 +0200 Committer: Carl-Eric Menzel <[email protected]> Committed: Sun Jun 24 02:35:20 2012 +0200 ---------------------------------------------------------------------- .../org/apache/wicket/markup/html/form/Form.java | 13 ++-- .../wicket/markup/html/form/FormSubmitTest.java | 62 +++++++++++---- .../wicket/markup/html/form/NestedFormsPage.java | 6 ++ 3 files changed, 59 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/f65696d4/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java index c74fff7..57b78d7 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java @@ -920,17 +920,18 @@ public class Form<T> extends WebMarkupContainer implements IFormSubmitListener */ protected void callOnError(IFormSubmitter submitter) { + final Form<?> processingForm = findFormToProcess(submitter); + if (submitter != null) { submitter.onError(); } - onError(); - // call onError on nested forms - visitChildren(Form.class, new IVisitor<Component, Void>() + + // invoke Form#onSubmit(..) going from innermost to outermost + Visits.visitPostOrder(processingForm, new IVisitor<Form<?>, Void>() { - public void component(final Component component, final IVisit<Void> visit) + public void component(Form<?> form, IVisit<Void> visit) { - final Form<?> form = (Form<?>)component; if (!form.isEnabledInHierarchy() || !form.isVisibleInHierarchy()) { visit.dontGoDeeper(); @@ -941,7 +942,7 @@ public class Form<T> extends WebMarkupContainer implements IFormSubmitListener form.onError(); } } - }); + }, new ClassVisitFilter(Form.class)); } http://git-wip-us.apache.org/repos/asf/wicket/blob/f65696d4/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java index 783d273..c4fe775 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java @@ -16,7 +16,7 @@ */ package org.apache.wicket.markup.html.form; -import org.apache.wicket.Page; +import org.apache.wicket.Component; import org.apache.wicket.WicketTestCase; import org.apache.wicket.markup.html.form.NestedFormsPage.NestableForm; import org.apache.wicket.request.handler.ListenerInvocationNotAllowedException; @@ -32,26 +32,26 @@ import org.junit.Test; */ public class FormSubmitTest extends WicketTestCase { - private Page page; + private NestedFormsPage page; private NestableForm outerForm; private NestableForm middleForm; private NestableForm innerForm; /** - * + * */ @Before public void before() { tester.startPage(new NestedFormsPage()); - page = tester.getLastRenderedPage(); + page = (NestedFormsPage)tester.getLastRenderedPage(); outerForm = (NestableForm)page.get("outerForm"); middleForm = (NestableForm)page.get("outerForm:middleForm"); innerForm = (NestableForm)page.get("outerForm:middleForm:innerForm"); } /** - * + * */ @Test public void allFormsEnabledSubmitOuterForm() @@ -63,10 +63,31 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(true, true, true); assertOnErrorCalled(false, false, false); + assertSubmitOrder(innerForm, middleForm, outerForm); + } + + private void assertSubmitOrder(NestableForm... forms) + { + assertEquals("not submitted in expected order!", joinIds(forms), page.submitOrder); + } + + private String joinIds(Component[] comps) + { + String result = ""; + for (Component component : comps) + { + result += component.getId(); + } + return result; + } + + private void assertErrorOrder(NestableForm... forms) + { + assertEquals("not onError'd in expected order!", joinIds(forms), page.errorOrder); } /** - * + * */ @Test public void allFormsEnabledSubmitMiddleForm() @@ -78,10 +99,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(false, true, true); assertOnErrorCalled(false, false, false); + assertSubmitOrder(innerForm, middleForm); } /** - * + * */ @Test public void allFormsEnabledSubmitInnerForm() @@ -93,10 +115,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(false, false, true); assertOnErrorCalled(false, false, false); + assertSubmitOrder(innerForm); } /** - * + * */ @Test public void middleFormDisabledSubmitOuterForm() @@ -111,10 +134,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(true, false, false); assertOnErrorCalled(false, false, false); + assertSubmitOrder(outerForm); } /** - * + * */ @Test public void innerFormDisabledSubmitOuterForm() @@ -129,10 +153,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(true, true, false); assertOnErrorCalled(false, false, false); + assertSubmitOrder(middleForm, outerForm); } /** - * + * */ @Test public void submitDisabledOuterForm() @@ -155,7 +180,7 @@ public class FormSubmitTest extends WicketTestCase } /** - * + * */ @Test public void errorOnInnerFormSubmitOuterForm() @@ -166,10 +191,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(false, false, false); assertOnErrorCalled(true, true, true); + assertErrorOrder(innerForm, middleForm, outerForm); } /** - * + * */ @Test public void errorOnMiddleFormSubmitOuterForm() @@ -180,10 +206,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(false, false, false); assertOnErrorCalled(true, true, false); + assertErrorOrder(middleForm, outerForm); } /** - * + * */ @Test public void errorOnMiddleFormSubmitMiddleForm() @@ -194,10 +221,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(false, false, false); assertOnErrorCalled(false, true, false); + assertErrorOrder(middleForm); } /** - * + * */ @Test public void errorOnInnerFormSubmitMiddleForm() @@ -208,10 +236,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(false, false, false); assertOnErrorCalled(false, true, true); + assertErrorOrder(innerForm, middleForm); } /** - * + * */ @Test public void middleFormDisabledErrorOnOuterFormSubmitOuterForm() @@ -223,10 +252,11 @@ public class FormSubmitTest extends WicketTestCase assertOnSubmitCalled(false, false, false); assertOnErrorCalled(true, false, false); + assertErrorOrder(outerForm); } /** - * + * */ @Test public void errorOnInnerFormDisabledMiddleFormSubmitOuterForm() http://git-wip-us.apache.org/repos/asf/wicket/blob/f65696d4/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java index 36b23cd..a20aa30 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java @@ -38,6 +38,10 @@ public class NestedFormsPage extends WebPage private final FeedbackPanel feedback; + public String submitOrder = ""; + + public String errorOrder = ""; + /** * Construct. */ @@ -116,6 +120,7 @@ public class NestedFormsPage extends WebPage super.onSubmit(); onSubmitCalled = true; logger.info(getId() + ".onSubmit"); + submitOrder += getId(); } @Override @@ -124,6 +129,7 @@ public class NestedFormsPage extends WebPage super.onError(); onErrorCalled = true; logger.info(getId() + ".onError"); + errorOrder += getId(); } }
