This commit is contained in:
Keith Donald
2009-02-27 22:07:40 +00:00
parent fa97580264
commit 8a1eb749f5
5 changed files with 177 additions and 4 deletions

View File

@@ -0,0 +1,127 @@
package org.springframework.binding.validation;
import java.util.Date;
import java.util.Locale;
import junit.framework.TestCase;
import org.jboss.el.ExpressionFactoryImpl;
import org.springframework.binding.convert.converters.StringToObject;
import org.springframework.binding.convert.service.DefaultConversionService;
import org.springframework.binding.expression.el.ELExpressionParser;
import org.springframework.binding.message.Message;
import org.springframework.binding.message.MessageResolver;
import org.springframework.context.support.ResourceBundleMessageSource;
public class DefaultValidationFailureMessageResolverFactoryTests extends TestCase {
private ELExpressionParser parser = new ELExpressionParser(new ExpressionFactoryImpl());
private DefaultConversionService conversionService = new DefaultConversionService();
private ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
private DefaultValidationFailureMessageResolverFactory factory;
public void setUp() {
factory = new DefaultValidationFailureMessageResolverFactory(parser, conversionService);
messageSource.setBasename("org.springframework.binding.validation.messages");
}
public void testResolveMessage() {
ValidationFailureBuilder builder = new ValidationFailureBuilder();
ValidationFailure failure = builder.forProperty("foo").constraint("required").build();
MessageResolver resolver = factory.createMessageResolver(failure, new ValidationFailureModelContext("testBean",
"", String.class, null));
Message message = resolver.resolveMessage(messageSource, Locale.getDefault());
assertEquals("Foo is required", message.getText());
}
public void testResolveMessageNoPropertyLabel() {
ValidationFailureBuilder builder = new ValidationFailureBuilder();
ValidationFailure failure = builder.forProperty("bogus").constraint("required").build();
MessageResolver resolver = factory.createMessageResolver(failure, new ValidationFailureModelContext("testBean",
"", String.class, null));
Message message = resolver.resolveMessage(messageSource, Locale.getDefault());
assertEquals("bogus is required", message.getText());
}
public void testResolveMessageWithCustomArg() {
ValidationFailureBuilder builder = new ValidationFailureBuilder();
ValidationFailure failure = builder.forProperty("checkinDate").constraint("invalidFormat").arg("format",
"yyyy-MM-dd").build();
MessageResolver resolver = factory.createMessageResolver(failure, new ValidationFailureModelContext("testBean",
"bogus", Date.class, null));
Message message = resolver.resolveMessage(messageSource, Locale.getDefault());
assertEquals("Check In Date must be in format yyyy-MM-dd", message.getText());
}
public void testResolveMessageWithCustomResolvableArg() {
ValidationFailureBuilder builder = new ValidationFailureBuilder();
ValidationFailure failure = builder.forProperty("checkinDate").constraint("invalidFormat").resolvableArg(
"format", "formats.dateFormat").build();
MessageResolver resolver = factory.createMessageResolver(failure, new ValidationFailureModelContext("testBean",
"bogus", Date.class, null));
Message message = resolver.resolveMessage(messageSource, Locale.getDefault());
assertEquals("Check In Date must be in format yyyy-MM-dd", message.getText());
}
public void testResolveMessageWithValue() {
ValidationFailureBuilder builder = new ValidationFailureBuilder();
ValidationFailure failure = builder.forProperty("checkinDate").constraint("invalidFormat2").resolvableArg(
"format", "formats.dateFormat").build();
MessageResolver resolver = factory.createMessageResolver(failure, new ValidationFailureModelContext("testBean",
"bogus", Date.class, null));
Message message = resolver.resolveMessage(messageSource, Locale.getDefault());
assertEquals("Check In Date must be in format yyyy-MM-dd but it was 'bogus'", message.getText());
}
public void testResolveMessageWithArgDefaultConversion() {
ValidationFailureBuilder builder = new ValidationFailureBuilder();
ValidationFailure failure = builder.forProperty("amount").constraint("range").arg("min", new Integer(1)).arg(
"max", new Integer(100)).build();
MessageResolver resolver = factory.createMessageResolver(failure, new ValidationFailureModelContext("testBean",
"bogus", Integer.class, null));
Message message = resolver.resolveMessage(messageSource, Locale.getDefault());
assertEquals("Amount must be between 1 and 100", message.getText());
}
public void testResolveMessageWithArgCustomConversion() {
conversionService.addConverter("stringToMoney", new StringToMoney());
ValidationFailureBuilder builder = new ValidationFailureBuilder();
ValidationFailure failure = builder.forProperty("amount").constraint("range").arg("min", new Money(1)).arg(
"max", new Money(100)).build();
MessageResolver resolver = factory.createMessageResolver(failure, new ValidationFailureModelContext("testBean",
"bogus", Money.class, "stringToMoney"));
Message message = resolver.resolveMessage(messageSource, Locale.getDefault());
assertEquals("Amount must be between $1 and $100", message.getText());
}
public static class Money {
private int amount;
public Money(int amount) {
this.amount = amount;
}
public int getAmount() {
return amount;
}
}
public static class StringToMoney extends StringToObject {
public StringToMoney() {
super(Money.class);
}
protected Object toObject(String string, Class targetClass) throws Exception {
throw new UnsupportedOperationException("Not supported");
}
protected String toString(Object object) throws Exception {
return "$" + String.valueOf(((Money) object).amount);
}
}
}

View File

@@ -0,0 +1,10 @@
validation.required=#{label} is required
validation.invalidFormat=#{label} must be in format #{format}
validation.invalidFormat2=#{label} must be in format #{format} but it was '#{value}'
validation.range=#{label} must be between #{min} and #{max}
label.testBean.foo=Foo
label.testBean.checkinDate=Check In Date
label.testBean.amount=Amount
formats.dateFormat=yyyy-MM-dd