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    }