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