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 }