Affects: \
bug
The void validateArguments() method in MethodValidationAdapterTests reports an error when the output of System.getProperty("user.language") is not en
MethodValidationAdapterTests.java
@Test
void validateArguments() {
MyService target = new MyService();
Method method = getMethod(target, "addStudent");
validateArguments(target, method, new Object[] {faustino1234, cayetana6789, 3}, ex -> {
assertThat(ex.getConstraintViolations()).hasSize(3);
assertThat(ex.getAllValidationResults()).hasSize(3);
assertBeanResult(ex.getBeanResults().get(0), 0, "student", faustino1234, List.of(
"""
Field error in object 'student' on field 'name': rejected value [Faustino1234]; \
codes [Size.student.name,Size.name,Size.java.lang.String,Size]; \
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
codes [student.name,name]; arguments []; default message [name],10,1]; \
default message [size must be between 1 and 10]"""));
assertBeanResult(ex.getBeanResults().get(1), 1, "guardian", cayetana6789, List.of(
"""
Field error in object 'guardian' on field 'name': rejected value [Cayetana6789]; \
codes [Size.guardian.name,Size.name,Size.java.lang.String,Size]; \
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
codes [guardian.name,name]; arguments []; default message [name],10,1]; \
default message [size must be between 1 and 10]"""));
assertValueResult(ex.getValueResults().get(0), 2, 3, List.of(
"""
org.springframework.context.support.DefaultMessageSourceResolvable: \
codes [Max.myService#addStudent.degrees,Max.degrees,Max.int,Max]; \
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
codes [myService#addStudent.degrees,degrees]; arguments []; default message [degrees],2]; \
default message [must be less than or equal to 2]"""
));
});
}
test fails
when System.getProperty("user.language") = zh
mac command output
$ locale
LANG="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_ALL=
java.lang.AssertionError:
Expecting actual:
["Field error in object 'student' on field 'name': rejected value [Faustino1234]; codes [Size.student.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name],10,1]; default message [个数必须在1和10之间]"]
to contain exactly in any order:
["Field error in object 'student' on field 'name': rejected value [Faustino1234]; codes [Size.student.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name],10,1]; default message [size must be between 1 and 10]"]
elements not found:
["Field error in object 'student' on field 'name': rejected value [Faustino1234]; codes [Size.student.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name],10,1]; default message [size must be between 1 and 10]"]
and elements not expected:
["Field error in object 'student' on field 'name': rejected value [Faustino1234]; codes [Size.student.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name],10,1]; default message [个数必须在1和10之间]"]
when System.getProperty("user.language") = ja
java.lang.AssertionError:
Expecting actual:
["Field error in object 'student' on field 'name': rejected value [Faustino1234]; codes [Size.student.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name],10,1]; default message [1 から 10 の間のサイズにしてください]"]
to contain exactly in any order:
["Field error in object 'student' on field 'name': rejected value [Faustino1234]; codes [Size.student.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name],10,1]; default message [size must be between 1 and 10]"]
elements not found:
["Field error in object 'student' on field 'name': rejected value [Faustino1234]; codes [Size.student.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name],10,1]; default message [size must be between 1 and 10]"]
and elements not expected:
["Field error in object 'student' on field 'name': rejected value [Faustino1234]; codes [Size.student.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name],10,1]; default message [1 から 10 の間のサイズにしてください]"]
test passed
when System.getProperty("user.language") = zh
mac command output
$ locale
LANG=""
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
Expect
When mac's locale command outputs LANG="zh_CN.UTF-8", I tried to add the following code to make the test pass. But it fails.
@BeforeAll
static void setup() {
System.setProperty("user.language", "en");
}
Comment From: sbrannen
Hi @wyyl1,
Congratulations on submitting your first issue for the Spring Framework! 👍
I have addressed this in aecebf7981cf44b54a89d6f924cca77579185284.
Thanks for bringing it to our attention.
Comment From: wyyl1
Thank you very much !