001    /*
002     * Copyright 2002-2004 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.dialog;
017    
018    import java.beans.PropertyChangeEvent;
019    import java.beans.PropertyChangeListener;
020    
021    import junit.framework.TestCase;
022    
023    import org.springframework.richclient.core.DefaultMessage;
024    import org.springframework.richclient.core.Severity;
025    
026    /**
027     * @author Peter De Bruycker
028     */
029    public class DefaultMessageAreaModelTests extends TestCase {
030    
031        private TestMessageAreaChangeListener ml1;
032    
033        private TestMessageAreaChangeListener ml2;
034    
035        public void testAddAndRemoveMessageListener() {
036            DefaultMessageAreaModel buffer = new DefaultMessageAreaModel();
037    
038            buffer.addPropertyChangeListener(ml1);
039            buffer.setMessage(new DefaultMessage("Msg"));
040            assertEquals(buffer, ml1.lastUpdated);
041    
042            ml1.lastUpdated = null;
043            buffer.removePropertyChangeListener(ml1);
044            buffer.setMessage(new DefaultMessage("Msg1"));
045            assertEquals(null, ml1.lastUpdated);
046    
047            buffer.addPropertyChangeListener(Messagable.MESSAGE_PROPERTY, ml1);
048            buffer.setMessage(new DefaultMessage("Msg"));
049            assertEquals(buffer, ml1.lastUpdated);
050    
051            ml1.lastUpdated = null;
052            buffer.removePropertyChangeListener(Messagable.MESSAGE_PROPERTY, ml1);
053            buffer.setMessage(new DefaultMessage("Msg1"));
054            assertEquals(null, ml1.lastUpdated);
055    
056            buffer.addPropertyChangeListener("Some Other Property", ml1);
057            buffer.setMessage(new DefaultMessage("Msg"));
058            assertEquals(null, ml1.lastUpdated);
059        }
060    
061        public void testSetMessage() {
062            String msg = "Info message";
063    
064            DefaultMessageAreaModel buffer = new DefaultMessageAreaModel();
065            buffer.addPropertyChangeListener(ml1);
066            buffer.addPropertyChangeListener(ml2);
067    
068            buffer.setMessage(new DefaultMessage(msg));
069            assertMessageAndSeveritySet(buffer, msg, Severity.INFO);
070    
071            // with delegate
072            DefaultMessageAreaModel delegate = new DefaultMessageAreaModel();
073            buffer = new DefaultMessageAreaModel(delegate);
074            buffer.addPropertyChangeListener(ml1);
075            buffer.addPropertyChangeListener(ml2);
076            buffer.setMessage(new DefaultMessage(msg));
077            assertMessageAndSeveritySet(buffer, msg, Severity.INFO);
078        }
079    
080        private void assertMessageAndSeveritySet(DefaultMessageAreaModel buffer, String msg, Severity severity) {
081            assertEquals("message was not set", msg, buffer.getMessage().getMessage());
082            assertEquals("severity must be info", severity, buffer.getMessage().getSeverity());
083            assertEquals("listener not notified", buffer.getDelegateFor(), ml1.lastUpdated);
084            assertEquals("listener not notified", buffer.getDelegateFor(), ml2.lastUpdated);
085        }
086    
087        public void testSetErrorMessage() {
088            String msg = "Error message";
089    
090            DefaultMessageAreaModel buffer = new DefaultMessageAreaModel();
091            buffer.addPropertyChangeListener(ml1);
092            buffer.addPropertyChangeListener(ml2);
093    
094            buffer.setMessage(new DefaultMessage(msg, Severity.ERROR));
095            assertMessageAndSeveritySet(buffer, msg, Severity.ERROR);
096    
097            // with delegate
098            DefaultMessageAreaModel delegate = new DefaultMessageAreaModel();
099            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    }