factored out alert from message; made binding responsible for alert generation
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package org.springframework.ui.alert;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.ui.alert.Alert;
|
||||
import org.springframework.ui.alert.Severity;
|
||||
import org.springframework.ui.alert.support.DefaultAlertContext;
|
||||
|
||||
public class DefaultMessageContextTests {
|
||||
|
||||
private DefaultAlertContext context;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
context = new DefaultAlertContext();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addAlert() {
|
||||
Alert alert = new Alert() {
|
||||
public String getElement() {
|
||||
return "form.property";
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return "invalidFormat";
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return "Please enter a value in format yyy-dd-mm";
|
||||
}
|
||||
|
||||
public Severity getSeverity() {
|
||||
return Severity.ERROR;
|
||||
}
|
||||
};
|
||||
context.add(alert);
|
||||
assertEquals(1, context.getAlerts().size());
|
||||
assertEquals("invalidFormat", context.getAlerts("form.property").get(0).getCode());
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,6 @@ import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.expression.EvaluationException;
|
||||
import org.springframework.ui.binding.Binder;
|
||||
import org.springframework.ui.binding.Binding;
|
||||
import org.springframework.ui.binding.BindingConfiguration;
|
||||
@@ -61,18 +60,15 @@ public class GenericBinderTests {
|
||||
assertEquals(3, results.size());
|
||||
|
||||
assertEquals("string", results.get(0).getProperty());
|
||||
assertFalse(results.get(0).isError());
|
||||
assertNull(results.get(0).getErrorCause());
|
||||
assertFalse(results.get(0).isFailure());
|
||||
assertEquals("test", results.get(0).getUserValue());
|
||||
|
||||
assertEquals("integer", results.get(1).getProperty());
|
||||
assertFalse(results.get(1).isError());
|
||||
assertNull(results.get(1).getErrorCause());
|
||||
assertFalse(results.get(1).isFailure());
|
||||
assertEquals("3", results.get(1).getUserValue());
|
||||
|
||||
assertEquals("foo", results.get(2).getProperty());
|
||||
assertFalse(results.get(2).isError());
|
||||
assertNull(results.get(2).getErrorCause());
|
||||
assertFalse(results.get(2).isFailure());
|
||||
assertEquals("BAR", results.get(2).getUserValue());
|
||||
|
||||
assertEquals("test", bean.getString());
|
||||
@@ -89,8 +85,8 @@ public class GenericBinderTests {
|
||||
values.add("foo", "BAR");
|
||||
BindingResults results = binder.bind(values);
|
||||
assertEquals(3, results.size());
|
||||
assertTrue(results.get(1).isError());
|
||||
assertEquals("typeConversionFailure", results.get(1).getErrorCode());
|
||||
assertTrue(results.get(1).isFailure());
|
||||
assertEquals("typeConversionFailure", results.get(1).getAlert().getCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -131,8 +127,8 @@ public class GenericBinderTests {
|
||||
public void bindSingleValuePropertyNotFound() throws ParseException {
|
||||
BindingResults results = binder.bind(UserValues.single("bogus", "2009-06-01"));
|
||||
assertEquals(1, results.size());
|
||||
assertTrue(results.get(0).isError());
|
||||
assertEquals("propertyNotFound", results.get(0).getErrorCode());
|
||||
assertTrue(results.get(0).isFailure());
|
||||
assertEquals("propertyNotFound", results.get(0).getAlert().getCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -156,7 +152,7 @@ public class GenericBinderTests {
|
||||
assertEquals("0", b.getValue());
|
||||
BindingResult result = b.setValue("5");
|
||||
assertEquals("5", b.getValue());
|
||||
assertFalse(result.isError());
|
||||
assertFalse(result.isFailure());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -170,7 +166,7 @@ public class GenericBinderTests {
|
||||
assertEquals("0", b.getValue());
|
||||
BindingResult result = b.setValue("5");
|
||||
assertEquals("5", b.getValue());
|
||||
assertFalse(result.isError());
|
||||
assertFalse(result.isFailure());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -214,9 +210,8 @@ public class GenericBinderTests {
|
||||
assertTrue(b.isCollection());
|
||||
assertEquals(0, b.getCollectionValues().length);
|
||||
BindingResult result = b.setValue(new String[] { "BAR", "BOGUS", "BOOP" });
|
||||
assertTrue(result.isError());
|
||||
assertTrue(result.getErrorCause() instanceof EvaluationException);
|
||||
assertEquals("typeConversionFailure", result.getErrorCode());
|
||||
assertTrue(result.isFailure());
|
||||
assertEquals("typeConversionFailure", result.getAlert().getCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -6,38 +6,29 @@ import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.springframework.ui.alert.Severity;
|
||||
import org.springframework.ui.alert.support.DefaultAlertContext;
|
||||
import org.springframework.ui.binding.support.GenericFormatterRegistry;
|
||||
import org.springframework.ui.format.number.CurrencyFormat;
|
||||
import org.springframework.ui.message.MockMessageSource;
|
||||
import org.springframework.ui.message.Severity;
|
||||
import org.springframework.ui.message.support.DefaultMessageContext;
|
||||
import org.springframework.ui.format.number.IntegerFormatter;
|
||||
|
||||
public class WebBindAndLifecycleTests {
|
||||
|
||||
private WebBindAndValidateLifecycle lifecycle;
|
||||
|
||||
private DefaultMessageContext messages;
|
||||
private TestBean model;
|
||||
|
||||
private DefaultAlertContext alertContext;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockMessageSource messageSource = new MockMessageSource();
|
||||
messageSource
|
||||
.addMessage(
|
||||
"invalidFormat",
|
||||
Locale.US,
|
||||
"#{label} must be a ${objectType} in format #{format}; parsing of your value '#{value}' failed at the #{errorPosition} character");
|
||||
messageSource.addMessage("typeConversionFailure", Locale.US,
|
||||
"The value '#{value}' entered into the #{label} field could not be converted");
|
||||
messageSource.addMessage("org.springframework.ui.lifecycle.WebBindAndLifecycleTests$TestBean.integer",
|
||||
Locale.US, "Integer");
|
||||
messages = new DefaultMessageContext(messageSource);
|
||||
TestBean model = new TestBean();
|
||||
lifecycle = new WebBindAndValidateLifecycle(model, messages);
|
||||
model = new TestBean();
|
||||
alertContext = new DefaultAlertContext();
|
||||
lifecycle = new WebBindAndValidateLifecycle(model, alertContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -47,10 +38,9 @@ public class WebBindAndLifecycleTests {
|
||||
userMap.put("integer", "3");
|
||||
userMap.put("foo", "BAR");
|
||||
lifecycle.execute(userMap);
|
||||
assertEquals(0, messages.getMessages().size());
|
||||
assertEquals(0, alertContext.getAlerts().size());
|
||||
}
|
||||
|
||||
@Ignore("Disabled test until it passes consistently in the Ant build on Mac OS X")
|
||||
@Test
|
||||
public void testExecuteLifecycleBindingErrors() {
|
||||
Map<String, Object> userMap = new HashMap<String, Object>();
|
||||
@@ -58,10 +48,24 @@ public class WebBindAndLifecycleTests {
|
||||
userMap.put("integer", "bogus");
|
||||
userMap.put("foo", "BAR");
|
||||
lifecycle.execute(userMap);
|
||||
assertEquals(1, messages.getMessages().size());
|
||||
assertEquals(Severity.ERROR, messages.getMessages("integer").get(0).getSeverity());
|
||||
assertEquals("The value 'bogus' entered into the Integer field could not be converted", messages.getMessages(
|
||||
"integer").get(0).getText());
|
||||
assertEquals(1, alertContext.getAlerts().size());
|
||||
assertEquals(Severity.FATAL, alertContext.getAlerts("integer").get(0).getSeverity());
|
||||
assertEquals("Failed to bind to property 'integer'; user value 'bogus' could not be converted to property type [java.lang.Integer]", alertContext.getAlerts("integer").get(0).getMessage());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteLifecycleInvalidFormatBindingErrors() {
|
||||
Map<String, Object> userMap = new HashMap<String, Object>();
|
||||
GenericFormatterRegistry registry = new GenericFormatterRegistry();
|
||||
registry.add(new IntegerFormatter(), Integer.class);
|
||||
lifecycle.setFormatterRegistry(registry);
|
||||
userMap.put("string", "test");
|
||||
userMap.put("integer", "bogus");
|
||||
userMap.put("foo", "BAR");
|
||||
lifecycle.execute(userMap);
|
||||
assertEquals(1, alertContext.getAlerts().size());
|
||||
assertEquals(Severity.ERROR, alertContext.getAlerts("integer").get(0).getSeverity());
|
||||
assertEquals("Failed to bind to property 'integer'; the user value 'bogus' has an invalid format and could no be parsed", alertContext.getAlerts("integer").get(0).getMessage());
|
||||
}
|
||||
|
||||
public static enum FooEnum {
|
||||
|
||||
@@ -6,19 +6,18 @@ import java.util.Locale;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class MessageBuilderTests {
|
||||
public class MessageResolverBuilderTests {
|
||||
|
||||
private MessageBuilder builder = new MessageBuilder();
|
||||
private MessageResolverBuilder builder = new MessageResolverBuilder();
|
||||
|
||||
@Test
|
||||
public void buildMessage() {
|
||||
MessageResolver resolver = builder.severity(Severity.ERROR).code("invalidFormat").arg("label", new ResolvableArgument("mathForm.decimalField"))
|
||||
.arg("format", "#,###.##").defaultText("Field must be in format #,###.##").build();
|
||||
MessageResolver resolver = builder.code("invalidFormat").arg("label", new ResolvableArgument("mathForm.decimalField"))
|
||||
.arg("format", "#,###.##").defaultMessage("Field must be in format #,###.##").build();
|
||||
MockMessageSource messageSource = new MockMessageSource();
|
||||
messageSource.addMessage("invalidFormat", Locale.US, "#{label} must be in format #{format}");
|
||||
messageSource.addMessage("mathForm.decimalField", Locale.US, "Decimal Field");
|
||||
Message message = resolver.resolveMessage(messageSource, Locale.US);
|
||||
assertEquals(Severity.ERROR, message.getSeverity());
|
||||
assertEquals("Decimal Field must be in format #,###.##", message.getText());
|
||||
String message = resolver.resolveMessage(messageSource, Locale.US);
|
||||
assertEquals("Decimal Field must be in format #,###.##", message);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import java.util.Map;
|
||||
import org.springframework.context.support.AbstractMessageSource;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
public class MockMessageSource extends AbstractMessageSource {
|
||||
class MockMessageSource extends AbstractMessageSource {
|
||||
|
||||
/** Map from 'code + locale' keys to message Strings */
|
||||
private final Map<String, String> messages = new HashMap<String, String>();
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
package org.springframework.ui.message.support;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.ui.message.ResolvableArgument;
|
||||
import org.springframework.ui.message.Message;
|
||||
import org.springframework.ui.message.MessageBuilder;
|
||||
import org.springframework.ui.message.MessageResolver;
|
||||
import org.springframework.ui.message.MockMessageSource;
|
||||
import org.springframework.ui.message.Severity;
|
||||
|
||||
public class DefaultMessageContextTests {
|
||||
|
||||
private DefaultMessageContext context;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockMessageSource messageSource = new MockMessageSource();
|
||||
messageSource.addMessage("invalidFormat", Locale.US, "#{label} must be in format #{format}");
|
||||
messageSource.addMessage("mathForm.decimalField", Locale.US, "Decimal Field");
|
||||
context = new DefaultMessageContext(messageSource);
|
||||
LocaleContextHolder.setLocale(Locale.US);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
LocaleContextHolder.setLocale(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addMessage() {
|
||||
MessageBuilder builder = new MessageBuilder();
|
||||
MessageResolver message = builder.severity(Severity.ERROR).code("invalidFormat").arg("label", new ResolvableArgument("mathForm.decimalField")).
|
||||
arg("format", "#,###.##").defaultText("Field must be in format #,###.##").build();
|
||||
context.add(message, "mathForm.decimalField");
|
||||
Map<String, List<Message>> messages = context.getMessages();
|
||||
assertEquals(1, messages.size());
|
||||
assertEquals("Decimal Field must be in format #,###.##", messages.get("mathForm.decimalField").get(0).getText());
|
||||
assertEquals("Decimal Field must be in format #,###.##", context.getMessages("mathForm.decimalField").get(0).getText());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user