You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2009/11/08 11:57:05 UTC

svn commit: r833854 - in /myfaces/extensions/validator/trunk: test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validato...

Author: gpetracek
Date: Sun Nov  8 10:57:05 2009
New Revision: 833854

URL: http://svn.apache.org/viewvc?rev=833854&view=rev
Log:
EXTVAL-30 bv model validation test cases

Added:
    myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ModelValidationTestCase.java
      - copied, changed from r833789, myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ClassLevelValidationTestCase.java
Removed:
    myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ClassLevelValidationTestCase.java
Modified:
    myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/view/ModelValidationTestCase1PageBean.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java

Copied: myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ModelValidationTestCase.java (from r833789, myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ClassLevelValidationTestCase.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ModelValidationTestCase.java?p2=myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ModelValidationTestCase.java&p1=myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ClassLevelValidationTestCase.java&r1=833789&r2=833854&rev=833854&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ClassLevelValidationTestCase.java (original)
+++ myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/ModelValidationTestCase.java Sun Nov  8 10:57:05 2009
@@ -24,17 +24,17 @@
 
 import javax.faces.application.FacesMessage;
 
-public class ClassLevelValidationTestCase extends
+public class ModelValidationTestCase extends
         BaseBeanValPropertyValidationTestCase<ModelValidationTestCase1PageBean>
 {
-    public ClassLevelValidationTestCase(String name)
+    public ModelValidationTestCase(String name)
     {
         super(name);
     }
 
     public static Test suite()
     {
-        return new TestSuite(ClassLevelValidationTestCase.class);
+        return new TestSuite(ModelValidationTestCase.class);
     }
 
     protected ModelValidationTestCase1PageBean getBeanToTest()
@@ -59,7 +59,7 @@
         checkMessageCount(0);
     }
 
-    public void testClassLevelViolationWithGlobalViolationMessage()
+    public void testClassLevelViolationWithGlobalViolationMessageViaProperty()
     {
         createValueBindingForComponent(this.inputComponent1, "#{testBean.model1.property1}");
         setValueToValidate(this.inputComponent1, "123");
@@ -77,7 +77,7 @@
         checkMessageSeverities(FacesMessage.SEVERITY_ERROR);
     }
 
-    public void testClassLevelViolationWithInlineViolationMessage()
+    public void testClassLevelViolationWithInlineViolationMessageViaProperty()
     {
         createValueBindingForComponent(this.inputComponent1, "#{testBean.model2.property1}");
         setValueToValidate(this.inputComponent1, "123");
@@ -93,6 +93,46 @@
         assertComponentInvalid(this.inputComponent2);
         assertNavigationBlocked(true);
 
+        //due to displayMessageInline
+        checkMessageCount(2);
+        checkMessageSeverities(FacesMessage.SEVERITY_ERROR, FacesMessage.SEVERITY_ERROR);
+    }
+
+    public void testClassLevelViolationWithGlobalViolationMessageViaField()
+    {
+        createValueBindingForComponent(this.inputComponent1, "#{testBean.model3.property1}");
+        setValueToValidate(this.inputComponent1, "123");
+
+        createValueBindingForComponent(this.inputComponent2, "#{testBean.model3.property2}");
+        setValueToValidate(this.inputComponent2, "456");
+
+        validateComponents();
+        updateComponents();
+        processModelValidation();
+
+        assertNavigationBlocked(true);
+
+        checkMessageCount(1);
+        checkMessageSeverities(FacesMessage.SEVERITY_ERROR);
+    }
+
+    public void testClassLevelViolationWithInlineViolationMessageViaField()
+    {
+        createValueBindingForComponent(this.inputComponent1, "#{testBean.model4.property1}");
+        setValueToValidate(this.inputComponent1, "123");
+
+        createValueBindingForComponent(this.inputComponent2, "#{testBean.model4.property2}");
+        setValueToValidate(this.inputComponent2, "456");
+
+        validateComponents();
+        updateComponents();
+        processModelValidation();
+
+        assertComponentInvalid(this.inputComponent1);
+        assertComponentInvalid(this.inputComponent2);
+        assertNavigationBlocked(true);
+
+        //due to displayMessageInline
         checkMessageCount(2);
         checkMessageSeverities(FacesMessage.SEVERITY_ERROR, FacesMessage.SEVERITY_ERROR);
     }

Modified: myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/view/ModelValidationTestCase1PageBean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/view/ModelValidationTestCase1PageBean.java?rev=833854&r1=833853&r2=833854&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/view/ModelValidationTestCase1PageBean.java (original)
+++ myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/view/ModelValidationTestCase1PageBean.java Sun Nov  8 10:57:05 2009
@@ -24,29 +24,35 @@
 
 public class ModelValidationTestCase1PageBean
 {
-    @BeanValidation(modelValidation = @ModelValidation(isActive = true))
     private ModelValidationTestCase1Bean model1 = new ModelValidationTestCase1Bean();
 
-    @BeanValidation(modelValidation = @ModelValidation(isActive = true, displayInline = true))
     private ModelValidationTestCase1Bean model2 = new ModelValidationTestCase1Bean();
 
+    @BeanValidation(modelValidation = @ModelValidation(isActive = true))
+    private ModelValidationTestCase1Bean model3 = new ModelValidationTestCase1Bean();
+
+    @BeanValidation(modelValidation = @ModelValidation(isActive = true, displayInline = true))
+    private ModelValidationTestCase1Bean model4 = new ModelValidationTestCase1Bean();
+
+    @BeanValidation(modelValidation = @ModelValidation(isActive = true))
     public ModelValidationTestCase1Bean getModel1()
     {
         return model1;
     }
 
-    public void setModel1(ModelValidationTestCase1Bean model1)
+    @BeanValidation(modelValidation = @ModelValidation(isActive = true, displayInline = true))
+    public ModelValidationTestCase1Bean getModel2()
     {
-        this.model1 = model1;
+        return model2;
     }
 
-    public ModelValidationTestCase1Bean getModel2()
+    public ModelValidationTestCase1Bean getModel3()
     {
-        return model2;
+        return model3;
     }
 
-    public void setModel2(ModelValidationTestCase1Bean model2)
+    public ModelValidationTestCase1Bean getModel4()
     {
-        this.model2 = model2;
+        return model4;
     }
 }
\ No newline at end of file

Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java?rev=833854&r1=833853&r2=833854&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java Sun Nov  8 10:57:05 2009
@@ -54,6 +54,7 @@
  * @author Gerhard Petracek
  * @since x.x.3
  */
+@ToDo(value = Priority.MEDIUM, description = "refactor implementation details")
 public class ModelValidationPhaseListener implements PhaseListener
 {
     private static final long serialVersionUID = -3482233893186708878L;
@@ -107,19 +108,18 @@
             if (!executeGlobalBeforeValidationInterceptors(
                     facesContext, modelValidationEntry.getComponent(), validationTarget, propertyInformation))
             {
-                return;
+                continue;
             }
 
             groupsToValidate = filterGroupsToValidate(
                     modelValidationEntry, validationTarget, processedValidationTargets);
 
-            //TODO
-            if (!addProcessedTarget(
-                    modelValidationEntry, processedValidationTargets, validationTarget, groupsToValidate))
+            if(!shouldContinueValidation(modelValidationEntry, groupsToValidate))
             {
                 continue;
             }
 
+            addProcessedTarget(validationTarget, groupsToValidate, processedValidationTargets);
             violations = validateTarget(validationTarget, groupsToValidate);
 
             if (violations != null && !violations.isEmpty())
@@ -151,48 +151,15 @@
         return result.toArray(new Class[result.size()]);
     }
 
-    private boolean addProcessedTarget(ModelValidationEntry modelValidationEntry,
-                                             Map<Object, List<Class>> processedValidationTargets,
-                                             Object validationTarget,
-                                             Class[] groups)
-    {
-        if (isTargetAlreadyProcessedForGroups(
-                processedValidationTargets, validationTarget, groups) &&
-                !modelValidationEntry.isDisplayMessageInline())
-        {
-            return false;
-        }
-
-        if (!isTargetAlreadyProcessedForGroups(
-                processedValidationTargets, validationTarget, groups))
-        {
-            addTarget(processedValidationTargets, validationTarget, groups);
-        }
-        return true;
-    }
-
-    private boolean isTargetAlreadyProcessedForGroups(
-            Map<Object, List<Class>> processedValidationTargets, Object validationTarget, Class[] groups)
+    private boolean shouldContinueValidation(ModelValidationEntry modelValidationEntry, Class[] groupsToValidate)
     {
-        List<Class> groupList;
-        if(processedValidationTargets.containsKey(validationTarget))
-        {
-            groupList = processedValidationTargets.get(processedValidationTargets);
-
-            for(Class group : groups)
-            {
-                if(!groupList.contains(group))
-                {
-                    return false;
-                }
-            }
-            return true;
-        }
-        return false;
+        return !(groupsToValidate == null || groupsToValidate.length == 0) ||
+                modelValidationEntry.isDisplayMessageInline();
     }
 
-    private void addTarget(
-            Map<Object, List<Class>> processedValidationTargets, Object validationTarget, Class[] groups)
+    private void addProcessedTarget(Object validationTarget,
+                                    Class[] groups,
+                                    Map<Object, List<Class>> processedValidationTargets)
     {
         if(!processedValidationTargets.containsKey(validationTarget))
         {
@@ -263,7 +230,7 @@
                                    Map<String, ModelValidationResult> results)
     {
         //jsf 2.0 is able to display multiple messages per component - so process all violations
-        //jsf < 2.0 will just use the first one (it's only a little overhead)
+        //jsf < 2.0 will just use the first one (for inline messages - so it's only a little overhead)
         Iterator<ConstraintViolation<Object>> violationsIterator = violations.iterator();
         ConstraintViolation<Object> constraintViolation;
         ModelValidationResult result;