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