You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2012/09/11 07:44:51 UTC
[1/7] git commit: WICKET-4757 fix form validation bug where form
components would remain invalid until their error messages were rendered
Updated Branches:
refs/heads/master d6e110345 -> fd910746d
WICKET-4757 fix form validation bug where form components would remain invalid until their error messages were rendered
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/fd910746
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/fd910746
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/fd910746
Branch: refs/heads/master
Commit: fd910746d7c1ed83f49eb58c63c6249439b9a0cd
Parents: ed2b021
Author: Igor Vaynberg <ig...@gmail.com>
Authored: Mon Sep 10 22:44:16 2012 -0700
Committer: Igor Vaynberg <ig...@gmail.com>
Committed: Mon Sep 10 22:44:16 2012 -0700
----------------------------------------------------------------------
.../org/apache/wicket/markup/html/form/Form.java | 3 +-
.../markup/html/form/FormValidationTest.java | 148 +++++++++++++++
2 files changed, 149 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/fd910746/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 9d46baf..d3c9b8b 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
@@ -170,8 +170,7 @@ public class Form<T> extends WebMarkupContainer implements IFormSubmitListener
return;
}
- if (formComponent.isVisibleInHierarchy() && formComponent.isValid() &&
- formComponent.isEnabledInHierarchy())
+ if (formComponent.isVisibleInHierarchy() && formComponent.isEnabledInHierarchy())
{
validate(formComponent);
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/fd910746/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormValidationTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormValidationTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormValidationTest.java
new file mode 100644
index 0000000..b3dede8
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormValidationTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.markup.html.form;
+
+import static org.junit.Assert.*;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTesterScope;
+import org.junit.Rule;
+import org.junit.Test;
+
+/**
+ * Form validation related tests
+ *
+ * @author igor
+ */
+public class FormValidationTest
+{
+ @Rule
+ public WicketTesterScope scope = new WicketTesterScope();
+
+ /**
+ * Tests validation of form components when all errors are rendered using a feedback panel.
+ *
+ * Validation status depends on whether or not a form component has error messages, here we test
+ * submission roundtrip in a usecase where all error messages are rendered and cleared at the
+ * end of the request.
+ */
+ @Test
+ public void renderedFeedbackMessages()
+ {
+ // start the page
+
+ TestPage page = new TestPage();
+ scope.getTester().startPage(page);
+
+ // submit the form without filling out any values
+
+ FormTester formTester = scope.getTester().newFormTester(page.form.getPageRelativePath());
+ formTester.setClearFeedbackMessagesBeforeSubmit(true);
+ formTester.submit();
+
+ // the first required form component should fail and so should the form
+
+ assertTrue(page.form.hasError());
+ assertFalse(page.field1.isValid());
+
+ // fill out a value and submit again
+
+ formTester = scope.getTester().newFormTester(page.form.getPageRelativePath());
+ formTester.setValue(page.field1, "hi");
+ formTester.setClearFeedbackMessagesBeforeSubmit(true);
+ formTester.submit();
+
+ // now the form and the form component should be valid
+
+ assertFalse(page.form.hasError());
+ assertTrue(page.field1.isValid());
+ }
+
+ /**
+ * Tests validation of form components when not all errors are rendered (maybe a missing
+ * feedback panel, maybe a feedback panel with a filter).
+ *
+ * Validation status depends on whether or not a form component has error messages, here we test
+ * submission roundtrip in a usecase where not all error messages are rendered and cleared at
+ * the end of the request.
+ *
+ * Even though a form component has error messages not rendered from the previous submission
+ * they should not block the component from re-validating.
+ */
+ @Test
+ public void unrenderedFeedbackMessages()
+ {
+ // start the page
+
+ TestPage page = new TestPage();
+ scope.getTester().startPage(page);
+
+ // submit the form without filling out any values
+
+ FormTester formTester = scope.getTester().newFormTester(page.form.getPageRelativePath());
+ formTester.setClearFeedbackMessagesBeforeSubmit(false);
+ formTester.submit();
+
+ // the first required form component should fail and so should the form
+
+ assertTrue(page.form.hasError());
+ assertFalse(page.field1.isValid());
+
+ // fill out a value and submit again
+
+ formTester = scope.getTester().newFormTester(page.form.getPageRelativePath());
+ formTester.setValue(page.field1, "hi");
+ formTester.setClearFeedbackMessagesBeforeSubmit(false);
+ formTester.submit();
+
+ // now the form and the form component should be valid
+
+ assertFalse(page.form.hasError());
+ assertTrue(page.field1.isValid());
+ }
+
+
+ public static class TestPage extends WebPage implements IMarkupResourceStreamProvider
+ {
+ public final TextField field1;
+ public final Form form;
+
+ public TestPage()
+ {
+ form = new Form("form");
+ add(form);
+ form.add(field1 = new TextField("field1", Model.of("")));
+ field1.setRequired(true);
+ }
+
+ @Override
+ public IResourceStream getMarkupResourceStream(MarkupContainer container,
+ Class<?> containerClass)
+ {
+ return new StringResourceStream("<html><body>"//
+ + "<form wicket:id='form'><input wicket:id='field1' type='text'/></form>" //
+ + "</body></html>");
+ }
+ }
+
+}