package org.springmodules.validation.commons; import java.util.HashMap; import java.util.Locale; import java.util.Map; import junit.framework.TestCase; import org.apache.commons.validator.Validator; import org.apache.commons.validator.ValidatorResources; import org.easymock.MockControl; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.validation.BindException; /** * @author robh */ public class ConfigurableBeanValidatorTests extends TestCase { public void testSupports() { ConfigurableBeanValidator validator = getValidator("fooBean"); assertTrue("Should support FooBean", validator.supports(FooBean.class)); assertTrue("Should support String", validator.supports(String.class)); } public void testGetLocale() { ConfigurableBeanValidator validator = getValidator("fooBean"); assertEquals(validator.getLocale(), Locale.getDefault()); } public void testValidate() { FooBean bean = new FooBean(); String formName = "myForm"; MockControl ctl = MockControl.createControl(ValidatorFactory.class); ValidatorFactory factory = (ValidatorFactory) ctl.getMock(); // expect call to get validator with args "fooBean", bean and null factory.getValidator(formName, bean, null); ctl.setReturnValue(getCommonsValidator()); ctl.replay(); ConfigurableBeanValidator validator = new ConfigurableBeanValidator(); validator.setValidatorFactory(factory); validator.setFormName(formName); validator.validate(bean, null); ctl.verify(); } public void testValidate_WithMappedProperty_Failure() throws Exception { FooBean bean = new FooBean(); Map attributes = new HashMap(); bean.setAttributes(attributes); BindException errors = new BindException(bean, "fooBeanWithMappedProperty"); ConfigurableBeanValidator validator = getValidator("fooBeanWithMappedProperty"); validator.validate(bean, errors); assertTrue(errors.hasFieldErrors("attributes[name1]")); } public void testValidate_WithMappedProperty_Success() throws Exception { FooBean bean = new FooBean(); Map attributes = new HashMap(); attributes.put("name1", "value1"); bean.setAttributes(attributes); BindException errors = new BindException(bean, "fooBeanWithMappedProperty"); ConfigurableBeanValidator validator = getValidator("fooBeanWithMappedProperty"); validator.validate(bean, errors); assertFalse(errors.hasFieldErrors("attributes[name1]")); } private ConfigurableBeanValidator getValidator(String formName) { ConfigurableBeanValidator validator = new ConfigurableBeanValidator(); validator.setFormName(formName); DefaultValidatorFactory factory = new DefaultValidatorFactory(); factory.setValidationConfigLocations( new Resource[]{ new ClassPathResource("testValidation.xml", getClass()), new ClassPathResource("validation-rules.xml", getClass()) } ); validator.setValidatorFactory(factory); return validator; } private Validator getCommonsValidator() { ValidatorResources res = new ValidatorResources(); res.process(); return new Validator(res); } }