| /******************************************************************************* |
| * Copyright (c) 2000, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.ui.tests.keys; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.ui.keys.KeyStroke; |
| import org.eclipse.ui.keys.ParseException; |
| import org.eclipse.ui.keys.SWTKeySupport; |
| import org.eclipse.ui.tests.harness.util.UITestCase; |
| |
| /** |
| * Test for Bug 42035. |
| * |
| * @since 3.0 |
| */ |
| public class Bug42035Test extends UITestCase { |
| |
| /** |
| * Tests the given key event to see if generates the three key strokes |
| * represented by the strings. |
| * |
| * @param keyEvent |
| * The key event to generate key strokes from; must not be |
| * <code>null</code> |
| * @param firstMatch |
| * The text format of the first match; must not be <code>null</code>. |
| * @param secondMatch |
| * The text format of the second match; must not be <code>null</code>. |
| * @param thirdMatch |
| * The text format of the third match; must not be <code>null</code>. |
| * @throws ParseException |
| * If anyone of the text formats provided cannot be parsed. |
| */ |
| private static void testKeyEvent(Event keyEvent, String firstMatch, |
| String secondMatch, String thirdMatch) throws ParseException { |
| KeyStroke desiredKeyStroke = null; |
| KeyStroke actualKeyStroke = null; |
| |
| // Test the first-level match. |
| desiredKeyStroke = KeyStroke.getInstance(firstMatch); //$NON-NLS-1$ |
| actualKeyStroke = SWTKeySupport |
| .convertAcceleratorToKeyStroke(SWTKeySupport |
| .convertEventToUnmodifiedAccelerator(keyEvent)); |
| assertEquals( |
| "Unmodified character with all modifiers doesn't match.", desiredKeyStroke, actualKeyStroke); //$NON-NLS-1$ |
| |
| // Test the second-level match. |
| desiredKeyStroke = KeyStroke.getInstance(secondMatch); //$NON-NLS-1$ |
| actualKeyStroke = SWTKeySupport |
| .convertAcceleratorToKeyStroke(SWTKeySupport |
| .convertEventToUnshiftedModifiedAccelerator(keyEvent)); |
| assertEquals( |
| "Modified character with no shift doesn't match.", desiredKeyStroke, actualKeyStroke); //$NON-NLS-1$ |
| |
| // Test the third-level match. |
| desiredKeyStroke = KeyStroke.getInstance(thirdMatch); //$NON-NLS-1$ |
| actualKeyStroke = SWTKeySupport |
| .convertAcceleratorToKeyStroke(SWTKeySupport |
| .convertEventToModifiedAccelerator(keyEvent)); |
| assertEquals( |
| "Modified character with all modifiers doesn't match.", desiredKeyStroke, actualKeyStroke); //$NON-NLS-1$ |
| } |
| |
| /** |
| * Constructs a new instance of this test case. |
| * |
| * @param testName |
| * The name of the test |
| */ |
| public Bug42035Test(String testName) { |
| super(testName); |
| } |
| |
| /** |
| * Tests that "Ctrl+" generates "Ctrl+", "Ctrl+" and "Ctrl+". |
| * |
| * @throws ParseException |
| * If "CTRL+" cannot be processed. |
| */ |
| public void testCtrl() throws ParseException { |
| Event keyEvent = new Event(); |
| keyEvent.keyCode = 0x40000; |
| keyEvent.character = 0x00; |
| keyEvent.stateMask = SWT.NONE; |
| |
| KeyStroke desiredKeyStroke = KeyStroke.getInstance("CTRL+"); //$NON-NLS-1$ |
| KeyStroke actualKeyStroke = SWTKeySupport |
| .convertAcceleratorToKeyStroke(SWTKeySupport |
| .convertEventToUnmodifiedAccelerator(keyEvent)); |
| assertEquals( |
| "Unmodified character with all modifiers doesn't match", desiredKeyStroke, actualKeyStroke); //$NON-NLS-1$ |
| } |
| |
| /** |
| * Tests that "Ctrl+Enter" generates "Ctrl+Enter", "Ctrl+Enter" and |
| * "Ctrl+Enter". |
| * |
| * @throws ParseException |
| * If "CTRL+ENTER" cannot be processed. |
| */ |
| public void testCtrlEnter() throws ParseException { |
| Event keyEvent = new Event(); |
| keyEvent.keyCode = 0x0D; |
| keyEvent.character = 0x0D; |
| keyEvent.stateMask = SWT.CTRL; |
| |
| testKeyEvent(keyEvent, "CTRL+CR", "CTRL+CR", "CTRL+CR"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ |
| } |
| |
| /** |
| * Tests that "Ctrl+J" generates "Ctrl+M", "Ctrl+M" and "Ctrl+M". |
| * |
| * @throws ParseException |
| * If "CTRL+M" cannot be processed. |
| */ |
| public void testCtrlM() throws ParseException { |
| Event keyEvent = new Event(); |
| keyEvent.keyCode = 0x6D; |
| keyEvent.character = 0x0D; |
| keyEvent.stateMask = SWT.CTRL; |
| |
| testKeyEvent(keyEvent, "CTRL+M", "CTRL+M", "CTRL+M"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ |
| } |
| |
| /** |
| * Tests that "Ctrl+Shift+2" generates "Ctrl+Shift+2", "Ctrl+@" and |
| * "Ctrl+Shift+@". This simulates a U.S. keyboard layout. |
| * |
| * @throws ParseException |
| * If "CTRL+SHIFT+2", "CTRL+@" or "CTRL+SHIFT+@" cannot be |
| * processed. |
| */ |
| public void testCtrlShift2() throws ParseException { |
| Event keyEvent = new Event(); |
| keyEvent.keyCode = '2'; |
| keyEvent.character = 0x00; |
| keyEvent.stateMask = SWT.CTRL | SWT.SHIFT; |
| |
| testKeyEvent(keyEvent, "CTRL+SHIFT+2", "CTRL+@", "CTRL+SHIFT+@"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ |
| } |
| |
| /** |
| * Tests that "Ctrl+Shift+7" generates "Ctrl+Shift+7", "Ctrl+/" and |
| * "Ctrl+Shift+/". This simulates a Swiss-German keyboard layout. |
| * |
| * @throws ParseException |
| * If "CTRL+SHIFT+7", "CTRL+/" or "CTRL+SHIFT+/" cannot be |
| * processed. |
| */ |
| public void testCtrlShift7_SwissGerman() throws ParseException { |
| Event keyEvent = new Event(); |
| keyEvent.keyCode = '7'; |
| keyEvent.character = '/'; |
| keyEvent.stateMask = SWT.CTRL | SWT.SHIFT; |
| |
| testKeyEvent(keyEvent, "CTRL+SHIFT+7", "CTRL+/", "CTRL+SHIFT+/"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ |
| } |
| |
| /** |
| * Tests that "Ctrl+Shift+7" generates "Ctrl+Shift+7", "Ctrl+&" and |
| * "Ctrl+Shift+&". This simulates a US keyboard layout. |
| * |
| * @throws ParseException |
| * If "CTRL+SHIFT+7", "CTRL+&" or "CTRL+SHIFT+&" cannot be |
| * processed. |
| */ |
| public void testCtrlShift7_US() throws ParseException { |
| Event keyEvent = new Event(); |
| keyEvent.keyCode = '7'; |
| keyEvent.character = '&'; |
| keyEvent.stateMask = SWT.CTRL | SWT.SHIFT; |
| |
| testKeyEvent(keyEvent, "CTRL+SHIFT+7", "CTRL+&", "CTRL+SHIFT+&"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ |
| } |
| } |