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 }