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();
                }
        }
 

Reply via email to