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.settings.support;
17  
18  import java.awt.Component;
19  import java.awt.Frame;
20  import java.awt.Toolkit;
21  
22  import javax.swing.JDialog;
23  import javax.swing.JFrame;
24  
25  import junit.framework.TestCase;
26  
27  import org.springframework.richclient.settings.TransientSettings;
28  
29  /**
30   * @author Peter De Bruycker
31   */
32  public class WindowMementoTests extends TestCase {
33  	private JFrame frame;
34  
35  	private JDialog dialog;
36  
37  	private TransientSettings settings;
38  
39  	protected void setUp() throws Exception {
40  		frame = new JFrame("test frame");
41  		dialog = new JDialog(frame, "test dialog");
42  		settings = new TransientSettings();
43  	}
44  
45  	public void testConstructor() {
46  		try {
47  			new WindowMemento(null);
48  			fail("Should throw IllegalArgumentException");
49  		} catch (IllegalArgumentException e) {
50  			// test passes
51  		}
52  
53  		try {
54  			frame.setName(null);
55  			new WindowMemento(frame, "");
56  			fail("Should throw IllegalArgumentException: window has no name");
57  		} catch (Exception e) {
58  			// test passes
59  		}
60  
61  		frame.setName("frame0");
62  
63  		WindowMemento memento = new WindowMemento(frame);
64  		assertEquals(frame, memento.getWindow());
65  		assertEquals("frame0", memento.getKey());
66  		
67  		memento = new WindowMemento(frame, "key");
68  		assertEquals(frame, memento.getWindow());
69  		assertEquals("key", memento.getKey());
70  	}
71  
72  	public void testSaveLocation() {
73  		// frame
74  		WindowMemento frameMemento = new WindowMemento(frame, "frame");
75  		frame.setLocation(100, 99);
76  		frameMemento.saveLocation(settings);
77  
78  		assertEquals(100, settings.getInt("frame.x"));
79  		assertEquals(99, settings.getInt("frame.y"));
80  
81  		// dialog
82  		WindowMemento dialogMemento = new WindowMemento(dialog, "dialog");
83  		dialog.setLocation(20, 15);
84  		dialogMemento.saveLocation(settings);
85  
86  		assertEquals(20, settings.getInt("dialog.x"));
87  		assertEquals(15, settings.getInt("dialog.y"));
88  	}
89  
90  	public void testRestoreLocation() {
91  		// frame
92  		WindowMemento frameMemento = new WindowMemento(frame, "frame");
93  
94  		frame.setLocation(100, 99);
95  		settings.setInt("frame.x", 15);
96  		settings.setInt("frame.y", 30);
97  		frameMemento.restoreLocation(settings);
98  
99  		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 }