📄 validationtestsuite.java
字号:
public void testDirectBindingToIndexedField() {
IndexedTestBean tb = new IndexedTestBean();
DataBinder binder = new DataBinder(tb, "tb");
binder.registerCustomEditor(TestBean.class, "array", new PropertyEditorSupport() {
public void setAsText(String text) throws IllegalArgumentException {
DerivedTestBean tb = new DerivedTestBean();
tb.setName("array" + text);
setValue(tb);
}
public String getAsText() {
return ((TestBean) getValue()).getName();
}
});
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue("array[0]", "a");
binder.bind(pvs);
Errors errors = binder.getErrors();
errors.rejectValue("array[0]", "NOT_ROD", "are you sure you're not Rod?");
errors.rejectValue("map[key1]", "NOT_ROD", "are you sure you're not Rod?");
errors.rejectValue("map[key0]", "NOT_NULL", "should not be null");
assertEquals("arraya", errors.getFieldValue("array[0]"));
assertEquals(1, errors.getFieldErrorCount("array[0]"));
assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCode());
assertEquals("NOT_ROD.tb.array[0]", errors.getFieldError("array[0]").getCodes()[0]);
assertEquals("NOT_ROD.tb.array", errors.getFieldError("array[0]").getCodes()[1]);
assertEquals("NOT_ROD.array[0]", errors.getFieldError("array[0]").getCodes()[2]);
assertEquals("NOT_ROD.array", errors.getFieldError("array[0]").getCodes()[3]);
assertEquals("NOT_ROD.org.springframework.beans.DerivedTestBean", errors.getFieldError("array[0]").getCodes()[4]);
assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCodes()[5]);
assertEquals("arraya", errors.getFieldValue("array[0]"));
assertEquals(1, errors.getFieldErrorCount("map[key1]"));
assertEquals("NOT_ROD", errors.getFieldError("map[key1]").getCode());
assertEquals("NOT_ROD.tb.map[key1]", errors.getFieldError("map[key1]").getCodes()[0]);
assertEquals("NOT_ROD.tb.map", errors.getFieldError("map[key1]").getCodes()[1]);
assertEquals("NOT_ROD.map[key1]", errors.getFieldError("map[key1]").getCodes()[2]);
assertEquals("NOT_ROD.map", errors.getFieldError("map[key1]").getCodes()[3]);
assertEquals("NOT_ROD.org.springframework.beans.TestBean", errors.getFieldError("map[key1]").getCodes()[4]);
assertEquals("NOT_ROD", errors.getFieldError("map[key1]").getCodes()[5]);
assertEquals(1, errors.getFieldErrorCount("map[key0]"));
assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCode());
assertEquals("NOT_NULL.tb.map[key0]", errors.getFieldError("map[key0]").getCodes()[0]);
assertEquals("NOT_NULL.tb.map", errors.getFieldError("map[key0]").getCodes()[1]);
assertEquals("NOT_NULL.map[key0]", errors.getFieldError("map[key0]").getCodes()[2]);
assertEquals("NOT_NULL.map", errors.getFieldError("map[key0]").getCodes()[3]);
assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCodes()[4]);
}
public void testCustomEditorWithSubclass() {
IndexedTestBean tb = new IndexedTestBean();
DataBinder binder = new DataBinder(tb, "tb");
binder.registerCustomEditor(TestBean.class, new PropertyEditorSupport() {
public void setAsText(String text) throws IllegalArgumentException {
DerivedTestBean tb = new DerivedTestBean();
tb.setName("array" + text);
setValue(tb);
}
public String getAsText() {
return ((TestBean) getValue()).getName();
}
});
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue("array[0]", "a");
binder.bind(pvs);
Errors errors = binder.getErrors();
errors.rejectValue("array[0]", "NOT_ROD", "are you sure you're not Rod?");
assertEquals("arraya", errors.getFieldValue("array[0]"));
assertEquals(1, errors.getFieldErrorCount("array[0]"));
assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCode());
assertEquals("NOT_ROD.tb.array[0]", errors.getFieldError("array[0]").getCodes()[0]);
assertEquals("NOT_ROD.tb.array", errors.getFieldError("array[0]").getCodes()[1]);
assertEquals("NOT_ROD.array[0]", errors.getFieldError("array[0]").getCodes()[2]);
assertEquals("NOT_ROD.array", errors.getFieldError("array[0]").getCodes()[3]);
assertEquals("NOT_ROD.org.springframework.beans.DerivedTestBean", errors.getFieldError("array[0]").getCodes()[4]);
assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCodes()[5]);
assertEquals("arraya", errors.getFieldValue("array[0]"));
}
public void testBindToStringArrayWithArrayEditor() {
TestBean tb = new TestBean();
DataBinder binder = new DataBinder(tb, "tb");
binder.registerCustomEditor(String[].class, "stringArray", new PropertyEditorSupport() {
public void setAsText(String text) throws IllegalArgumentException {
setValue(StringUtils.delimitedListToStringArray(text, "-"));
}
});
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue("stringArray", "a1-b2");
binder.bind(pvs);
assertTrue(!binder.getErrors().hasErrors());
assertEquals(2, tb.getStringArray().length);
assertEquals("a1", tb.getStringArray()[0]);
assertEquals("b2", tb.getStringArray()[1]);
}
public void testBindToStringArrayWithComponentEditor() {
TestBean tb = new TestBean();
DataBinder binder = new DataBinder(tb, "tb");
binder.registerCustomEditor(String.class, "stringArray", new PropertyEditorSupport() {
public void setAsText(String text) throws IllegalArgumentException {
setValue("X" + text);
}
});
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue("stringArray", new String[] {"a1", "b2"});
binder.bind(pvs);
assertTrue(!binder.getErrors().hasErrors());
assertEquals(2, tb.getStringArray().length);
assertEquals("Xa1", tb.getStringArray()[0]);
assertEquals("Xb2", tb.getStringArray()[1]);
}
public void testBindingErrors() {
TestBean rod = new TestBean();
DataBinder binder = new DataBinder(rod, "person");
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue(new PropertyValue("age", "32x"));
binder.bind(pvs);
Errors errors = binder.getErrors();
FieldError ageError = errors.getFieldError("age");
assertEquals("typeMismatch", ageError.getCode());
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("org.springframework.validation.messages1");
String msg = messageSource.getMessage(ageError, Locale.getDefault());
assertEquals("Field age did not have correct type", msg);
messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("org.springframework.validation.messages2");
msg = messageSource.getMessage(ageError, Locale.getDefault());
assertEquals("Field Age did not have correct type", msg);
messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("org.springframework.validation.messages3");
msg = messageSource.getMessage(ageError, Locale.getDefault());
assertEquals("Field Person Age did not have correct type", msg);
}
public void testValidationUtilsEmpty() throws Exception {
//Test null
TestBean tb = new TestBean();
Errors errors = new BindException(tb, "tb");
Validator testValidator = new ValidationUtilsEmptyValidator();
testValidator.validate(tb, errors);
assertTrue(errors.hasFieldErrors("name"));
assertEquals("EMPTY", errors.getFieldError("name").getCode());
//Test empty String
tb.setName("");
errors = new BindException(tb, "tb");
testValidator.validate(tb, errors);
assertTrue(errors.hasFieldErrors("name"));
assertEquals("EMPTY", errors.getFieldError("name").getCode());
//Test OK1
tb.setName(" ");
errors = new BindException(tb, "tb");
testValidator.validate(tb, errors);
assertFalse(errors.hasFieldErrors("name"));
//Test OK2
tb.setName("Roddy");
errors = new BindException(tb, "tb");
testValidator.validate(tb, errors);
assertFalse(errors.hasFieldErrors("name"));
}
public void testValidationUtilsEmptyOrWhitespace() throws Exception {
//Test null
TestBean tb = new TestBean();
Errors errors = new BindException(tb, "tb");
Validator testValidator = new ValidationUtilsEmptyOrWhitespaceValidator();
testValidator.validate(tb, errors);
assertTrue(errors.hasFieldErrors("name"));
assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode());
//Test empty String
tb.setName("");
errors = new BindException(tb, "tb");
testValidator.validate(tb, errors);
assertTrue(errors.hasFieldErrors("name"));
assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode());
//Test empty String
tb.setName(" ");
errors = new BindException(tb, "tb");
testValidator.validate(tb, errors);
assertTrue(errors.hasFieldErrors("name"));
assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode());
//Test OK
tb.setName("Roddy");
errors = new BindException(tb, "tb");
testValidator.validate(tb, errors);
assertFalse(errors.hasFieldErrors("name"));
}
public void testBindingWithResortedList() {
IndexedTestBean tb = new IndexedTestBean();
DataBinder binder = new DataBinder(tb, "tb");
MutablePropertyValues pvs = new MutablePropertyValues();
TestBean tb1 = new TestBean("tb1", 99);
TestBean tb2 = new TestBean("tb2", 99);
pvs.addPropertyValue("list[0]", tb1);
pvs.addPropertyValue("list[1]", tb2);
binder.bind(pvs);
assertEquals(tb1.getName(), binder.getErrors().getFieldValue("list[0].name"));
assertEquals(tb2.getName(), binder.getErrors().getFieldValue("list[1].name"));
tb.getList().set(0, tb2);
tb.getList().set(1, tb1);
assertEquals(tb2.getName(), binder.getErrors().getFieldValue("list[0].name"));
assertEquals(tb1.getName(), binder.getErrors().getFieldValue("list[1].name"));
}
private static class TestBeanValidator implements Validator {
public boolean supports(Class clazz) {
return TestBean.class.isAssignableFrom(clazz);
}
public void validate(Object obj, Errors errors) {
TestBean tb = (TestBean) obj;
if (tb.getAge() < 32) {
errors.rejectValue("age", "TOO_YOUNG", null, "simply too young");
}
if (tb.getAge() % 2 == 0) {
errors.rejectValue("age", "AGE_NOT_ODD", null, "your age isn't odd");
}
if (tb.getName() == null || !tb.getName().equals("Rod")) {
errors.rejectValue("name", "NOT_ROD", "are you sure you're not Rod?");
}
if (tb.getTouchy() == null || !tb.getTouchy().equals(tb.getName())) {
errors.reject("NAME_TOUCHY_MISMATCH", "name and touchy do not match");
}
if (tb.getAge() == 0) {
errors.reject("GENERAL_ERROR", new String[]{"arg"}, "msg");
}
}
}
private static class SpouseValidator implements Validator {
public boolean supports(Class clazz) {
return TestBean.class.isAssignableFrom(clazz);
}
public void validate(Object obj, Errors errors) {
TestBean tb = (TestBean) obj;
if (tb.getAge() < 32) {
errors.rejectValue("age", "TOO_YOUNG", null, "simply too young");
}
}
}
private static class ValidationUtilsEmptyValidator implements Validator {
public boolean supports(Class clazz) {
return TestBean.class.isAssignableFrom(clazz);
}
public void validate(Object obj, Errors errors) {
//TestBean tb = (TestBean) obj;
ValidationUtils.rejectIfEmpty(errors, "name", "EMPTY", "You must enter a name!");
}
}
private static class ValidationUtilsEmptyOrWhitespaceValidator implements Validator {
public boolean supports(Class clazz) {
return TestBean.class.isAssignableFrom(clazz);
}
public void validate(Object obj, Errors errors) {
//TestBean tb = (TestBean) obj;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "EMPTY_OR_WHITESPACE", "You must enter a name!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -