Detect invalid configuration for autoGrowCollectionLimit on DataBinder

Issue: SPR-14888
This commit is contained in:
Kazuki Shimizu
2016-11-09 01:00:27 +09:00
parent dda9762072
commit 124f2128fa
2 changed files with 35 additions and 0 deletions

View File

@@ -36,8 +36,10 @@ import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.beans.InvalidPropertyException;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.NotWritablePropertyException;
@@ -69,9 +71,13 @@ import static org.junit.Assert.*;
* @author Rod Johnson
* @author Juergen Hoeller
* @author Rob Harrop
* @author Kazuki Shimizu
*/
public class DataBinderTests {
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void testBindingNoErrors() throws Exception {
TestBean rod = new TestBean();
@@ -1982,6 +1988,30 @@ public class DataBinderTests {
assertEquals("age", binder.getBindingResult().getFieldError("age").getField());
}
@Test // SPR-14888
public void testSetAutoGrowCollectionLimit() {
BeanWithIntegerList tb = new BeanWithIntegerList();
DataBinder binder = new DataBinder(tb);
binder.setAutoGrowCollectionLimit(257);
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.add("integerList[256]", "1");
binder.bind(pvs);
assertEquals(257, tb.getIntegerList().size());
assertEquals(Integer.valueOf(1), tb.getIntegerList().get(256));
assertEquals(Integer.valueOf(1), binder.getBindingResult().getFieldValue("integerList[256]"));
}
@Test // SPR-14888
public void testSetAutoGrowCollectionLimitAfterInitialization() {
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("DataBinder is already initialized - call setAutoGrowCollectionLimit before other configuration methods");
DataBinder binder = new DataBinder(new BeanWithIntegerList());
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
binder.setAutoGrowCollectionLimit(257);
}
@SuppressWarnings("unused")
private static class BeanWithIntegerList {