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.command.config; 017 018 import java.awt.event.KeyEvent; 019 import java.util.HashMap; 020 import java.util.Iterator; 021 import java.util.Map; 022 023 import javax.swing.JButton; 024 import javax.swing.JMenuItem; 025 import javax.swing.KeyStroke; 026 027 import junit.framework.Assert; 028 import junit.framework.TestCase; 029 030 import org.springframework.richclient.core.LabelInfo; 031 032 /** 033 * @author Peter De Bruycker 034 * @author Kevin Stembridge 035 */ 036 public class CommandButtonLabelInfoTests extends TestCase { 037 038 private LabelInfo labelInfo; 039 040 private KeyStroke accelerator; 041 042 private Map invalidLabelDescriptors; 043 044 public static void pass() { 045 // test passes 046 } 047 048 /** 049 * Creates a new {@code LabelInfoTests}. 050 */ 051 public CommandButtonLabelInfoTests() { 052 this.invalidLabelDescriptors = new HashMap(); 053 this.invalidLabelDescriptors.put("@", "An @ symbol must be followed by a KeyStroke."); 054 this.invalidLabelDescriptors.put("Test@Bogus", "Invalid KeyStroke format."); 055 } 056 057 /** 058 * @see junit.framework.TestCase#setUp() 059 */ 060 protected void setUp() throws Exception { 061 super.setUp(); 062 labelInfo = new LabelInfo("Test", 'T', 3); 063 accelerator = KeyStroke.getKeyStroke("ctrl T"); 064 065 // make sure the keystroke did get parsed 066 assertNotNull(accelerator); 067 } 068 069 public void testConstructorLabelInfo() { 070 CommandButtonLabelInfo info = new CommandButtonLabelInfo(labelInfo, accelerator); 071 072 assertEquals(labelInfo.getText(), info.getText()); 073 assertEquals(labelInfo.getMnemonic(), info.getMnemonic()); 074 assertEquals(labelInfo.getMnemonicIndex(), info.getMnemonicIndex()); 075 assertEquals(accelerator, info.getAccelerator()); 076 } 077 078 public void testConstructorLabelInfoNoAccelerator() { 079 CommandButtonLabelInfo info = new CommandButtonLabelInfo(labelInfo, null); 080 081 assertEquals(labelInfo.getText(), info.getText()); 082 assertEquals(labelInfo.getMnemonic(), info.getMnemonic()); 083 assertEquals(labelInfo.getMnemonicIndex(), info.getMnemonicIndex()); 084 assertNull(info.getAccelerator()); 085 } 086 087 public void testConstructorText() { 088 CommandButtonLabelInfo info = new CommandButtonLabelInfo("Test"); 089 090 assertEquals("Test", info.getText()); 091 assertEquals(0, info.getMnemonic()); 092 assertEquals(-1, info.getMnemonicIndex()); 093 assertNull(info.getAccelerator()); 094 } 095 096 public void testConstructorNullAsLabelInfo() { 097 try { 098 new CommandButtonLabelInfo(null, accelerator); 099 fail("Should throw IllegalArgumentException"); 100 } 101 catch (IllegalArgumentException e) { 102 pass(); 103 } 104 } 105 106 public void testConfigureNull() { 107 CommandButtonLabelInfo info = new CommandButtonLabelInfo("test"); 108 try { 109 info.configure(null); 110 fail("Should throw IllegalArgumentException"); 111 } 112 catch (IllegalArgumentException e) { 113 pass(); 114 } 115 } 116 117 public void testConfigureJButton() { 118 CommandButtonLabelInfo info = new CommandButtonLabelInfo(labelInfo, accelerator); 119 120 // try a button 121 JButton button = new JButton(); 122 info.configure(button); 123 124 assertEquals(info.getText(), button.getText()); 125 assertEquals(info.getMnemonic(), button.getMnemonic()); 126 assertEquals(info.getMnemonicIndex(), button.getDisplayedMnemonicIndex()); 127 } 128 129 public void testConfigureJMenuItem() { 130 CommandButtonLabelInfo info = new CommandButtonLabelInfo(labelInfo, accelerator); 131 132 // try a menu item 133 JMenuItem button = new JMenuItem(); 134 info.configure(button); 135 136 assertEquals(info.getText(), button.getText()); 137 assertEquals(info.getMnemonic(), button.getMnemonic()); 138 assertEquals(info.getMnemonicIndex(), button.getDisplayedMnemonicIndex()); 139 assertEquals(accelerator, button.getAccelerator()); 140 } 141 142 143 public void testCreateButtonLabelInfoNoAccelerator() { 144 CommandButtonLabelInfo info = CommandButtonLabelInfo.valueOf("S\\&ave with an \\@ &as"); 145 System.out.println("XXXXXXXXXXXXXXX " + info.getText()); 146 System.out.println("XXXXXXXXXXX 16th char = " + info.getText().charAt(16)); 147 assertEquals("S&ave with an @ as", info.getText()); 148 assertEquals(KeyEvent.VK_A, info.getMnemonic()); 149 assertEquals(16, info.getMnemonicIndex()); 150 assertNull(info.getAccelerator()); 151 } 152 153 public void testCreateButtonLabelInfo() { 154 CommandButtonLabelInfo info = CommandButtonLabelInfo.valueOf("S\\@ve &as@ctrl A"); 155 156 assertEquals("S@ve as", info.getText()); 157 assertEquals(KeyEvent.VK_A, info.getMnemonic()); 158 assertEquals(5, info.getMnemonicIndex()); 159 assertNotNull("ctrl A is invalid keystroke", info.getAccelerator()); 160 assertEquals(KeyStroke.getKeyStroke("ctrl A"), info.getAccelerator()); 161 } 162 163 public void testCreateButtonLabelInfoInvalidAccelerator() { 164 165 try { 166 CommandButtonLabelInfo.valueOf("Save &as@Bogus keystroke"); 167 Assert.fail("Should have thrown an IllegalArgumentException for invalid KeyStroke format"); 168 } 169 catch (IllegalArgumentException e) { 170 //do nothing, test succeeded 171 } 172 173 } 174 175 /** 176 * Confirms that exceptions are thrown for label descriptors that violate the syntax rules. 177 */ 178 public void testInvalidSyntax() { 179 180 Iterator entryIterator = this.invalidLabelDescriptors.entrySet().iterator(); 181 182 while (entryIterator.hasNext()) { 183 184 Map.Entry entry = (Map.Entry) entryIterator.next(); 185 186 try { 187 CommandButtonLabelInfo.valueOf((String) entry.getKey()); 188 Assert.fail("Should have thrown an IllegalArgumentException for label descriptor [" 189 + entry.getKey() 190 + "] due to " 191 + entry.getValue()); 192 } 193 catch (IllegalArgumentException e) { 194 //do nothing, test succeeded 195 } 196 197 } 198 199 } 200 201 }