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 !