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 }