1   /*
2    * Copyright 2002-2004 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * the License at
7    * 
8    * http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
15   */
16  package org.springframework.richclient.dialog;
17  
18  import java.beans.PropertyChangeEvent;
19  import java.beans.PropertyChangeListener;
20  
21  import junit.framework.TestCase;
22  
23  import org.springframework.richclient.core.DefaultMessage;
24  import org.springframework.richclient.core.Severity;
25  
26  /**
27   * @author Peter De Bruycker
28   */
29  public class DefaultMessageAreaModelTests extends TestCase {
30  
31      private TestMessageAreaChangeListener ml1;
32  
33      private TestMessageAreaChangeListener ml2;
34  
35      public void testAddAndRemoveMessageListener() {
36          DefaultMessageAreaModel buffer = new DefaultMessageAreaModel();
37  
38          buffer.addPropertyChangeListener(ml1);
39          buffer.setMessage(new DefaultMessage("Msg"));
40          assertEquals(buffer, ml1.lastUpdated);
41  
42          ml1.lastUpdated = null;
43          buffer.removePropertyChangeListener(ml1);
44          buffer.setMessage(new DefaultMessage("Msg1"));
45          assertEquals(null, ml1.lastUpdated);
46  
47          buffer.addPropertyChangeListener(Messagable.MESSAGE_PROPERTY, ml1);
48          buffer.setMessage(new DefaultMessage("Msg"));
49          assertEquals(buffer, ml1.lastUpdated);
50  
51          ml1.lastUpdated = null;
52          buffer.removePropertyChangeListener(Messagable.MESSAGE_PROPERTY, ml1);
53          buffer.setMessage(new DefaultMessage("Msg1"));
54          assertEquals(null, ml1.lastUpdated);
55  
56          buffer.addPropertyChangeListener("Some Other Property", ml1);
57          buffer.setMessage(new DefaultMessage("Msg"));
58          assertEquals(null, ml1.lastUpdated);
59      }
60  
61      public void testSetMessage() {
62          String msg = "Info message";
63  
64          DefaultMessageAreaModel buffer = new DefaultMessageAreaModel();
65          buffer.addPropertyChangeListener(ml1);
66          buffer.addPropertyChangeListener(ml2);
67  
68          buffer.setMessage(new DefaultMessage(msg));
69          assertMessageAndSeveritySet(buffer, msg, Severity.INFO);
70  
71          // with delegate
72          DefaultMessageAreaModel delegate = new DefaultMessageAreaModel();
73          buffer = new DefaultMessageAreaModel(delegate);
74          buffer.addPropertyChangeListener(ml1);
75          buffer.addPropertyChangeListener(ml2);
76          buffer.setMessage(new DefaultMessage(msg));
77          assertMessageAndSeveritySet(buffer, msg, Severity.INFO);
78      }
79  
80      private void assertMessageAndSeveritySet(DefaultMessageAreaModel buffer, String msg, Severity severity) {
81          assertEquals("message was not set", msg, buffer.getMessage().getMessage());
82          assertEquals("severity must be info", severity, buffer.getMessage().getSeverity());
83          assertEquals("listener not notified", buffer.getDelegateFor(), ml1.lastUpdated);
84          assertEquals("listener not notified", buffer.getDelegateFor(), ml2.lastUpdated);
85      }
86  
87      public void testSetErrorMessage() {
88          String msg = "Error message";
89  
90          DefaultMessageAreaModel buffer = new DefaultMessageAreaModel();
91          buffer.addPropertyChangeListener(ml1);
92          buffer.addPropertyChangeListener(ml2);
93  
94          buffer.setMessage(new DefaultMessage(msg, Severity.ERROR));
95          assertMessageAndSeveritySet(buffer, msg, Severity.ERROR);
96  
97          // with delegate
98          DefaultMessageAreaModel delegate = new DefaultMessageAreaModel();
99          buffer = new DefaultMessageAreaModel(delegate);
100         buffer.addPropertyChangeListener(ml1);
101         buffer.addPropertyChangeListener(ml2);
102 
103         buffer.setMessage(new DefaultMessage(msg, Severity.ERROR));
104         assertMessageAndSeveritySet(buffer, msg, Severity.ERROR);
105     }
106 
107     public void testSetSameMessage() {
108         String msg = "Test message";
109         Severity severity = Severity.WARNING;
110 
111         DefaultMessageAreaModel buffer = new DefaultMessageAreaModel();
112         buffer.addPropertyChangeListener(ml1);
113         buffer.addPropertyChangeListener(ml2);
114 
115         buffer.setMessage(new DefaultMessage(msg, severity));
116 
117         assertMessageAndSeveritySet(buffer, msg, severity);
118         ml1.lastUpdated = null;
119         ml2.lastUpdated = null;
120 
121         // and again
122         buffer.setMessage(new DefaultMessage(msg, severity));
123         assertNull(ml1.lastUpdated);
124         assertNull(ml2.lastUpdated);
125     }
126 
127     /*
128      * (non-Javadoc)
129      * 
130      * @see junit.framework.TestCase#setUp()
131      */
132     protected void setUp() throws Exception {
133         super.setUp();
134 
135         ml1 = new TestMessageAreaChangeListener();
136         ml2 = new TestMessageAreaChangeListener();
137     }
138 
139     private static class TestMessageAreaChangeListener implements PropertyChangeListener {
140 
141         private Messagable lastUpdated;
142 
143         public void propertyChange(PropertyChangeEvent evt) {
144             this.lastUpdated = (Messagable)evt.getSource();
145 
146         }
147 
148     }
149 }