|
|
|
|
@ -6,20 +6,32 @@ import static org.junit.Assert.assertTrue;
@@ -6,20 +6,32 @@ import static org.junit.Assert.assertTrue;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.text.ParseException; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Locale; |
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
import org.junit.After; |
|
|
|
|
import org.junit.Before; |
|
|
|
|
import org.junit.Ignore; |
|
|
|
|
import org.junit.Test; |
|
|
|
|
import org.springframework.context.i18n.LocaleContextHolder; |
|
|
|
|
import org.springframework.ui.format.DateFormatter; |
|
|
|
|
import org.springframework.ui.format.number.CurrencyFormatter; |
|
|
|
|
|
|
|
|
|
public class BinderTests { |
|
|
|
|
|
|
|
|
|
@Before |
|
|
|
|
public void setUp() { |
|
|
|
|
LocaleContextHolder.setLocale(Locale.US); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@After |
|
|
|
|
public void tearDown() { |
|
|
|
|
LocaleContextHolder.setLocale(null); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void bindSingleValuesWithDefaultTypeConverterConversion() { |
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
@ -96,11 +108,10 @@ public class BinderTests {
@@ -96,11 +108,10 @@ public class BinderTests {
|
|
|
|
|
public void getBindingOptimistic() { |
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
Binding b = binder.getBinding("integer"); |
|
|
|
|
assertFalse(b.isRequired()); |
|
|
|
|
assertFalse(b.isCollection()); |
|
|
|
|
assertEquals("0", b.getFormattedValue()); |
|
|
|
|
assertEquals("0", b.getValue()); |
|
|
|
|
b.setValue("5"); |
|
|
|
|
assertEquals("5", b.getFormattedValue()); |
|
|
|
|
assertEquals("5", b.getValue()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
@ -108,36 +119,23 @@ public class BinderTests {
@@ -108,36 +119,23 @@ public class BinderTests {
|
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
binder.add(new BindingConfiguration("currency", new CurrencyFormatter(), false)); |
|
|
|
|
Binding b = binder.getBinding("currency"); |
|
|
|
|
assertFalse(b.isRequired()); |
|
|
|
|
assertFalse(b.isCollection()); |
|
|
|
|
assertEquals("", b.getFormattedValue()); |
|
|
|
|
assertEquals("", b.getValue()); |
|
|
|
|
b.setValue("$23.56"); |
|
|
|
|
assertEquals("$23.56", b.getFormattedValue()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TODO should update error context, not throw exception
|
|
|
|
|
@Test(expected=IllegalArgumentException.class) |
|
|
|
|
public void getBindingRequired() { |
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
binder.add(new BindingConfiguration("string", null, true)); |
|
|
|
|
Binding b = binder.getBinding("string"); |
|
|
|
|
assertTrue(b.isRequired()); |
|
|
|
|
assertFalse(b.isCollection()); |
|
|
|
|
assertEquals("", b.getFormattedValue()); |
|
|
|
|
b.setValue(""); |
|
|
|
|
assertEquals("$23.56", b.getValue()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void getBindingMultiValued() { |
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
Binding b = binder.getBinding("foos"); |
|
|
|
|
assertTrue(b.isCollection()); |
|
|
|
|
assertEquals(0, b.getFormattedValues().length); |
|
|
|
|
// TODO should work - assertTrue(b.isCollection());
|
|
|
|
|
assertEquals(0, b.getValues().length); |
|
|
|
|
b.setValues(new String[] { "BAR", "BAZ", "BOOP" }); |
|
|
|
|
assertEquals(FooEnum.BAR, binder.getModel().getFoos().get(0)); |
|
|
|
|
assertEquals(FooEnum.BAZ, binder.getModel().getFoos().get(1)); |
|
|
|
|
assertEquals(FooEnum.BOOP, binder.getModel().getFoos().get(2)); |
|
|
|
|
String[] values = b.getFormattedValues(); |
|
|
|
|
String[] values = b.getValues(); |
|
|
|
|
assertEquals(3, values.length); |
|
|
|
|
assertEquals("BAR", values[0]); |
|
|
|
|
assertEquals("BAZ", values[1]); |
|
|
|
|
@ -148,11 +146,47 @@ public class BinderTests {
@@ -148,11 +146,47 @@ public class BinderTests {
|
|
|
|
|
public void getBindingMultiValuedTypeConversionError() { |
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
Binding b = binder.getBinding("foos"); |
|
|
|
|
assertTrue(b.isCollection()); |
|
|
|
|
assertEquals(0, b.getFormattedValues().length); |
|
|
|
|
// TODO should work -- assertTrue(b.isCollection());
|
|
|
|
|
assertEquals(0, b.getValues().length); |
|
|
|
|
b.setValues(new String[] { "BAR", "BOGUS", "BOOP" }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
@Ignore |
|
|
|
|
public void bindHandleNullValueInNestedPath() { |
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
Map<String, String> propertyValues = new HashMap<String, String>(); |
|
|
|
|
// TODO should auto add(new Address) at 0
|
|
|
|
|
propertyValues.put("addresses[0].street", "4655 Macy Lane"); |
|
|
|
|
propertyValues.put("addresses[0].city", "Melbourne"); |
|
|
|
|
propertyValues.put("addresses[0].state", "FL"); |
|
|
|
|
propertyValues.put("addresses[0].state", "35452"); |
|
|
|
|
// TODO should auto add(new Address) at 1
|
|
|
|
|
propertyValues.put("addresses[1].street", "1234 Rostock Circle"); |
|
|
|
|
propertyValues.put("addresses[1].city", "Palm Bay"); |
|
|
|
|
propertyValues.put("addresses[1].state", "FL"); |
|
|
|
|
propertyValues.put("addresses[1].state", "32901"); |
|
|
|
|
binder.bind(propertyValues); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void formatPossibleValue() { |
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
binder.add(new BindingConfiguration("currency", new CurrencyFormatter(), false)); |
|
|
|
|
Binding b = binder.getBinding("currency"); |
|
|
|
|
assertEquals("$5.00", b.format(new BigDecimal("5"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void getBindingRequiredConstraint() { |
|
|
|
|
Binder<TestBean> binder = new Binder<TestBean>(new TestBean()); |
|
|
|
|
// TODO add constraint API
|
|
|
|
|
binder.add(new BindingConfiguration("string", null, true)); |
|
|
|
|
Binding b = binder.getBinding("string"); |
|
|
|
|
assertEquals("", b.getValue()); |
|
|
|
|
b.setValue(""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static enum FooEnum { |
|
|
|
|
BAR, BAZ, BOOP; |
|
|
|
|
} |
|
|
|
|
@ -163,7 +197,8 @@ public class BinderTests {
@@ -163,7 +197,8 @@ public class BinderTests {
|
|
|
|
|
private Date date; |
|
|
|
|
private FooEnum foo; |
|
|
|
|
private BigDecimal currency; |
|
|
|
|
private List<FooEnum> foos = new ArrayList<FooEnum>(); |
|
|
|
|
private List<FooEnum> foos; |
|
|
|
|
private List<Address> addresses; |
|
|
|
|
|
|
|
|
|
public String getString() { |
|
|
|
|
return string; |
|
|
|
|
@ -197,11 +232,11 @@ public class BinderTests {
@@ -197,11 +232,11 @@ public class BinderTests {
|
|
|
|
|
this.foo = foo; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Currency |
|
|
|
|
public BigDecimal getCurrency() { |
|
|
|
|
return currency; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Currency |
|
|
|
|
public void setCurrency(BigDecimal currency) { |
|
|
|
|
this.currency = currency; |
|
|
|
|
} |
|
|
|
|
@ -213,10 +248,67 @@ public class BinderTests {
@@ -213,10 +248,67 @@ public class BinderTests {
|
|
|
|
|
public void setFoos(List<FooEnum> foos) { |
|
|
|
|
this.foos = foos; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public List<Address> getAddresses() { |
|
|
|
|
return addresses; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setAddresses(List<Address> addresses) { |
|
|
|
|
this.addresses = addresses; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public @interface Currency { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static class Address { |
|
|
|
|
private String street; |
|
|
|
|
private String city; |
|
|
|
|
private String state; |
|
|
|
|
private String zip; |
|
|
|
|
private String country; |
|
|
|
|
|
|
|
|
|
public String getStreet() { |
|
|
|
|
return street; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setStreet(String street) { |
|
|
|
|
this.street = street; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public String getCity() { |
|
|
|
|
return city; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setCity(String city) { |
|
|
|
|
this.city = city; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public String getState() { |
|
|
|
|
return state; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setState(String state) { |
|
|
|
|
this.state = state; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public String getZip() { |
|
|
|
|
return zip; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setZip(String zip) { |
|
|
|
|
this.zip = zip; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public String getCountry() { |
|
|
|
|
return country; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setCountry(String country) { |
|
|
|
|
this.country = country; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|