You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ni...@apache.org on 2006/03/10 08:55:25 UTC
svn commit: r384724 - in /jakarta/commons/proper/validator/trunk/src:
share/org/apache/commons/validator/ test/org/apache/commons/validator/
Author: niallp
Date: Thu Mar 9 23:55:23 2006
New Revision: 384724
URL: http://svn.apache.org/viewcvs?rev=384724&view=rev
Log:
Fix for Bug 38678 - ValidatorResult only contains last run dependency for the field - thanks to bart vandendriessche.
Added:
jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest-config.xml (with props)
jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest.java (with props)
Modified:
jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java
jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java
Modified: jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java?rev=384724&r1=384723&r2=384724&view=diff
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java (original)
+++ jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java Thu Mar 9 23:55:23 2006
@@ -834,6 +834,7 @@
for (int fieldNumber = 0; fieldNumber < numberOfFieldsToValidate; fieldNumber++) {
Iterator dependencies = this.dependencyList.iterator();
+ ValidatorResults results = new ValidatorResults();
while (dependencies.hasNext()) {
String depend = (String) dependencies.next();
@@ -842,16 +843,15 @@
this.handleMissingAction(depend);
}
- ValidatorResults results = new ValidatorResults();
boolean good =
validateForRule(action, results, actions, params, fieldNumber);
- allResults.merge(results);
-
if (!good) {
+ allResults.merge(results);
return allResults;
}
}
+ allResults.merge(results);
}
return allResults;
Added: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest-config.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest-config.xml?rev=384724&view=auto
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest-config.xml (added)
+++ jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest-config.xml Thu Mar 9 23:55:23 2006
@@ -0,0 +1,39 @@
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.2.0//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_2_0.dtd">
+
+<form-validation>
+ <global>
+ <validator name="int"
+ classname="org.apache.commons.validator.TestValidator"
+ method="validateInt"
+ methodParams="java.lang.Object,org.apache.commons.validator.Field"
+ msg=""/>
+
+ <validator name="required"
+ classname="org.apache.commons.validator.TestValidator"
+ method="validateRequired"
+ methodParams="java.lang.Object,org.apache.commons.validator.Field"
+ msg=""/>
+ <validator name="positive"
+ classname="org.apache.commons.validator.TestValidator"
+ method="validatePositive"
+ methodParams="java.lang.Object,org.apache.commons.validator.Field"
+ depends="int"
+ msg=""/>
+ </global>
+
+ <formset>
+ <form name="nameForm">
+ <field property="firstName" depends="required">
+ <arg key="nameForm.firstname.displayname"/>
+ </field>
+ <field property="middleName" depends="required,positive">
+ <arg key="nameForm.middlename.displayname"/>
+ </field>
+ <field property="lastName" depends="required,int">
+ <arg key="nameForm.lastname.displayname"/>
+ </field>
+ </form>
+ </formset>
+</form-validation>
Propchange: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest-config.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest-config.xml
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest.java?rev=384724&view=auto
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest.java (added)
+++ jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest.java Thu Mar 9 23:55:23 2006
@@ -0,0 +1,186 @@
+/*
+ * $Id$
+ * $Rev$
+ * $Date$
+ *
+ * ====================================================================
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed 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.commons.validator;
+
+import java.io.IOException;
+import java.util.Iterator;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.xml.sax.SAXException;
+
+/**
+ * Test ValidatorResults.
+ */
+public class ValidatorResultsTest extends TestCommon {
+
+ private static final String FORM_KEY = "nameForm";
+ private static final String firstNameField = "firstName";
+ private static final String middleNameField = "middleName";
+ private static final String lastNameField = "lastName";
+
+ private String firstName;
+ private String middleName;
+ private String lastName;
+
+ /**
+ * Constructor.
+ */
+ public ValidatorResultsTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Start the tests.
+ *
+ * @param theArgs the arguments. Not used
+ */
+ public static void main(String[] theArgs) {
+ junit.awtui.TestRunner.main(new String[] {ValidatorResultsTest.class.getName()});
+ }
+
+ /**
+ * @return a test suite (<code>TestSuite</code>) that includes all methods
+ * starting with "test"
+ */
+ public static Test suite() {
+ // All methods starting with "test" will be executed in the test suite.
+ return new TestSuite(ValidatorResultsTest.class);
+ }
+
+ /**
+ * Load <code>ValidatorResources</code> from
+ * ValidatorResultsTest-config.xml.
+ */
+ protected void setUp() throws IOException, SAXException {
+ // Load resources
+ loadResources("ValidatorResultsTest-config.xml");
+
+ // initialize values
+ firstName = "foo";
+ middleName = "123";
+ lastName = "456";
+
+ }
+
+ protected void tearDown() {
+ }
+
+ /**
+ * Test all validations ran and passed.
+ */
+ public void testAllValid() throws ValidatorException {
+
+ // Create bean to run test on.
+ NameBean bean = createNameBean();
+
+ // Validate.
+ ValidatorResults results = validate(bean);
+
+ // Check results
+ checkValidatorResult(results, firstNameField, "required", true);
+ checkValidatorResult(results, middleNameField, "required", true);
+ checkValidatorResult(results, middleNameField, "int", true);
+ checkValidatorResult(results, middleNameField, "positive", true);
+ checkValidatorResult(results, lastNameField, "required", true);
+ checkValidatorResult(results, lastNameField, "int", true);
+
+ }
+
+ /**
+ * Test some validations failed and some didn't run.
+ */
+ public void testErrors() throws ValidatorException {
+
+ middleName = "XXX";
+ lastName = null;
+
+ // Create bean to run test on.
+ NameBean bean = createNameBean();
+
+ // Validate.
+ ValidatorResults results = validate(bean);
+
+ // Check results
+ checkValidatorResult(results, firstNameField, "required", true);
+ checkValidatorResult(results, middleNameField, "required", true);
+ checkValidatorResult(results, middleNameField, "int", false);
+ checkNotRun(results, middleNameField, "positive");
+ checkValidatorResult(results, lastNameField, "required", false);
+ checkNotRun(results, lastNameField, "int");
+
+ }
+
+ /**
+ * Check a validator has not been run for a field and the result.
+ */
+ private void checkNotRun(ValidatorResults results, String field, String action) {
+ ValidatorResult result = results.getValidatorResult(field);
+ assertNotNull(field + " result", result);
+ assertFalse(field + "[" + action + "] run", result.containsAction(action));
+ // System.out.println(field + "[" + action + "] not run");
+ }
+
+ /**
+ * Check a validator has run for a field and the result.
+ */
+ private void checkValidatorResult(ValidatorResults results, String field, String action, boolean expected) {
+ ValidatorResult result = results.getValidatorResult(field);
+ // System.out.println(field + "[" + action + "]=" + result.isValid(action));
+ assertNotNull(field + " result", result);
+ assertTrue(field + "[" + action + "] not run", result.containsAction(action));
+ assertEquals(field + "[" + action + "] result", expected, result.isValid(action));
+ }
+
+ /**
+ * Create a NameBean.
+ */
+ private NameBean createNameBean() {
+ NameBean name = new NameBean();
+ name.setFirstName(firstName);
+ name.setMiddleName(middleName);
+ name.setLastName(lastName);
+ return name;
+ }
+
+ /**
+ * Validate results.
+ */
+ private ValidatorResults validate(Object bean) throws ValidatorException {
+
+ // Construct validator based on the loaded resources
+ // and the form key
+ Validator validator = new Validator(resources, FORM_KEY);
+
+ // add the name bean to the validator as a resource
+ // for the validations to be performed on.
+ validator.setParameter(Validator.BEAN_PARAM, bean);
+
+ // Get results of the validation.
+ ValidatorResults results = validator.validate();
+
+ return results;
+
+ }
+
+}
Propchange: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorResultsTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java?rev=384724&r1=384723&r2=384724&view=diff
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java (original)
+++ jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java Thu Mar 9 23:55:23 2006
@@ -67,6 +67,7 @@
suite.addTest(ValidatorTest.suite());
suite.addTest(VarTest.suite());
suite.addTestSuite(GenericValidatorTest.class);
+ suite.addTest(ValidatorResultsTest.suite());
return suite;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org