package org.springmodules.validation.commons; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; import org.apache.commons.validator.Field; import org.apache.commons.validator.Validator; import org.apache.commons.validator.ValidatorAction; import org.apache.commons.validator.ValidatorResources; import org.easymock.MockControl; import org.springframework.validation.Errors; /** * @author robh * @author Uri Boness */ public class FieldChecksTests extends TestCase { public void testExtractValueWithString() { String bean = "Rob Harrop"; String result = FieldChecks.extractValue(bean, null); assertEquals("Should return the bean itself", bean, result); } public void testExtractValueWithMap() { String name = "Rob Harrop"; String property = "name"; Field field = new Field(); field.setProperty(property); Map bean = new HashMap(); bean.put(property, name); String result = FieldChecks.extractValue(bean, field); assertEquals("Should return Map entry", name, result); } public void testExtractWithJavaBean() { String name = "Rob Harrop"; int age = 23; String property1 = "name"; String property2 = "age"; Field field1 = createFieldForProperty(property1); Field field2 = createFieldForProperty(property2); MockValidationBean validationBean = new MockValidationBean(); validationBean.setName(name); validationBean.setAge(age); String nameResult = FieldChecks.extractValue(validationBean, field1); assertEquals(name, nameResult); String ageResult = FieldChecks.extractValue(validationBean, field2); assertEquals("" + age, ageResult); } public void testExtractWithNullBean() { String result = FieldChecks.extractValue(null, new Field()); assertNull(result); } public void testValidateRequiredSuccess() { MockValidationBean bean = new MockValidationBean(); bean.setName("Rob Harrop"); Field field = createFieldForProperty("name"); boolean result = FieldChecks.validateRequired(bean, null, field, null); assertTrue(result); } public void testValidateRequiredError() { MockValidationBean bean = new MockValidationBean(); Field field = createFieldForProperty("name"); MockControl control = MockControl.createControl(Errors.class); ValidatorAction validatorAction = new ValidatorAction(); Errors errors = (Errors) control.getMock(); boolean result = FieldChecks.validateRequired(bean, validatorAction, field, errors); assertFalse(result); } public void testValidateWhenValid_Success() throws Exception { MockValidationBean bean = new MockValidationBean(); bean.setAge(5); Field field = createFieldForProperty("age"); field.addVar("test", "(*this* < 10)", ""); MockControl control = MockControl.createControl(Errors.class); ValidatorAction validatorAction = new ValidatorAction(); Errors errors = (Errors) control.getMock(); ValidatorResources vr = new ValidatorResources(); vr.process(); Validator validator = new Validator(vr); boolean result = FieldChecks.validateValidWhen(bean, validatorAction, field, errors, validator); assertTrue(result); } public void testValidateWhenValid_SuccessWithDouble() throws Exception { MockValidationBean bean = new MockValidationBean(); bean.setValue(-0.45); Field field = createFieldForProperty("value"); field.addVar("test", "(*this* > -10.43)", ""); MockControl control = MockControl.createControl(Errors.class); ValidatorAction validatorAction = new ValidatorAction(); Errors errors = (Errors) control.getMock(); ValidatorResources vr = new ValidatorResources(); vr.process(); Validator validator = new Validator(vr); boolean result = FieldChecks.validateValidWhen(bean, validatorAction, field, errors, validator); assertTrue(result); } public void testValidateWhenValid_Failure() throws Exception { MockValidationBean bean = new MockValidationBean(); Field field = createFieldForProperty("name"); field.addVar("test", "(*this* != null)", ""); MockControl control = MockControl.createControl(Errors.class); ValidatorAction validatorAction = new ValidatorAction(); Errors errors = (Errors) control.getMock(); ValidatorResources vr = new ValidatorResources(); vr.process(); Validator validator = new Validator(vr); boolean result = FieldChecks.validateValidWhen(bean, validatorAction, field, errors, validator); assertFalse(result); } public void testValidateWhenValid_SuccessWithString() throws Exception { MockValidationBean bean = new MockValidationBean(); bean.setName("uri"); Field field = createFieldForProperty("name"); field.addVar("test", "(*this* == 'uri')", ""); MockControl control = MockControl.createControl(Errors.class); ValidatorAction validatorAction = new ValidatorAction(); Errors errors = (Errors) control.getMock(); ValidatorResources vr = new ValidatorResources(); vr.process(); Validator validator = new Validator(vr); boolean result = FieldChecks.validateValidWhen(bean, validatorAction, field, errors, validator); assertTrue(result); } private Field createFieldForProperty(String property) { Field field = new Field(); field.setProperty(property); return field; } public static class MockValidationBean { private String name; private int age; private double value; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getValue() { return value; } public void setValue(double value) { this.value = value; } } }