1 package org.seasar.cubby.validator.impl; 2 3 import java.lang.reflect.Method; 4 import java.util.HashMap; 5 import java.util.Map; 6 7 import org.seasar.cubby.action.Action; 8 import org.seasar.cubby.action.ActionErrors; 9 import org.seasar.cubby.action.Validation; 10 import org.seasar.cubby.validator.DefaultValidationRules; 11 import org.seasar.cubby.validator.PropertyValidationRule; 12 import org.seasar.cubby.validator.Validator; 13 import org.seasar.cubby.validator.validators.RequiredValidator; 14 import org.seasar.extension.unit.S2TestCase; 15 import org.seasar.framework.util.ClassUtil; 16 17 public class ActionValidatorImplTest extends S2TestCase { 18 19 ActionValidatorImpl actionValidator; 20 ActionErrors actionErrors; 21 Action action; 22 Map<String, Object> params; 23 DefaultValidationRules validators = new DefaultValidationRules(); 24 Validation validation; 25 26 @Override 27 protected void setUp() throws Exception { 28 include(this.getClass().getName().replaceAll("\\.", "/") + ".dicon"); 29 30 params = new HashMap<String, Object>(); 31 validators = new DefaultValidationRules(); 32 validators.add("prop1", new RequiredValidator()); 33 validators.add("prop2", new RequiredValidator()); 34 Method method = ClassUtil.getMethod(SampleAction.class, "test", null); 35 validation = method.getAnnotation(Validation.class); 36 } 37 38 public void testProcessValidation() { 39 params.put("prop2", "prop2 value"); 40 boolean success = actionValidator.processValidation(validation, action, params, new Sample1Form(), validators); 41 assertFalse(success); 42 } 43 44 public void testValidateAction() { 45 params.put("prop2", "prop2 value"); 46 actionValidator.validateAction(action, params, new Sample1Form(), validators); 47 assertEquals(1, action.getErrors().getFieldErrors().get("prop1").size()); 48 assertEquals("prop1は必須です。", action.getErrors().getFieldErrors().get("prop1").get(0)); 49 assertNull(action.getErrors().getFieldErrors().get("prop2")); 50 } 51 52 public void testValidate() { 53 params.put("prop2", "prop2 value"); 54 Object form = new Object(); 55 Validator req = new RequiredValidator(); 56 PropertyValidationRule propValids1 = new PropertyValidationRule("prop1"); 57 actionValidator.validate(action, params, form, req, propValids1); 58 PropertyValidationRule propValids2 = new PropertyValidationRule("prop2"); 59 actionValidator.validate(action, params, form, req, propValids2); 60 assertEquals(1, action.getErrors().getFieldErrors().get("prop1").size()); 61 assertEquals("prop1は必須です。", action.getErrors().getFieldErrors().get("prop1").get(0)); 62 assertNull(action.getErrors().getFieldErrors().get("prop2")); 63 } 64 65 public static class Foo { 66 public String value1 = "1"; 67 private String value2 = "2"; 68 public String getValue2() { 69 return value2; 70 } 71 } 72 73 public void testValidateNestedValue() { 74 Foo foo = new Foo(); 75 params.put("foo", foo); 76 Object form = new Object(); 77 Validator validator = new RequiredValidator(); 78 PropertyValidationRule rule1 = new PropertyValidationRule("foo.value1.bytes"); 79 actionValidator.validate(action, params, form, validator, rule1); 80 PropertyValidationRule rule2 = new PropertyValidationRule("foo.value2"); 81 actionValidator.validate(action, params, form, validator, rule2); 82 System.out.println(action.getErrors().getAllErrors()); 83 assertTrue(action.getErrors().isEmpty()); 84 } 85 86 public static class SampleAction extends Action { 87 @Validation(errorPage="error.jsp") 88 public String test() { 89 return null; 90 } 91 } 92 93 class Sample1Form { 94 private String prop1; 95 private Integer prop2; 96 public String getProp1() { 97 return prop1; 98 } 99 public void setProp1(String prop1) { 100 this.prop1 = prop1; 101 } 102 public Integer getProp2() { 103 return prop2; 104 } 105 public void setProp2(Integer prop2) { 106 this.prop2 = prop2; 107 } 108 109 } 110 111 class Sample2Form {} 112 113 }