001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of 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, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.springframework.richclient.command.config; 017 018 import java.awt.event.ActionEvent; 019 import java.beans.PropertyChangeEvent; 020 import java.beans.PropertyChangeListener; 021 022 import javax.swing.AbstractAction; 023 import javax.swing.AbstractButton; 024 import javax.swing.Action; 025 import javax.swing.Icon; 026 import javax.swing.JButton; 027 028 import junit.framework.TestCase; 029 import org.springframework.richclient.command.AbstractCommand; 030 import org.springframework.richclient.core.DescribedElement; 031 import org.springframework.richclient.image.EmptyIcon; 032 033 /** 034 * @author Peter De Bruycker 035 */ 036 public class CommandFaceDescriptorTests extends TestCase { 037 038 private CommandButtonLabelInfo buttonLabelInfo; 039 040 private CommandFaceDescriptor descriptor; 041 042 private TestPropertyChangeListener propertyChangeListener; 043 044 public void testDefaultConstructor() { 045 CommandFaceDescriptor descriptor = new CommandFaceDescriptor(); 046 047 assertEquals(CommandButtonLabelInfo.BLANK_BUTTON_LABEL, descriptor.getLabelInfo()); 048 assertTrue(descriptor.isBlank()); 049 assertEquals(CommandButtonLabelInfo.BLANK_BUTTON_LABEL.getText(), descriptor.getText()); 050 assertNull(descriptor.getDescription()); 051 assertEquals(CommandButtonIconInfo.BLANK_ICON_INFO, descriptor.getIconInfo()); 052 assertNull(descriptor.getCaption()); 053 } 054 055 public void testConstructorWithNullButtonLabelInfo() { 056 try { 057 new CommandFaceDescriptor((CommandButtonLabelInfo)null); 058 fail("Should throw IllegalArgumentException"); 059 } 060 catch (IllegalArgumentException e) { 061 pass(); 062 } 063 } 064 065 public void testConstructorWithEncodedLabel() { 066 CommandFaceDescriptor descriptor = new CommandFaceDescriptor("&Test@ctrl T"); 067 assertEquals("Test", descriptor.getText()); 068 assertFalse(CommandButtonLabelInfo.BLANK_BUTTON_LABEL.equals(descriptor.getLabelInfo())); 069 assertFalse(descriptor.isBlank()); 070 assertNull(descriptor.getDescription()); 071 assertNull(descriptor.getCaption()); 072 assertEquals(CommandButtonIconInfo.BLANK_ICON_INFO, descriptor.getIconInfo()); 073 } 074 075 public void testConstructorWithEmptyEncodedLabel() { 076 CommandFaceDescriptor descriptor = new CommandFaceDescriptor(""); 077 assertEquals(CommandButtonLabelInfo.BLANK_BUTTON_LABEL, descriptor.getLabelInfo()); 078 } 079 080 public void testConstructorWithEncodedLabelAndIcon() { 081 CommandFaceDescriptor descriptor = new CommandFaceDescriptor("&Test@ctrl T", EmptyIcon.SMALL, "caption"); 082 083 assertEquals("Test", descriptor.getText()); 084 assertFalse(CommandButtonLabelInfo.BLANK_BUTTON_LABEL.equals(descriptor.getLabelInfo())); 085 assertFalse(descriptor.isBlank()); 086 assertNull(descriptor.getDescription()); 087 assertEquals("caption", descriptor.getCaption()); 088 assertFalse(CommandButtonIconInfo.BLANK_ICON_INFO.equals(descriptor.getIconInfo())); 089 assertEquals(EmptyIcon.SMALL, descriptor.getIconInfo().getIcon()); 090 } 091 092 public void testSetDescription() { 093 CommandFaceDescriptor descriptor = new CommandFaceDescriptor("&Test@ctrl T", EmptyIcon.SMALL, "caption"); 094 descriptor.setDescription("Long description"); 095 096 assertEquals("Long description", descriptor.getDescription()); 097 } 098 099 public void testSetCaption() { 100 descriptor.setCaption("new caption"); 101 assertTrue(propertyChangeListener.changed); 102 assertEquals(descriptor, propertyChangeListener.source); 103 assertEquals("caption", propertyChangeListener.oldValue); 104 assertEquals("new caption", propertyChangeListener.newValue); 105 assertEquals(DescribedElement.CAPTION_PROPERTY, propertyChangeListener.propertyName); 106 107 propertyChangeListener.reset(); 108 109 // caption not changed 110 descriptor.setCaption("new caption"); 111 assertFalse(propertyChangeListener.changed); 112 } 113 114 public void testSetIconNull() { 115 descriptor.setIcon(null); 116 assertNull(descriptor.getIconInfo().getIcon()); 117 118 descriptor.setIconInfo(CommandButtonIconInfo.BLANK_ICON_INFO); 119 descriptor.setIcon(null); 120 assertEquals(CommandButtonIconInfo.BLANK_ICON_INFO, descriptor.getIconInfo()); 121 } 122 123 public void testSetIcon() { 124 Icon oldIcon = descriptor.getIcon(); 125 descriptor.setIcon(EmptyIcon.LARGE); 126 assertEquals(EmptyIcon.LARGE, descriptor.getIcon()); 127 128 assertTrue(propertyChangeListener.changed); 129 assertEquals(descriptor, propertyChangeListener.source); 130 assertEquals(oldIcon, propertyChangeListener.oldValue); 131 assertEquals(descriptor.getIcon(), propertyChangeListener.newValue); 132 assertEquals(CommandFaceDescriptor.ICON_PROPERTY, propertyChangeListener.propertyName); 133 134 propertyChangeListener.reset(); 135 // no change 136 descriptor.setIcon(EmptyIcon.LARGE); 137 assertFalse(propertyChangeListener.changed); 138 } 139 140 public void testSetLargeIconNull() { 141 descriptor.setLargeIcon(null); 142 assertNull(descriptor.getLargeIconInfo().getIcon()); 143 144 descriptor.setLargeIconInfo(CommandButtonIconInfo.BLANK_ICON_INFO); 145 descriptor.setLargeIcon(null); 146 assertEquals(CommandButtonIconInfo.BLANK_ICON_INFO, descriptor.getLargeIconInfo()); 147 } 148 149 public void testSetLargeIcon() { 150 Icon oldIcon = descriptor.getLargeIcon(); 151 descriptor.setLargeIcon(EmptyIcon.LARGE); 152 assertEquals(EmptyIcon.LARGE, descriptor.getLargeIcon()); 153 154 assertTrue(propertyChangeListener.changed); 155 assertEquals(descriptor, propertyChangeListener.source); 156 assertEquals(oldIcon, propertyChangeListener.oldValue); 157 assertEquals(descriptor.getLargeIcon(), propertyChangeListener.newValue); 158 assertEquals(CommandFaceDescriptor.LARGE_ICON_PROPERTY, propertyChangeListener.propertyName); 159 160 propertyChangeListener.reset(); 161 // no change 162 descriptor.setLargeIcon(EmptyIcon.LARGE); 163 assertFalse(propertyChangeListener.changed); 164 } 165 166 public void testSetNullIconInfo() { 167 descriptor.setIconInfo(null); 168 assertEquals(CommandButtonIconInfo.BLANK_ICON_INFO, descriptor.getIconInfo()); 169 } 170 171 public void testSetNullLabelInfo() { 172 descriptor.setLabelInfo(null); 173 assertEquals(CommandButtonLabelInfo.BLANK_BUTTON_LABEL, descriptor.getLabelInfo()); 174 } 175 176 public void testConfigureWithConfigurer() { 177 JButton button = new JButton(); 178 TestCommandButtonConfigurer configurer = new TestCommandButtonConfigurer(); 179 descriptor.configure(button, null, configurer); 180 assertEquals(button, configurer.button); 181 assertEquals(descriptor, configurer.face); 182 } 183 184 public void testConfigureWithNullConfigurerAndNullButton() { 185 try { 186 descriptor.configure(new JButton(), null, null); 187 fail("Should throw IllegalArgumentException"); 188 } 189 catch (IllegalArgumentException e) { 190 pass(); 191 } 192 try { 193 descriptor.configure(null, null, new TestCommandButtonConfigurer()); 194 fail("Should throw IllegalArgumentException"); 195 } 196 catch (IllegalArgumentException e) { 197 pass(); 198 } 199 } 200 201 private static class TestCommandButtonConfigurer extends DefaultCommandButtonConfigurer implements 202 CommandButtonConfigurer { 203 private CommandFaceDescriptor face; 204 205 private AbstractButton button; 206 207 public void configure(AbstractButton button, AbstractCommand command, CommandFaceDescriptor faceDescriptor) { 208 super.configure(button, command, faceDescriptor); 209 this.face = faceDescriptor; 210 this.button = button; 211 } 212 } 213 214 public void testSetLabelInfoAsText() { 215 CommandButtonLabelInfo oldLabelInfo = descriptor.getLabelInfo(); 216 descriptor.setButtonLabelInfo("&Other Test@ctrl O"); 217 CommandButtonLabelInfo newLabelInfo = descriptor.getLabelInfo(); 218 assertEquals(CommandButtonLabelInfo.valueOf("&Other Test@ctrl O"), newLabelInfo); 219 220 assertTrue(propertyChangeListener.changed); 221 assertEquals(descriptor, propertyChangeListener.source); 222 assertEquals(oldLabelInfo, propertyChangeListener.oldValue); 223 assertEquals(newLabelInfo, propertyChangeListener.newValue); 224 assertEquals(CommandFaceDescriptor.LABEL_INFO_PROPERTY, propertyChangeListener.propertyName); 225 226 propertyChangeListener.reset(); 227 // no change 228 descriptor.setButtonLabelInfo("&Other Test@ctrl O"); 229 assertFalse(propertyChangeListener.changed); 230 } 231 232 public void testSetLabelInfo() { 233 CommandButtonLabelInfo oldLabelInfo = descriptor.getLabelInfo(); 234 CommandButtonLabelInfo newLabelInfo = CommandButtonLabelInfo.valueOf("&Other Test@ctrl O"); 235 descriptor.setLabelInfo(newLabelInfo); 236 assertEquals(newLabelInfo, descriptor.getLabelInfo()); 237 238 assertTrue(propertyChangeListener.changed); 239 assertEquals(descriptor, propertyChangeListener.source); 240 assertEquals(oldLabelInfo, propertyChangeListener.oldValue); 241 assertEquals(newLabelInfo, propertyChangeListener.newValue); 242 assertEquals(CommandFaceDescriptor.LABEL_INFO_PROPERTY, propertyChangeListener.propertyName); 243 244 propertyChangeListener.reset(); 245 // no change 246 descriptor.setButtonLabelInfo("&Other Test@ctrl O"); 247 assertFalse(propertyChangeListener.changed); 248 } 249 250 public void testConfigureNullAction() { 251 try { 252 descriptor.configure(null); 253 fail("Should throw IllegalArgumentException"); 254 } 255 catch (IllegalArgumentException e) { 256 pass(); 257 } 258 } 259 260 public void testConfigure() { 261 Action action = new AbstractAction() { 262 public void actionPerformed(ActionEvent arg0) { 263 } 264 }; 265 266 descriptor.configure(action); 267 assertEquals("name", descriptor.getLabelInfo().getText(), action.getValue(Action.NAME)); 268 assertEquals("mnemonic", new Integer(descriptor.getLabelInfo().getMnemonic()), action 269 .getValue(Action.MNEMONIC_KEY)); 270 assertEquals("accelerator", descriptor.getLabelInfo().getAccelerator(), action 271 .getValue(Action.ACCELERATOR_KEY)); 272 assertEquals("icon", descriptor.getIconInfo().getIcon(), action.getValue(Action.SMALL_ICON)); 273 assertEquals("caption", descriptor.getCaption(), action.getValue(Action.SHORT_DESCRIPTION)); 274 assertEquals("description", descriptor.getDescription(), action.getValue(Action.LONG_DESCRIPTION)); 275 } 276 277 public void testSetIconInfo() { 278 CommandButtonIconInfo oldIconInfo = descriptor.getIconInfo(); 279 CommandButtonIconInfo newIconInfo = new CommandButtonIconInfo(EmptyIcon.LARGE); 280 descriptor.setIconInfo(newIconInfo); 281 assertEquals(newIconInfo, descriptor.getIconInfo()); 282 283 assertTrue(propertyChangeListener.changed); 284 assertEquals(descriptor, propertyChangeListener.source); 285 assertEquals(oldIconInfo, propertyChangeListener.oldValue); 286 assertEquals(newIconInfo, propertyChangeListener.newValue); 287 assertEquals(CommandFaceDescriptor.ICON_INFO_PROPERTY, propertyChangeListener.propertyName); 288 289 propertyChangeListener.reset(); 290 // no change 291 descriptor.setIconInfo(newIconInfo); 292 assertFalse(propertyChangeListener.changed); 293 } 294 295 public void testSetLargeIconInfo() { 296 CommandButtonIconInfo oldIconInfo = descriptor.getLargeIconInfo(); 297 CommandButtonIconInfo newIconInfo = new CommandButtonIconInfo(EmptyIcon.LARGE); 298 descriptor.setLargeIconInfo(newIconInfo); 299 assertEquals(newIconInfo, descriptor.getLargeIconInfo()); 300 301 assertTrue(propertyChangeListener.changed); 302 assertEquals(descriptor, propertyChangeListener.source); 303 assertEquals(oldIconInfo, propertyChangeListener.oldValue); 304 assertEquals(newIconInfo, propertyChangeListener.newValue); 305 assertEquals(CommandFaceDescriptor.LARGE_ICON_INFO_PROPERTY, propertyChangeListener.propertyName); 306 307 propertyChangeListener.reset(); 308 // no change 309 descriptor.setLargeIconInfo(newIconInfo); 310 assertFalse(propertyChangeListener.changed); 311 } 312 313 private static class TestPropertyChangeListener implements PropertyChangeListener { 314 315 private boolean changed = false; 316 317 private String propertyName; 318 319 private Object newValue; 320 321 private Object oldValue; 322 323 private Object source; 324 325 /* 326 * (non-Javadoc) 327 * 328 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) 329 */ 330 public void propertyChange(PropertyChangeEvent e) { 331 changed = true; 332 propertyName = e.getPropertyName(); 333 newValue = e.getNewValue(); 334 oldValue = e.getOldValue(); 335 source = e.getSource(); 336 } 337 338 /** 339 * 340 */ 341 public void reset() { 342 changed = false; 343 propertyName = null; 344 newValue = null; 345 oldValue = null; 346 source = null; 347 } 348 349 } 350 351 private static void pass() { 352 // test passes 353 } 354 355 public void testConstructorWithButtonLabelInfo() { 356 CommandFaceDescriptor descriptor = new CommandFaceDescriptor(buttonLabelInfo); 357 358 assertEquals(buttonLabelInfo, descriptor.getLabelInfo()); 359 assertFalse(descriptor.isBlank()); 360 assertEquals("Test", descriptor.getText()); 361 assertNull(descriptor.getDescription()); 362 assertEquals(CommandButtonIconInfo.BLANK_ICON_INFO, descriptor.getIconInfo()); 363 assertNull(descriptor.getCaption()); 364 } 365 366 /** 367 * @see junit.framework.TestCase#setUp() 368 */ 369 protected void setUp() throws Exception { 370 buttonLabelInfo = CommandButtonLabelInfo.valueOf("&Test@ctrl T"); 371 descriptor = new CommandFaceDescriptor("&Test@ctrl T", EmptyIcon.SMALL, "caption"); 372 descriptor.setDescription("long description"); 373 assertNotNull(descriptor.getLabelInfo().getAccelerator()); 374 propertyChangeListener = new TestPropertyChangeListener(); 375 descriptor.addPropertyChangeListener(propertyChangeListener); 376 } 377 378 }