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.command.config;
17  
18  import java.awt.event.KeyEvent;
19  import java.util.HashMap;
20  import java.util.Iterator;
21  import java.util.Map;
22  
23  import javax.swing.JButton;
24  import javax.swing.JMenuItem;
25  import javax.swing.KeyStroke;
26  
27  import junit.framework.Assert;
28  import junit.framework.TestCase;
29  
30  import org.springframework.richclient.core.LabelInfo;
31  
32  /**
33   * @author Peter De Bruycker
34   * @author Kevin Stembridge
35   */
36  public class CommandButtonLabelInfoTests extends TestCase {
37  
38      private LabelInfo labelInfo;
39  
40      private KeyStroke accelerator;
41      
42      private Map invalidLabelDescriptors;
43  
44      public static void pass() {
45          // test passes
46      }
47      
48      /**
49       * Creates a new {@code LabelInfoTests}.
50       */
51      public CommandButtonLabelInfoTests() {
52          this.invalidLabelDescriptors = new HashMap();
53          this.invalidLabelDescriptors.put("@", "An @ symbol must be followed by a KeyStroke.");
54          this.invalidLabelDescriptors.put("Test@Bogus", "Invalid KeyStroke format.");
55      }
56  
57      /**
58       * @see junit.framework.TestCase#setUp()
59       */
60      protected void setUp() throws Exception {
61          super.setUp();
62          labelInfo = new LabelInfo("Test", 'T', 3);
63          accelerator = KeyStroke.getKeyStroke("ctrl T");
64  
65          // make sure the keystroke did get parsed
66          assertNotNull(accelerator);
67      }
68  
69      public void testConstructorLabelInfo() {
70          CommandButtonLabelInfo info = new CommandButtonLabelInfo(labelInfo, accelerator);
71  
72          assertEquals(labelInfo.getText(), info.getText());
73          assertEquals(labelInfo.getMnemonic(), info.getMnemonic());
74          assertEquals(labelInfo.getMnemonicIndex(), info.getMnemonicIndex());
75          assertEquals(accelerator, info.getAccelerator());
76      }
77  
78      public void testConstructorLabelInfoNoAccelerator() {
79          CommandButtonLabelInfo info = new CommandButtonLabelInfo(labelInfo, null);
80  
81          assertEquals(labelInfo.getText(), info.getText());
82          assertEquals(labelInfo.getMnemonic(), info.getMnemonic());
83          assertEquals(labelInfo.getMnemonicIndex(), info.getMnemonicIndex());
84          assertNull(info.getAccelerator());
85      }
86  
87      public void testConstructorText() {
88          CommandButtonLabelInfo info = new CommandButtonLabelInfo("Test");
89  
90          assertEquals("Test", info.getText());
91          assertEquals(0, info.getMnemonic());
92          assertEquals(-1, info.getMnemonicIndex());
93          assertNull(info.getAccelerator());
94      }
95  
96      public void testConstructorNullAsLabelInfo() {
97          try {
98              new CommandButtonLabelInfo(null, accelerator);
99              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 }