|
40 | 40 | import org.junit.Test;
|
41 | 41 | import org.junit.rules.ExpectedException;
|
42 | 42 |
|
| 43 | +import org.springframework.beans.BeanWrapper; |
43 | 44 | import org.springframework.beans.InvalidPropertyException;
|
44 | 45 | import org.springframework.beans.MutablePropertyValues;
|
45 | 46 | import org.springframework.beans.NotWritablePropertyException;
|
@@ -2013,6 +2014,77 @@ public void testSetAutoGrowCollectionLimitAfterInitialization() {
|
2013 | 2014 | binder.setAutoGrowCollectionLimit(257);
|
2014 | 2015 | }
|
2015 | 2016 |
|
| 2017 | + @Test // SPR-15009 |
| 2018 | + public void testSetCustomMessageCodesResolverBeforeInitializeBindingResultForBeanPropertyAccess() { |
| 2019 | + TestBean testBean = new TestBean(); |
| 2020 | + DataBinder binder = new DataBinder(testBean, "testBean"); |
| 2021 | + DefaultMessageCodesResolver messageCodesResolver = new DefaultMessageCodesResolver(); |
| 2022 | + messageCodesResolver.setPrefix("errors."); |
| 2023 | + binder.setMessageCodesResolver(messageCodesResolver); |
| 2024 | + binder.setAutoGrowCollectionLimit(512); // allow configuration after set a MessageCodesResolver |
| 2025 | + binder.initBeanPropertyAccess(); |
| 2026 | + |
| 2027 | + MutablePropertyValues mpv = new MutablePropertyValues(); |
| 2028 | + mpv.add("age", "invalid"); |
| 2029 | + binder.bind(mpv); |
| 2030 | + assertEquals("errors.typeMismatch", binder.getBindingResult().getFieldError("age").getCode()); |
| 2031 | + assertEquals(512, BeanWrapper.class.cast(binder.getInternalBindingResult().getPropertyAccessor()).getAutoGrowCollectionLimit()); |
| 2032 | + } |
| 2033 | + |
| 2034 | + @Test // SPR-15009 |
| 2035 | + public void testSetCustomMessageCodesResolverBeforeInitializeBindingResultForDirectFieldAccess() { |
| 2036 | + TestBean testBean = new TestBean(); |
| 2037 | + DataBinder binder = new DataBinder(testBean, "testBean"); |
| 2038 | + DefaultMessageCodesResolver messageCodesResolver = new DefaultMessageCodesResolver(); |
| 2039 | + messageCodesResolver.setPrefix("errors."); |
| 2040 | + binder.setMessageCodesResolver(messageCodesResolver); |
| 2041 | + binder.initDirectFieldAccess(); |
| 2042 | + |
| 2043 | + MutablePropertyValues mpv = new MutablePropertyValues(); |
| 2044 | + mpv.add("age", "invalid"); |
| 2045 | + binder.bind(mpv); |
| 2046 | + assertEquals("errors.typeMismatch", binder.getBindingResult().getFieldError("age").getCode()); |
| 2047 | + } |
| 2048 | + |
| 2049 | + @Test // SPR-15009 |
| 2050 | + public void testSetCustomMessageCodesResolverAfterInitializeBindingResult() { |
| 2051 | + TestBean testBean = new TestBean(); |
| 2052 | + DataBinder binder = new DataBinder(testBean, "testBean"); |
| 2053 | + binder.initBeanPropertyAccess(); |
| 2054 | + DefaultMessageCodesResolver messageCodesResolver = new DefaultMessageCodesResolver(); |
| 2055 | + messageCodesResolver.setPrefix("errors."); |
| 2056 | + binder.setMessageCodesResolver(messageCodesResolver); |
| 2057 | + |
| 2058 | + MutablePropertyValues mpv = new MutablePropertyValues(); |
| 2059 | + mpv.add("age", "invalid"); |
| 2060 | + binder.bind(mpv); |
| 2061 | + assertEquals("errors.typeMismatch", binder.getBindingResult().getFieldError("age").getCode()); |
| 2062 | + } |
| 2063 | + |
| 2064 | + @Test // SPR-15009 |
| 2065 | + public void testSetMessageCodesResolverIsNullAfterInitializeBindingResult() { |
| 2066 | + TestBean testBean = new TestBean(); |
| 2067 | + DataBinder binder = new DataBinder(testBean, "testBean"); |
| 2068 | + binder.initBeanPropertyAccess(); |
| 2069 | + binder.setMessageCodesResolver(null); |
| 2070 | + |
| 2071 | + MutablePropertyValues mpv = new MutablePropertyValues(); |
| 2072 | + mpv.add("age", "invalid"); |
| 2073 | + binder.bind(mpv); |
| 2074 | + assertEquals("typeMismatch", binder.getBindingResult().getFieldError("age").getCode()); // Keep a default MessageCodesResolver |
| 2075 | + } |
| 2076 | + |
| 2077 | + @Test // SPR-15009 |
| 2078 | + public void testCallSetMessageCodesResolverTwice() { |
| 2079 | + expectedException.expect(IllegalStateException.class); |
| 2080 | + expectedException.expectMessage("DataBinder is already initialized with MessageCodesResolver"); |
| 2081 | + |
| 2082 | + TestBean testBean = new TestBean(); |
| 2083 | + DataBinder binder = new DataBinder(testBean, "testBean"); |
| 2084 | + binder.setMessageCodesResolver(new DefaultMessageCodesResolver()); |
| 2085 | + binder.setMessageCodesResolver(new DefaultMessageCodesResolver()); |
| 2086 | + |
| 2087 | + } |
2016 | 2088 |
|
2017 | 2089 | @SuppressWarnings("unused")
|
2018 | 2090 | private static class BeanWithIntegerList {
|
|
0 commit comments