1   package org.mod4j.runtime.validation;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertFalse;
5   import static org.junit.Assert.assertTrue;
6   
7   import org.junit.Test;
8   import org.mod4j.runtime.validation.MaxLengthValidator;
9   import org.springframework.validation.BindException;
10  import org.springframework.validation.Errors;
11  import org.springframework.validation.Validator;
12  
13  /**
14   * @author Eric Jan Malotaux
15   */
16  public class MaxLengthValidatorTest {
17  
18      @Test
19      public void testSupports() {
20          Validator validator = new MaxLengthValidator(ClassToTest.class, "stringProperty", 3);
21          assertTrue(validator.supports(ClassToTest.class));
22          assertFalse(validator.supports(String.class));
23      }
24  
25      @Test
26      public void testValidateSucces() {
27          Object object = new ClassToTest("123");
28          Validator validator = new MaxLengthValidator(ClassToTest.class, "stringProperty", 3);
29          Errors errors = new BindException(object, "object");
30          validator.validate(object, errors);
31          assertFalse(errors.hasErrors());
32      }
33  
34      @Test
35      public void testValidateFailure() {
36          Object object = new ClassToTest("1234");
37          Validator validator = new MaxLengthValidator(ClassToTest.class, "stringProperty", 3);
38          Errors errors = new BindException(object, "object");
39          validator.validate(object, errors);
40          assertTrue(errors.hasErrors());
41          assertEquals("field.length.max", errors.getFieldError().getCode());
42      }
43  
44      @Test
45      public void testValidateNull() {
46          Object object = new ClassToTest(null);
47          Validator validator = new MaxLengthValidator(ClassToTest.class, "stringProperty", 3);
48          Errors errors = new BindException(object, "object");
49          validator.validate(object, errors);
50          assertFalse(errors.hasErrors());
51      }
52  
53      class ClassToTest {
54          private String stringProperty;
55  
56          public ClassToTest(String value) {
57              this.stringProperty = value;
58          }
59  
60          public String getStringProperty() {
61              return stringProperty;
62          }
63  
64          public void setStringProperty(String stringProperty) {
65              this.stringProperty = stringProperty;
66          }
67      }
68  
69      class SubclassOfClassToTest extends ClassToTest {
70          public SubclassOfClassToTest(String value) {
71              super(value);
72          }
73      }
74  }