1   package org.springframework.richclient.form;
2   
3   import junit.framework.TestCase;
4   
5   import org.springframework.binding.validation.ValidationMessage;
6   import org.springframework.binding.validation.support.DefaultValidationMessage;
7   import org.springframework.binding.validation.support.DefaultValidationResultsModel;
8   import org.springframework.binding.value.support.AbstractPropertyChangePublisher;
9   import org.springframework.richclient.core.Message;
10  import org.springframework.richclient.core.Severity;
11  import org.springframework.richclient.dialog.Messagable;
12  
13  public class SimpleValidationResultsReporterTests extends TestCase {
14  
15  	private class SimpleMessagable extends AbstractPropertyChangePublisher implements Messagable {
16  
17  		private Message message;
18  
19  		public void setMessage(Message message) {
20  			this.message = message;
21  		}
22  
23  		public Message getMessage() {
24  			return message;
25  		}
26  	}
27  
28  	private class TimeSpecifiedValidationMessage extends DefaultValidationMessage {
29  
30  		private final long timeStamp;
31  
32  		public TimeSpecifiedValidationMessage(String property, Severity severity, String message, long timeStamp) {
33  			super(property, severity, message);
34  			this.timeStamp = timeStamp;
35  		}
36  
37  		public long getTimestamp() {
38  			return timeStamp;
39  		}
40  	}
41  
42  	DefaultValidationResultsModel defaultValidationResultsModel = new DefaultValidationResultsModel();
43  
44  	SimpleMessagable messagable = new SimpleMessagable();
45  
46  	SimpleValidationResultsReporter simpleValidationResultsReporter = new SimpleValidationResultsReporter(defaultValidationResultsModel, messagable);
47  
48  	/**
49  	 * Clear all validation results before testing.
50  	 */
51  	protected void setUp() throws Exception {
52  		defaultValidationResultsModel.clearAllValidationResults();
53  	}
54  
55  	/**
56  	 * Test set error message on messagable.
57  	 */
58  	public void testErrorMessage() {
59  		singleMessage(Severity.ERROR);
60  	}
61  
62  	/**
63  	 * Test set warning message on messagable.
64  	 */
65  	public void testWarningMessage() {
66  		singleMessage(Severity.WARNING);
67  	}
68  
69  	/**
70  	 * Test set info message on messagable.
71  	 */
72  	public void testInfoMessage() {
73  		singleMessage(Severity.INFO);
74  	}
75  
76  	private void singleMessage(Severity severity) {
77  		ValidationMessage message = new DefaultValidationMessage("property", severity, "message");
78  		defaultValidationResultsModel.addMessage(message);
79  		assertEquals(message, messagable.getMessage());
80  	}
81  
82  	/**
83  	 * Test sequence of error messages.
84  	 */
85  	public void testErrorMessageSequence() {
86  		messageSequence(Severity.ERROR);
87  	}
88  
89  	/**
90  	 * Test sequence of warning messages.
91  	 */
92  	public void testWarningMessageSequence() {
93  		messageSequence(Severity.WARNING);
94  	}
95  
96  	/**
97  	 * Test sequence of info messages.
98  	 */
99  	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 }