001 package org.springframework.richclient.form;
002
003 import junit.framework.TestCase;
004
005 import org.springframework.binding.validation.ValidationMessage;
006 import org.springframework.binding.validation.support.DefaultValidationMessage;
007 import org.springframework.binding.validation.support.DefaultValidationResultsModel;
008 import org.springframework.binding.value.support.AbstractPropertyChangePublisher;
009 import org.springframework.richclient.core.Message;
010 import org.springframework.richclient.core.Severity;
011 import org.springframework.richclient.dialog.Messagable;
012
013 public class SimpleValidationResultsReporterTests extends TestCase {
014
015 private class SimpleMessagable extends AbstractPropertyChangePublisher implements Messagable {
016
017 private Message message;
018
019 public void setMessage(Message message) {
020 this.message = message;
021 }
022
023 public Message getMessage() {
024 return message;
025 }
026 }
027
028 private class TimeSpecifiedValidationMessage extends DefaultValidationMessage {
029
030 private final long timeStamp;
031
032 public TimeSpecifiedValidationMessage(String property, Severity severity, String message, long timeStamp) {
033 super(property, severity, message);
034 this.timeStamp = timeStamp;
035 }
036
037 public long getTimestamp() {
038 return timeStamp;
039 }
040 }
041
042 DefaultValidationResultsModel defaultValidationResultsModel = new DefaultValidationResultsModel();
043
044 SimpleMessagable messagable = new SimpleMessagable();
045
046 SimpleValidationResultsReporter simpleValidationResultsReporter = new SimpleValidationResultsReporter(defaultValidationResultsModel, messagable);
047
048 /**
049 * Clear all validation results before testing.
050 */
051 protected void setUp() throws Exception {
052 defaultValidationResultsModel.clearAllValidationResults();
053 }
054
055 /**
056 * Test set error message on messagable.
057 */
058 public void testErrorMessage() {
059 singleMessage(Severity.ERROR);
060 }
061
062 /**
063 * Test set warning message on messagable.
064 */
065 public void testWarningMessage() {
066 singleMessage(Severity.WARNING);
067 }
068
069 /**
070 * Test set info message on messagable.
071 */
072 public void testInfoMessage() {
073 singleMessage(Severity.INFO);
074 }
075
076 private void singleMessage(Severity severity) {
077 ValidationMessage message = new DefaultValidationMessage("property", severity, "message");
078 defaultValidationResultsModel.addMessage(message);
079 assertEquals(message, messagable.getMessage());
080 }
081
082 /**
083 * Test sequence of error messages.
084 */
085 public void testErrorMessageSequence() {
086 messageSequence(Severity.ERROR);
087 }
088
089 /**
090 * Test sequence of warning messages.
091 */
092 public void testWarningMessageSequence() {
093 messageSequence(Severity.WARNING);
094 }
095
096 /**
097 * Test sequence of info messages.
098 */
099 public void testInfoMessageSequence() {
100 messageSequence(Severity.INFO);
101 }
102
103 private void messageSequence(Severity severity) {
104 ValidationMessage message1 = new TimeSpecifiedValidationMessage("property1", severity, "message1", 1);
105 defaultValidationResultsModel.addMessage(message1);
106 ValidationMessage message2 = new TimeSpecifiedValidationMessage("property2", severity, "message2", 2);
107 defaultValidationResultsModel.addMessage(message2);
108 ValidationMessage message3 = new TimeSpecifiedValidationMessage("property3", severity, "message3", 3);
109 defaultValidationResultsModel.addMessage(message3);
110 ValidationMessage message4 = new TimeSpecifiedValidationMessage("property4", severity, "message4", 4);
111 defaultValidationResultsModel.addMessage(message4);
112
113 assertEquals(message4, messagable.getMessage());
114
115 defaultValidationResultsModel.removeMessage(message4);
116 assertEquals(message3, messagable.getMessage());
117
118 defaultValidationResultsModel.removeMessage(message2);
119 assertEquals(message3, messagable.getMessage());
120
121 defaultValidationResultsModel.removeMessage(message3);
122 assertEquals(message1, messagable.getMessage());
123
124 defaultValidationResultsModel.removeMessage(message1);
125 assertNull(messagable.getMessage());
126 }
127
128 /**
129 * Test random severity message sequence. (first error, then warning and then info)
130 */
131 public void testRandomSeverityMessageSequence() {
132 ValidationMessage error1 = new TimeSpecifiedValidationMessage("error1", Severity.ERROR, "error1", 1);
133 defaultValidationResultsModel.addMessage(error1);
134
135 ValidationMessage warning1 = new TimeSpecifiedValidationMessage("warning1", Severity.WARNING, "warning1", 2);
136 defaultValidationResultsModel.addMessage(warning1);
137
138 assertEquals(error1, messagable.getMessage());
139
140 ValidationMessage info1 = new TimeSpecifiedValidationMessage("info1", Severity.INFO, "info1", 3);
141 defaultValidationResultsModel.addMessage(info1);
142
143 assertEquals(error1, messagable.getMessage());
144
145 ValidationMessage error2 = new TimeSpecifiedValidationMessage("error2", Severity.ERROR, "error2", 4);
146 defaultValidationResultsModel.addMessage(error2);
147
148 assertEquals(error2, messagable.getMessage());
149 defaultValidationResultsModel.removeMessage(error2);
150 assertEquals(error1, messagable.getMessage());
151 defaultValidationResultsModel.removeMessage(error1);
152 assertEquals(warning1, messagable.getMessage());
153 defaultValidationResultsModel.removeMessage(warning1);
154 assertEquals(info1, messagable.getMessage());
155 defaultValidationResultsModel.removeMessage(info1);
156 assertNull(messagable.getMessage());
157 }
158 }