001 /* 002 * The Spring Framework is published under the terms of the Apache Software 003 * License. 004 */ 005 package org.springframework.rules; 006 007 import java.util.Locale; 008 009 import org.springframework.context.ConfigurableApplicationContext; 010 import org.springframework.context.support.ClassPathXmlApplicationContext; 011 import org.springframework.rules.constraint.Constraint; 012 import org.springframework.richclient.application.support.DefaultApplicationServices; 013 import org.springframework.richclient.test.SpringRichTestCase; 014 import org.springframework.rules.constraint.CompoundConstraint; 015 import org.springframework.rules.constraint.property.CompoundPropertyConstraint; 016 import org.springframework.rules.factory.Constraints; 017 import org.springframework.rules.reporting.BeanValidationResults; 018 import org.springframework.rules.reporting.BeanValidationResultsCollector; 019 020 /** 021 * 022 * @author Keith Donald 023 */ 024 public class ValidationResultsTests extends SpringRichTestCase { 025 026 static RulesSource rulesSource; 027 static Rules rules; 028 029 private static final Constraints constraints = Constraints.instance(); 030 031 protected void registerAdditionalServices(DefaultApplicationServices applicationServices) { 032 applicationServices.setRulesSourceId("rulesSource"); 033 } 034 035 protected void doSetUp() throws Exception { 036 rulesSource = (RulesSource) applicationServices.getService(RulesSource.class); 037 rules = rulesSource.getRules(Person.class); 038 } 039 040 protected ConfigurableApplicationContext createApplicationContext() { 041 return new ClassPathXmlApplicationContext("org/springframework/rules/rules-context.xml"); 042 } 043 044 public void testValidationResultsCollector() { 045 Person p = new Person(); 046 BeanValidationResultsCollector c = new BeanValidationResultsCollector(p); 047 BeanValidationResults r = 048 c.collectResults(rulesSource.getRules(Person.class)); 049 assertEquals(2, r.getViolatedCount()); 050 } 051 052 public void testValidationResultsCollectorCollectAllErrors() { 053 Person p = new Person(); 054 BeanValidationResultsCollector c = new BeanValidationResultsCollector(p); 055 c.setCollectAllErrors(true); 056 BeanValidationResults r = 057 c.collectResults(rulesSource.getRules(Person.class)); 058 assertEquals(2, r.getViolatedCount()); 059 } 060 061 public void testNestedValidationResultsPropertyConstraint() { 062 Person p = new Person(); 063 064 Rules rules = new Rules(Person.class); 065 CompoundConstraint constraint = 066 constraints.or( 067 constraints.all( 068 "firstName", 069 new Constraint[]{ 070 constraints.required(), 071 constraints.minLength(2)}), 072 constraints.not( 073 constraints.eqProperty("firstName", "lastName"))); 074 rules.add(new CompoundPropertyConstraint(constraint)); 075 BeanValidationResultsCollector c = new BeanValidationResultsCollector(p); 076 c.setCollectAllErrors(true); 077 BeanValidationResults r = c.collectResults(rules); 078 assertEquals(3, r.getViolatedCount()); 079 String message = 080 r.getResults("firstName").buildMessage(Locale.getDefault()); 081 System.out.println(message); 082 assertEquals( 083 "First Name must have text and must be at least 2 characters or must *not* equal Last Name.", 084 message); 085 } 086 087 }