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.settings.support;
017    
018    import java.awt.Component;
019    import java.awt.Frame;
020    import java.awt.Toolkit;
021    
022    import javax.swing.JDialog;
023    import javax.swing.JFrame;
024    
025    import junit.framework.TestCase;
026    
027    import org.springframework.richclient.settings.TransientSettings;
028    
029    /**
030     * @author Peter De Bruycker
031     */
032    public class WindowMementoTests extends TestCase {
033            private JFrame frame;
034    
035            private JDialog dialog;
036    
037            private TransientSettings settings;
038    
039            protected void setUp() throws Exception {
040                    frame = new JFrame("test frame");
041                    dialog = new JDialog(frame, "test dialog");
042                    settings = new TransientSettings();
043            }
044    
045            public void testConstructor() {
046                    try {
047                            new WindowMemento(null);
048                            fail("Should throw IllegalArgumentException");
049                    } catch (IllegalArgumentException e) {
050                            // test passes
051                    }
052    
053                    try {
054                            frame.setName(null);
055                            new WindowMemento(frame, "");
056                            fail("Should throw IllegalArgumentException: window has no name");
057                    } catch (Exception e) {
058                            // test passes
059                    }
060    
061                    frame.setName("frame0");
062    
063                    WindowMemento memento = new WindowMemento(frame);
064                    assertEquals(frame, memento.getWindow());
065                    assertEquals("frame0", memento.getKey());
066                    
067                    memento = new WindowMemento(frame, "key");
068                    assertEquals(frame, memento.getWindow());
069                    assertEquals("key", memento.getKey());
070            }
071    
072            public void testSaveLocation() {
073                    // frame
074                    WindowMemento frameMemento = new WindowMemento(frame, "frame");
075                    frame.setLocation(100, 99);
076                    frameMemento.saveLocation(settings);
077    
078                    assertEquals(100, settings.getInt("frame.x"));
079                    assertEquals(99, settings.getInt("frame.y"));
080    
081                    // dialog
082                    WindowMemento dialogMemento = new WindowMemento(dialog, "dialog");
083                    dialog.setLocation(20, 15);
084                    dialogMemento.saveLocation(settings);
085    
086                    assertEquals(20, settings.getInt("dialog.x"));
087                    assertEquals(15, settings.getInt("dialog.y"));
088            }
089    
090            public void testRestoreLocation() {
091                    // frame
092                    WindowMemento frameMemento = new WindowMemento(frame, "frame");
093    
094                    frame.setLocation(100, 99);
095                    settings.setInt("frame.x", 15);
096                    settings.setInt("frame.y", 30);
097                    frameMemento.restoreLocation(settings);
098    
099                    assertEquals(15, frame.getX());
100                    assertEquals(30, frame.getY());
101    
102                    // dialog
103                    WindowMemento dialogMemento = new WindowMemento(dialog, "dialog");
104    
105                    dialog.setLocation(20, 15);
106                    settings.setInt("dialog.x", 100);
107                    settings.setInt("dialog.y", 115);
108                    dialogMemento.restoreLocation(settings);
109    
110                    assertEquals(100, dialog.getX());
111                    assertEquals(115, dialog.getY());
112            }
113    
114            public void testRestoreLocationNotInSettings() {
115                    // frame
116                    WindowMemento frameMemento = new WindowMemento(frame, "frame");
117    
118                    frame.setLocation(100, 99);
119                    assertFalse(settings.contains("frame.x"));
120                    assertFalse(settings.contains("frame.y"));
121                    frameMemento.restoreLocation(settings);
122    
123                    assertEquals(100, frame.getX());
124                    assertEquals(99, frame.getY());
125    
126                    // dialog
127                    WindowMemento dialogMemento = new WindowMemento(dialog, "dialog");
128    
129                    dialog.setLocation(20, 15);
130                    assertFalse(settings.contains("dialog.x"));
131                    assertFalse(settings.contains("dialog.y"));
132                    dialogMemento.restoreLocation(settings);
133    
134                    assertEquals(20, dialog.getX());
135                    assertEquals(15, dialog.getY());
136            }
137    
138            public void testSaveSize() {
139                    // frame
140                    WindowMemento frameMemento = new WindowMemento(frame, "frame");
141    
142                    frame.setSize(800, 600);
143                    frameMemento.saveSize(settings);
144    
145                    assertEquals(800, settings.getInt("frame.width"));
146                    assertEquals(600, settings.getInt("frame.height"));
147    
148                    // dialog
149                    WindowMemento dialogMemento = new WindowMemento(dialog, "dialog");
150    
151                    dialog.setSize(150, 100);
152                    dialogMemento.saveSize(settings);
153    
154                    assertEquals(150, settings.getInt("dialog.width"));
155                    assertEquals(100, settings.getInt("dialog.height"));
156            }
157    
158            public void testSaveMaximizedState() {
159                    // skip test if platform doesn't support this frame state.
160                    if (!Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH))
161                            return;
162    
163                    WindowMemento frameMemento = new WindowMemento(frame, "frame");
164    
165                    frame.setExtendedState(Frame.MAXIMIZED_BOTH);
166                    frameMemento.saveMaximizedState(settings);
167    
168                    assertTrue(settings.getBoolean("frame.maximized"));
169    
170                    frame.setExtendedState(Frame.NORMAL);
171                    frameMemento.saveMaximizedState(settings);
172                    assertFalse(settings.getBoolean("frame.maximized"));
173            }
174    
175            public void testRestoreMaximizedState() {
176                    // skip test if platform doesn't support this frame state.
177                    if (!Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH))
178                            return;
179    
180                    WindowMemento frameMemento = new WindowMemento(frame, "frame");
181    
182                    frame.setExtendedState(Frame.NORMAL);
183                    settings.setBoolean("frame.maximized", true);
184                    frameMemento.restoreMaximizedState(settings);
185    
186                    assertEquals(Frame.MAXIMIZED_BOTH, frame.getExtendedState());
187    
188                    settings.setBoolean("frame.maximized", false);
189                    frameMemento.restoreMaximizedState(settings);
190                    assertEquals(Frame.NORMAL, frame.getExtendedState());
191            }
192    
193            public void testRestoreSize() {
194                    // frame
195                    WindowMemento frameMemento = new WindowMemento(frame, "frame");
196    
197                    frame.setSize(800, 600);
198                    settings.setInt("frame.width", 1024);
199                    settings.setInt("frame.height", 768);
200                    frameMemento.restoreSize(settings);
201    
202                    assertEquals(1024, frame.getWidth());
203                    assertEquals(768, frame.getHeight());
204    
205                    // dialog
206                    WindowMemento dialogMemento = new WindowMemento(dialog, "dialog");
207    
208                    dialog.setSize(150, 100);
209                    settings.setInt("dialog.width", 200);
210                    settings.setInt("dialog.height", 150);
211                    dialogMemento.restoreSize(settings);
212    
213                    assertEquals(200, dialog.getWidth());
214                    assertEquals(150, dialog.getHeight());
215            }
216    
217            public void testRestoreSizeNotInSettings() {
218                    // frame
219                    WindowMemento frameMemento = new WindowMemento(frame, "frame");
220    
221                    frame.setSize(800, 600);
222                    assertFalse(settings.contains("frame.width"));
223                    assertFalse(settings.contains("frame.height"));
224                    frameMemento.restoreSize(settings);
225    
226                    assertEquals(800, frame.getWidth());
227                    assertEquals(600, frame.getHeight());
228    
229                    // dialog
230                    WindowMemento dialogMemento = new WindowMemento(dialog, "dialog");
231    
232                    dialog.setSize(150, 100);
233                    assertFalse(settings.contains("dialog.width"));
234                    assertFalse(settings.contains("dialog.height"));
235                    dialogMemento.restoreSize(settings);
236    
237                    assertEquals(150, dialog.getWidth());
238                    assertEquals(100, dialog.getHeight());
239            }
240    
241            protected Component createComponent() {
242                    return null;
243            }
244    
245            protected String getKey() {
246                    return null;
247            }
248    }