| /* | |
| * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. | |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| * | |
| * This code is free software; you can redistribute it and/or modify it | |
| * under the terms of the GNU General Public License version 2 only, as | |
| * published by the Free Software Foundation. | |
| * | |
| * This code is distributed in the hope that it will be useful, but WITHOUT | |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| * version 2 for more details (a copy is included in the LICENSE file that | |
| * accompanied this code). | |
| * | |
| * You should have received a copy of the GNU General Public License version | |
| * 2 along with this work; if not, write to the Free Software Foundation, | |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| * | |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| * or visit www.oracle.com if you need additional information or have any | |
| * questions. | |
| */ | |
| /* | |
| @test | |
| @bug 4370733 | |
| @summary AWTKeyStroke's getAWTKeyStroke(String) and toString() method aren't symmetric | |
| */ | |
| import java.awt.AWTKeyStroke; | |
| import java.awt.event.InputEvent; | |
| import java.awt.event.KeyEvent; | |
| import javax.swing.KeyStroke; | |
| public class ToStringTest { | |
| /* Note this test is deliberately testing the deprecated constants | |
| * as well as their replacements. | |
| */ | |
| @SuppressWarnings("deprecation") | |
| public static final int[] modifiers = { | |
| 0, | |
| InputEvent.SHIFT_MASK, | |
| InputEvent.CTRL_MASK, | |
| InputEvent.META_MASK, | |
| InputEvent.ALT_MASK, | |
| InputEvent.ALT_GRAPH_MASK, | |
| InputEvent.BUTTON1_MASK, | |
| InputEvent.BUTTON2_MASK, | |
| InputEvent.BUTTON3_MASK, | |
| InputEvent.SHIFT_DOWN_MASK, | |
| InputEvent.CTRL_DOWN_MASK, | |
| InputEvent.META_DOWN_MASK, | |
| InputEvent.ALT_DOWN_MASK, | |
| InputEvent.BUTTON1_DOWN_MASK, | |
| InputEvent.BUTTON2_DOWN_MASK, | |
| InputEvent.BUTTON3_DOWN_MASK, | |
| InputEvent.ALT_GRAPH_DOWN_MASK | |
| }; | |
| public static final int[] keys = { | |
| KeyEvent.VK_A, | |
| KeyEvent.VK_B, | |
| KeyEvent.VK_C, | |
| KeyEvent.VK_D, | |
| KeyEvent.VK_E, | |
| KeyEvent.VK_F, | |
| KeyEvent.VK_G, | |
| KeyEvent.VK_H, | |
| KeyEvent.VK_I, | |
| KeyEvent.VK_J, | |
| KeyEvent.VK_K, | |
| KeyEvent.VK_L, | |
| KeyEvent.VK_M, | |
| KeyEvent.VK_N, | |
| KeyEvent.VK_O, | |
| KeyEvent.VK_P, | |
| KeyEvent.VK_Q, | |
| KeyEvent.VK_R, | |
| KeyEvent.VK_S, | |
| KeyEvent.VK_T, | |
| KeyEvent.VK_U, | |
| KeyEvent.VK_V, | |
| KeyEvent.VK_W, | |
| KeyEvent.VK_X, | |
| KeyEvent.VK_Y, | |
| KeyEvent.VK_Z, | |
| KeyEvent.VK_0, | |
| KeyEvent.VK_1, | |
| KeyEvent.VK_2, | |
| KeyEvent.VK_3, | |
| KeyEvent.VK_4, | |
| KeyEvent.VK_5, | |
| KeyEvent.VK_6, | |
| KeyEvent.VK_7, | |
| KeyEvent.VK_8, | |
| KeyEvent.VK_9, | |
| KeyEvent.VK_COMMA, | |
| KeyEvent.VK_PERIOD, | |
| KeyEvent.VK_SLASH, | |
| KeyEvent.VK_SEMICOLON, | |
| KeyEvent.VK_EQUALS, | |
| KeyEvent.VK_OPEN_BRACKET, | |
| KeyEvent.VK_BACK_SLASH, | |
| KeyEvent.VK_CLOSE_BRACKET, | |
| KeyEvent.VK_ENTER, | |
| KeyEvent.VK_BACK_SPACE, | |
| KeyEvent.VK_TAB, | |
| KeyEvent.VK_CANCEL, | |
| KeyEvent.VK_CLEAR, | |
| KeyEvent.VK_SHIFT, | |
| KeyEvent.VK_CONTROL, | |
| KeyEvent.VK_ALT, | |
| KeyEvent.VK_PAUSE, | |
| KeyEvent.VK_CAPS_LOCK, | |
| KeyEvent.VK_ESCAPE, | |
| KeyEvent.VK_SPACE, | |
| KeyEvent.VK_PAGE_UP, | |
| KeyEvent.VK_PAGE_DOWN, | |
| KeyEvent.VK_END, | |
| KeyEvent.VK_HOME, | |
| KeyEvent.VK_LEFT, | |
| KeyEvent.VK_UP, | |
| KeyEvent.VK_RIGHT, | |
| KeyEvent.VK_DOWN, | |
| KeyEvent.VK_ADD, | |
| KeyEvent.VK_SEPARATOR, | |
| KeyEvent.VK_SUBTRACT, | |
| KeyEvent.VK_DECIMAL, | |
| KeyEvent.VK_DIVIDE, | |
| KeyEvent.VK_DELETE, | |
| KeyEvent.VK_NUM_LOCK, | |
| KeyEvent.VK_SCROLL_LOCK, | |
| KeyEvent.VK_WINDOWS, | |
| KeyEvent.VK_CONTEXT_MENU, | |
| KeyEvent.VK_F1, | |
| KeyEvent.VK_F2, | |
| KeyEvent.VK_F3, | |
| KeyEvent.VK_F4, | |
| KeyEvent.VK_F5, | |
| KeyEvent.VK_F6, | |
| KeyEvent.VK_F7, | |
| KeyEvent.VK_F8, | |
| KeyEvent.VK_F9, | |
| KeyEvent.VK_F10, | |
| KeyEvent.VK_F11, | |
| KeyEvent.VK_F12, | |
| KeyEvent.VK_F13, | |
| KeyEvent.VK_F14, | |
| KeyEvent.VK_F15, | |
| KeyEvent.VK_F16, | |
| KeyEvent.VK_F17, | |
| KeyEvent.VK_F18, | |
| KeyEvent.VK_F19, | |
| KeyEvent.VK_F20, | |
| KeyEvent.VK_F21, | |
| KeyEvent.VK_F22, | |
| KeyEvent.VK_F23, | |
| KeyEvent.VK_F24, | |
| KeyEvent.VK_PRINTSCREEN, | |
| KeyEvent.VK_INSERT, | |
| KeyEvent.VK_HELP, | |
| KeyEvent.VK_META, | |
| KeyEvent.VK_BACK_QUOTE, | |
| KeyEvent.VK_QUOTE, | |
| KeyEvent.VK_KP_UP, | |
| KeyEvent.VK_KP_DOWN, | |
| KeyEvent.VK_KP_LEFT, | |
| KeyEvent.VK_KP_RIGHT, | |
| KeyEvent.VK_DEAD_GRAVE, | |
| KeyEvent.VK_DEAD_ACUTE, | |
| KeyEvent.VK_DEAD_CIRCUMFLEX, | |
| KeyEvent.VK_DEAD_TILDE, | |
| KeyEvent.VK_DEAD_MACRON, | |
| KeyEvent.VK_DEAD_BREVE, | |
| KeyEvent.VK_DEAD_ABOVEDOT, | |
| KeyEvent.VK_DEAD_DIAERESIS, | |
| KeyEvent.VK_DEAD_ABOVERING, | |
| KeyEvent.VK_DEAD_DOUBLEACUTE, | |
| KeyEvent.VK_DEAD_CARON, | |
| KeyEvent.VK_DEAD_CEDILLA, | |
| KeyEvent.VK_DEAD_OGONEK, | |
| KeyEvent.VK_DEAD_IOTA, | |
| KeyEvent.VK_DEAD_VOICED_SOUND, | |
| KeyEvent.VK_DEAD_SEMIVOICED_SOUND, | |
| KeyEvent.VK_AMPERSAND, | |
| KeyEvent.VK_ASTERISK, | |
| KeyEvent.VK_QUOTEDBL, | |
| KeyEvent.VK_LESS, | |
| KeyEvent.VK_GREATER, | |
| KeyEvent.VK_BRACELEFT, | |
| KeyEvent.VK_BRACERIGHT, | |
| KeyEvent.VK_AT, | |
| KeyEvent.VK_COLON, | |
| KeyEvent.VK_CIRCUMFLEX, | |
| KeyEvent.VK_DOLLAR, | |
| KeyEvent.VK_EURO_SIGN, | |
| KeyEvent.VK_EXCLAMATION_MARK, | |
| KeyEvent.VK_INVERTED_EXCLAMATION_MARK, | |
| KeyEvent.VK_LEFT_PARENTHESIS, | |
| KeyEvent.VK_NUMBER_SIGN, | |
| KeyEvent.VK_MINUS, | |
| KeyEvent.VK_PLUS, | |
| KeyEvent.VK_RIGHT_PARENTHESIS, | |
| KeyEvent.VK_UNDERSCORE, | |
| KeyEvent.VK_FINAL, | |
| KeyEvent.VK_CONVERT, | |
| KeyEvent.VK_NONCONVERT, | |
| KeyEvent.VK_ACCEPT, | |
| KeyEvent.VK_MODECHANGE, | |
| KeyEvent.VK_KANA, | |
| KeyEvent.VK_KANJI, | |
| KeyEvent.VK_ALPHANUMERIC, | |
| KeyEvent.VK_KATAKANA, | |
| KeyEvent.VK_HIRAGANA, | |
| KeyEvent.VK_FULL_WIDTH, | |
| KeyEvent.VK_HALF_WIDTH, | |
| KeyEvent.VK_ROMAN_CHARACTERS, | |
| KeyEvent.VK_ALL_CANDIDATES, | |
| KeyEvent.VK_PREVIOUS_CANDIDATE, | |
| KeyEvent.VK_CODE_INPUT, | |
| KeyEvent.VK_JAPANESE_KATAKANA, | |
| KeyEvent.VK_JAPANESE_HIRAGANA, | |
| KeyEvent.VK_JAPANESE_ROMAN, | |
| KeyEvent.VK_KANA_LOCK, | |
| KeyEvent.VK_INPUT_METHOD_ON_OFF, | |
| KeyEvent.VK_AGAIN, | |
| KeyEvent.VK_UNDO, | |
| KeyEvent.VK_COPY, | |
| KeyEvent.VK_PASTE, | |
| KeyEvent.VK_CUT, | |
| KeyEvent.VK_FIND, | |
| KeyEvent.VK_PROPS, | |
| KeyEvent.VK_STOP, | |
| KeyEvent.VK_COMPOSE, | |
| KeyEvent.VK_ALT_GRAPH, | |
| KeyEvent.VK_BEGIN, | |
| KeyEvent.VK_NUMPAD0, | |
| KeyEvent.VK_NUMPAD1, | |
| KeyEvent.VK_NUMPAD2, | |
| KeyEvent.VK_NUMPAD3, | |
| KeyEvent.VK_NUMPAD4, | |
| KeyEvent.VK_NUMPAD5, | |
| KeyEvent.VK_NUMPAD6, | |
| KeyEvent.VK_NUMPAD7, | |
| KeyEvent.VK_NUMPAD8, | |
| KeyEvent.VK_NUMPAD9 | |
| }; | |
| public static void main(String[] args) throws Exception { | |
| System.err.println("**** Testing AWTKeyStrokes"); | |
| for (int n_key=0; n_key < keys.length; n_key++) { | |
| for (int n_mod=0; n_mod < modifiers.length; n_mod++) { | |
| checkStroke(AWTKeyStroke.getAWTKeyStroke(keys[n_key], | |
| modifiers[n_mod], | |
| true)); | |
| checkStroke(AWTKeyStroke.getAWTKeyStroke(keys[n_key], | |
| modifiers[n_mod], | |
| false)); | |
| } | |
| } | |
| System.err.println("**** Testing Swing KeyStrokes"); | |
| for (int n_key=0; n_key < keys.length; n_key++) { | |
| for (int n_mod=0; n_mod < modifiers.length; n_mod++) { | |
| checkStroke(KeyStroke.getKeyStroke(keys[n_key], | |
| modifiers[n_mod], | |
| true)); | |
| checkStroke(KeyStroke.getKeyStroke(keys[n_key], | |
| modifiers[n_mod], | |
| false)); | |
| } | |
| } | |
| Character a = Character.valueOf('a'); | |
| System.err.println("**** Testing KEY_TYPED AWTKeyStrokes"); | |
| for (int n_mod = 0; n_mod < modifiers.length; n_mod++) { | |
| checkStroke(AWTKeyStroke.getAWTKeyStroke(a, modifiers[n_mod])); | |
| } | |
| System.err.println("**** Testing KEY_TYPED Swing KeyStrokes"); | |
| for (int n_mod = 0; n_mod < modifiers.length; n_mod++) { | |
| checkStroke(KeyStroke.getKeyStroke(a, modifiers[n_mod])); | |
| } | |
| System.out.println("Test passed."); | |
| } | |
| public static void checkStroke(AWTKeyStroke original) { | |
| System.err.println("AWT Original >> " + original); | |
| AWTKeyStroke copy = AWTKeyStroke.getAWTKeyStroke(original.toString()); | |
| // System.err.println("AWT Copy >> " + copy); | |
| if (!original.equals(copy)) { | |
| System.out.println("AWT bad copy for VK= 0x" + | |
| Integer.toString(original.getKeyCode(), 16)); | |
| throw new RuntimeException("Test Failed: for " + original); | |
| } | |
| } | |
| public static void checkStroke(KeyStroke original) { | |
| System.err.println("Swing Original >> " + original); | |
| KeyStroke copy = KeyStroke.getKeyStroke(original.toString()); | |
| // System.err.println("Swing Copy >> " + copy); | |
| if (!original.equals(copy)) { | |
| System.out.println("Swing bad copy for VK= 0x" + | |
| Integer.toString(original.getKeyCode(), 16)); | |
| throw new RuntimeException("Test Failed: for " + original); | |
| } | |
| } | |
| } |