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 }