@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2017 the original author or authors .
* Copyright 2002 - 2019 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -34,6 +34,7 @@ import java.util.Set;
@@ -34,6 +34,7 @@ import java.util.Set;
import javax.validation.Constraint ;
import javax.validation.ConstraintValidator ;
import javax.validation.ConstraintValidatorContext ;
import javax.validation.ConstraintViolation ;
import javax.validation.Payload ;
import javax.validation.Valid ;
import javax.validation.Validation ;
@ -50,11 +51,13 @@ import org.springframework.beans.BeanWrapperImpl;
@@ -50,11 +51,13 @@ import org.springframework.beans.BeanWrapperImpl;
import org.springframework.context.support.StaticMessageSource ;
import org.springframework.util.ObjectUtils ;
import org.springframework.validation.BeanPropertyBindingResult ;
import org.springframework.validation.FieldError ;
import org.springframework.validation.beanvalidation.SpringValidatorAdapter ;
import static java.lang.annotation.ElementType.* ;
import static java.lang.annotation.RetentionPolicy.* ;
import static org.hamcrest.core.Is.* ;
import static org.hamcrest.core.StringContains.* ;
import static org.junit.Assert.* ;
/ * *
@ -73,7 +76,7 @@ public class SpringValidatorAdapterTests {
@@ -73,7 +76,7 @@ public class SpringValidatorAdapterTests {
@Before
public void setupSpringValidatorAdapter ( ) {
messageSource . addMessage ( "Size" , Locale . ENGLISH , "Size of {0} is must be between {2} and {1}" ) ;
messageSource . addMessage ( "Same" , Locale . ENGLISH , "{2} must be same value with {1}" ) ;
messageSource . addMessage ( "Same" , Locale . ENGLISH , "{2} must be same value as {1}" ) ;
messageSource . addMessage ( "password" , Locale . ENGLISH , "Password" ) ;
messageSource . addMessage ( "confirmPassword" , Locale . ENGLISH , "Password(Confirm)" ) ;
}
@ -96,8 +99,11 @@ public class SpringValidatorAdapterTests {
@@ -96,8 +99,11 @@ public class SpringValidatorAdapterTests {
assertThat ( errors . getFieldErrorCount ( "password" ) , is ( 1 ) ) ;
assertThat ( errors . getFieldValue ( "password" ) , is ( "pass" ) ) ;
assertThat ( messageSource . getMessage ( errors . getFieldError ( "password" ) , Locale . ENGLISH ) ,
is ( "Size of Password is must be between 8 and 128" ) ) ;
FieldError error = errors . getFieldError ( "password" ) ;
assertNotNull ( error ) ;
assertThat ( messageSource . getMessage ( error , Locale . ENGLISH ) , is ( "Size of Password is must be between 8 and 128" ) ) ;
assertTrue ( error . contains ( ConstraintViolation . class ) ) ;
assertThat ( error . unwrap ( ConstraintViolation . class ) . getPropertyPath ( ) . toString ( ) , is ( "password" ) ) ;
}
@Test // SPR-13406
@ -111,8 +117,11 @@ public class SpringValidatorAdapterTests {
@@ -111,8 +117,11 @@ public class SpringValidatorAdapterTests {
assertThat ( errors . getFieldErrorCount ( "password" ) , is ( 1 ) ) ;
assertThat ( errors . getFieldValue ( "password" ) , is ( "password" ) ) ;
assertThat ( messageSource . getMessage ( errors . getFieldError ( "password" ) , Locale . ENGLISH ) ,
is ( "Password must be same value with Password(Confirm)" ) ) ;
FieldError error = errors . getFieldError ( "password" ) ;
assertNotNull ( error ) ;
assertThat ( messageSource . getMessage ( error , Locale . ENGLISH ) , is ( "Password must be same value as Password(Confirm)" ) ) ;
assertTrue ( error . contains ( ConstraintViolation . class ) ) ;
assertThat ( error . unwrap ( ConstraintViolation . class ) . getPropertyPath ( ) . toString ( ) , is ( "password" ) ) ;
}
@Test // SPR-13406
@ -127,10 +136,16 @@ public class SpringValidatorAdapterTests {
@@ -127,10 +136,16 @@ public class SpringValidatorAdapterTests {
assertThat ( errors . getFieldErrorCount ( "email" ) , is ( 1 ) ) ;
assertThat ( errors . getFieldValue ( "email" ) , is ( "test@example.com" ) ) ;
assertThat ( errors . getFieldErrorCount ( "confirmEmail" ) , is ( 1 ) ) ;
assertThat ( messageSource . getMessage ( errors . getFieldError ( "email" ) , Locale . ENGLISH ) ,
is ( "email must be same value with confirmEmail" ) ) ;
assertThat ( messageSource . getMessage ( errors . getFieldError ( "confirmEmail" ) , Locale . ENGLISH ) ,
is ( "Email required" ) ) ;
FieldError error1 = errors . getFieldError ( "email" ) ;
FieldError error2 = errors . getFieldError ( "confirmEmail" ) ;
assertNotNull ( error1 ) ;
assertNotNull ( error2 ) ;
assertThat ( messageSource . getMessage ( error1 , Locale . ENGLISH ) , is ( "email must be same value as confirmEmail" ) ) ;
assertThat ( messageSource . getMessage ( error2 , Locale . ENGLISH ) , is ( "Email required" ) ) ;
assertTrue ( error1 . contains ( ConstraintViolation . class ) ) ;
assertThat ( error1 . unwrap ( ConstraintViolation . class ) . getPropertyPath ( ) . toString ( ) , is ( "email" ) ) ;
assertTrue ( error2 . contains ( ConstraintViolation . class ) ) ;
assertThat ( error2 . unwrap ( ConstraintViolation . class ) . getPropertyPath ( ) . toString ( ) , is ( "confirmEmail" ) ) ;
}
@Test // SPR-15123
@ -147,10 +162,34 @@ public class SpringValidatorAdapterTests {
@@ -147,10 +162,34 @@ public class SpringValidatorAdapterTests {
assertThat ( errors . getFieldErrorCount ( "email" ) , is ( 1 ) ) ;
assertThat ( errors . getFieldValue ( "email" ) , is ( "test@example.com" ) ) ;
assertThat ( errors . getFieldErrorCount ( "confirmEmail" ) , is ( 1 ) ) ;
assertThat ( messageSource . getMessage ( errors . getFieldError ( "email" ) , Locale . ENGLISH ) ,
is ( "email must be same value with confirmEmail" ) ) ;
assertThat ( messageSource . getMessage ( errors . getFieldError ( "confirmEmail" ) , Locale . ENGLISH ) ,
is ( "Email required" ) ) ;
FieldError error1 = errors . getFieldError ( "email" ) ;
FieldError error2 = errors . getFieldError ( "confirmEmail" ) ;
assertNotNull ( error1 ) ;
assertNotNull ( error2 ) ;
assertThat ( messageSource . getMessage ( error1 , Locale . ENGLISH ) , is ( "email must be same value as confirmEmail" ) ) ;
assertThat ( messageSource . getMessage ( error2 , Locale . ENGLISH ) , is ( "Email required" ) ) ;
assertTrue ( error1 . contains ( ConstraintViolation . class ) ) ;
assertThat ( error1 . unwrap ( ConstraintViolation . class ) . getPropertyPath ( ) . toString ( ) , is ( "email" ) ) ;
assertTrue ( error2 . contains ( ConstraintViolation . class ) ) ;
assertThat ( error2 . unwrap ( ConstraintViolation . class ) . getPropertyPath ( ) . toString ( ) , is ( "confirmEmail" ) ) ;
}
@Test
public void testPatternMessage ( ) {
TestBean testBean = new TestBean ( ) ;
testBean . setEmail ( "X" ) ;
testBean . setConfirmEmail ( "X" ) ;
BeanPropertyBindingResult errors = new BeanPropertyBindingResult ( testBean , "testBean" ) ;
validatorAdapter . validate ( testBean , errors ) ;
assertThat ( errors . getFieldErrorCount ( "email" ) , is ( 1 ) ) ;
assertThat ( errors . getFieldValue ( "email" ) , is ( "X" ) ) ;
FieldError error = errors . getFieldError ( "email" ) ;
assertNotNull ( error ) ;
assertThat ( messageSource . getMessage ( error , Locale . ENGLISH ) , containsString ( "[\\w.'-]{1,}@[\\w.'-]{1,}" ) ) ;
assertTrue ( error . contains ( ConstraintViolation . class ) ) ;
assertThat ( error . unwrap ( ConstraintViolation . class ) . getPropertyPath ( ) . toString ( ) , is ( "email" ) ) ;
}
@Test // SPR-16177
@ -243,6 +282,7 @@ public class SpringValidatorAdapterTests {
@@ -243,6 +282,7 @@ public class SpringValidatorAdapterTests {
private String confirmPassword ;
@Pattern ( regexp = "[\\w.'-]{1,}@[\\w.'-]{1,}" )
private String email ;
@Pattern ( regexp = "[\\p{L} -]*" , message = "Email required" )
@ -403,13 +443,13 @@ public class SpringValidatorAdapterTests {
@@ -403,13 +443,13 @@ public class SpringValidatorAdapterTests {
private Integer id ;
@javax.validation.constraints. NotNull
@NotNull
private String name ;
@javax.validation.constraints. NotNull
@NotNull
private Integer age ;
@javax.validation.constraints. NotNull
@NotNull
private Parent parent ;
public Integer getId ( ) {