1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.springframework.binding.validation;
17
18 import junit.framework.TestCase;
19
20 import org.springframework.binding.support.TestPropertyChangeListener;
21 import org.springframework.binding.validation.support.DefaultValidationMessage;
22 import org.springframework.binding.validation.support.DefaultValidationResults;
23 import org.springframework.binding.validation.support.DefaultValidationResultsModel;
24 import org.springframework.richclient.core.Severity;
25
26
27
28
29
30
31 public class DefaultValidationResultsModelTests extends TestCase {
32 private DefaultValidationResultsModel vrm;
33
34 private TestPropertyChangeListener warnListener;
35
36 private TestPropertyChangeListener infoListener;
37
38 private TestPropertyChangeListener errorsListener;
39
40 private TestValidationListener listener;
41
42 private TestValidationListener field1Listener;
43
44 private TestValidationListener nullListener;
45
46 public void setUp() {
47 vrm = new DefaultValidationResultsModel();
48 errorsListener = new TestPropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY);
49 vrm.addPropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, errorsListener);
50 warnListener = new TestPropertyChangeListener(ValidationResultsModel.HAS_WARNINGS_PROPERTY);
51 vrm.addPropertyChangeListener(ValidationResultsModel.HAS_WARNINGS_PROPERTY, warnListener);
52 infoListener = new TestPropertyChangeListener(ValidationResultsModel.HAS_INFO_PROPERTY);
53 vrm.addPropertyChangeListener(ValidationResultsModel.HAS_INFO_PROPERTY, infoListener);
54 listener = new TestValidationListener();
55 vrm.addValidationListener(listener);
56 field1Listener = new TestValidationListener();
57 vrm.addValidationListener("field1", field1Listener);
58 nullListener = new TestValidationListener();
59 vrm.addValidationListener(ValidationMessage.GLOBAL_PROPERTY, nullListener);
60 }
61
62 public void testUpdatesFirePropertyChangeEvents() {
63 vrm.updateValidationResults(getResults("field1", Severity.INFO));
64 assertEquals(1, infoListener.eventCount());
65 assertEquals(Boolean.FALSE, infoListener.lastEvent().getOldValue());
66 assertEquals(Boolean.TRUE, infoListener.lastEvent().getNewValue());
67 vrm.updateValidationResults(getResults("field1", Severity.INFO));
68 assertEquals(1, infoListener.eventCount());
69
70 vrm.updateValidationResults(getResults("field1", Severity.WARNING));
71 assertEquals(1, warnListener.eventCount());
72 assertEquals(Boolean.FALSE, warnListener.lastEvent().getOldValue());
73 assertEquals(Boolean.TRUE, warnListener.lastEvent().getNewValue());
74 assertEquals(2, infoListener.eventCount());
75 assertEquals(Boolean.TRUE, infoListener.lastEvent().getOldValue());
76 assertEquals(Boolean.FALSE, infoListener.lastEvent().getNewValue());
77 vrm.updateValidationResults(getResults("field1", Severity.WARNING));
78 assertEquals(1, warnListener.eventCount());
79
80 vrm.updateValidationResults(getResults("field1", Severity.ERROR));
81 assertEquals(1, errorsListener.eventCount());
82 assertEquals(Boolean.FALSE, errorsListener.lastEvent().getOldValue());
83 assertEquals(Boolean.TRUE, errorsListener.lastEvent().getNewValue());
84 assertEquals(2, warnListener.eventCount());
85 assertEquals(Boolean.TRUE, warnListener.lastEvent().getOldValue());
86 assertEquals(Boolean.FALSE, warnListener.lastEvent().getNewValue());
87 vrm.updateValidationResults(getResults("field1", Severity.ERROR));
88 assertEquals(1, errorsListener.eventCount());
89
90 vrm.clearAllValidationResults();
91 assertEquals(2, infoListener.eventCount());
92 assertEquals(Boolean.TRUE, infoListener.lastEvent().getOldValue());
93 assertEquals(Boolean.FALSE, infoListener.lastEvent().getNewValue());
94 assertEquals(2, warnListener.eventCount());
95 assertEquals(Boolean.TRUE, warnListener.lastEvent().getOldValue());
96 assertEquals(Boolean.FALSE, warnListener.lastEvent().getNewValue());
97 assertEquals(2, errorsListener.eventCount());
98 assertEquals(Boolean.TRUE, errorsListener.lastEvent().getOldValue());
99 assertEquals(Boolean.FALSE, errorsListener.lastEvent().getNewValue());
100 }
101
102 public void testEventsHaveCorectSource() {
103 vrm.updateValidationResults(getResults("field1", Severity.ERROR));
104 assertEquals(vrm, errorsListener.lastEvent().getSource());
105 assertEquals(vrm, listener.lastResults());
106
107 ValidationResultsModel delegateFor = new DefaultValidationResultsModel();
108 vrm = new DefaultValidationResultsModel(delegateFor);
109 vrm.addValidationListener(listener);
110 vrm.addPropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, errorsListener);
111 vrm.updateValidationResults(getResults("field1", Severity.ERROR));
112 assertEquals(delegateFor, errorsListener.lastEvent().getSource());
113 assertEquals(delegateFor, listener.lastResults());
114 }
115
116 public void testUpdatesFireValidationEvents() {
117 vrm.updateValidationResults(getResults("field1", Severity.INFO));
118 assertEquals(1, listener.eventCount());
119 assertEquals(1, field1Listener.eventCount());
120 assertEquals(0, nullListener.eventCount());
121 assertEquals(vrm, listener.lastResults());
122 assertEquals(vrm, field1Listener.lastResults());
123 assertEquals(null, nullListener.lastResults());
124
125 vrm.updateValidationResults(getResults("field1", Severity.INFO, ValidationMessage.GLOBAL_PROPERTY, Severity.ERROR));
126 assertEquals(2, listener.eventCount());
127 assertEquals(2, field1Listener.eventCount());
128 assertEquals(1, nullListener.eventCount());
129 assertEquals(vrm, nullListener.lastResults());
130
131 vrm.clearAllValidationResults();
132 assertEquals(3, listener.eventCount());
133 assertEquals(3, field1Listener.eventCount());
134 assertEquals(2, nullListener.eventCount());
135
136 vrm.clearAllValidationResults();
137 assertEquals(3, listener.eventCount());
138 assertEquals(3, field1Listener.eventCount());
139 assertEquals(2, nullListener.eventCount());
140
141 vrm.updateValidationResults(getResults(ValidationMessage.GLOBAL_PROPERTY, Severity.INFO));
142 assertEquals(4, listener.eventCount());
143 assertEquals(3, field1Listener.eventCount());
144 assertEquals(3, nullListener.eventCount());
145 }
146
147
148
149
150 public void testMessageCount() {
151 DefaultValidationResultsModel resultsModel = new DefaultValidationResultsModel();
152 resultsModel.addMessage(new DefaultValidationMessage("property1", Severity.ERROR, "message1"));
153 resultsModel.addMessage(new DefaultValidationMessage("property1", Severity.INFO, "message2"));
154 resultsModel.addMessage(new DefaultValidationMessage("property2", Severity.ERROR, "message3"));
155 assertEquals("Number of messages should be 3", 3, resultsModel.getMessageCount());
156 assertEquals("Number of messages registered for property1 should be 2", 2, resultsModel.getMessageCount("property1"));
157 assertEquals("Number of messages flagged as INFO should be 1", 1, resultsModel.getMessageCount(Severity.INFO));
158 }
159
160
161
162
163 public void testAddChildEvents() {
164 DefaultValidationResultsModel childModel = new DefaultValidationResultsModel();
165
166 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.ERROR, "childErrorMessage1"));
167 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.WARNING, "childWarningMessage1"));
168 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.INFO, "childInfoMessage1"));
169 vrm.add(childModel);
170 assertEquals("ParentModel adds child with Error.", 1, listener.eventCount());
171 assertEquals("ChildModel has ErrorMessage.", 1, errorsListener.eventCount());
172 assertEquals("ChildModel has WarningMessage.", 1, warnListener.eventCount());
173 assertEquals("ChildModel has InfoMessage.", 1, infoListener.eventCount());
174 assertEquals("ChildModel has ErrorMessage.", Boolean.TRUE, errorsListener.lastEvent().getNewValue());
175 assertEquals("ChildModel has WarningMessage.", Boolean.TRUE, warnListener.lastEvent().getNewValue());
176 assertEquals("ChildModel has InfoMessage.", Boolean.TRUE, infoListener.lastEvent().getNewValue());
177 }
178
179
180
181
182 public void testChildEvents() {
183 DefaultValidationResultsModel childModel = new DefaultValidationResultsModel();
184
185 vrm.add(childModel);
186 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.ERROR, "childErrorMessage1"));
187 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.WARNING, "childWarningMessage1"));
188 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.INFO, "childInfoMessage1"));
189 assertEquals("Child added errorMessage, warningMessage and InfoMessage.", 3, listener.eventCount());
190 assertEquals("ChildModel added ErrorMessage.", 1, errorsListener.eventCount());
191 assertEquals("ChildModel added WarningMessage.", 1, warnListener.eventCount());
192 assertEquals("ChildModel added InfoMessage.", 1, infoListener.eventCount());
193 assertEquals("ChildModel added ErrorMessage.", Boolean.TRUE, errorsListener.lastEvent().getNewValue());
194 assertEquals("ChildModel added WarningMessage.", Boolean.TRUE, warnListener.lastEvent().getNewValue());
195 assertEquals("ChildModel added InfoMessage.", Boolean.TRUE, infoListener.lastEvent().getNewValue());
196 }
197
198
199
200
201 public void testRemoveChildEvents() {
202 DefaultValidationResultsModel childModel = new DefaultValidationResultsModel();
203
204 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.ERROR, "childErrorMessage1"));
205 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.WARNING, "childWarningMessage1"));
206 childModel.addMessage(new DefaultValidationMessage("childProperty1", Severity.INFO, "childInfoMessage1"));
207 vrm.add(childModel);
208 vrm.remove(childModel);
209 assertEquals("Child removed, revalidate.", 2, listener.eventCount());
210 assertEquals("Child removed, revalidate ErrorMessages.", 2, errorsListener.eventCount());
211 assertEquals("Child removed, revalidate WarningMessages.", 2, warnListener.eventCount());
212 assertEquals("Child removed, revalidate InfoMessages.", 2, infoListener.eventCount());
213 assertEquals("Child removed, revalidate ErrorMessages.", Boolean.FALSE, errorsListener.lastEvent().getNewValue());
214 assertEquals("Child removed, revalidate WarningMessages.", Boolean.FALSE, warnListener.lastEvent().getNewValue());
215 assertEquals("Child removed, revalidate InfoMessages.", Boolean.FALSE, infoListener.lastEvent().getNewValue());
216 }
217
218 private ValidationResults getResults(String field, Severity severity) {
219 DefaultValidationResults vr = new DefaultValidationResults();
220 vr.addMessage(field, severity, "");
221 return vr;
222 }
223
224 private ValidationResults getResults(String field1, Severity severity1, String field2, Severity severity2) {
225 DefaultValidationResults vr = new DefaultValidationResults();
226 vr.addMessage(field1, severity1, "");
227 vr.addMessage(field2, severity2, "");
228 return vr;
229 }
230
231 public static class TestValidationListener implements ValidationListener {
232
233 private ValidationResults lastResults;
234
235 private int eventCount = 0;
236
237 public void validationResultsChanged(ValidationResults results) {
238 lastResults = results;
239 eventCount++;
240 }
241
242 public int eventCount() {
243 return eventCount;
244 }
245
246 public ValidationResults lastResults() {
247 return lastResults;
248 }
249 }
250 }