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 }