1 /* 2 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 @test 26 @bug 8149456 8147834 8150230 8155740 27 @requires os.family == "mac" 28 @summary Tests key codes for all keys supported in Java for Mac OS X. 29 @run main AllKeyCode 30 */ 31 32 import java.awt.AWTException; 33 import java.awt.Robot; 34 import java.awt.event.KeyEvent; 35 import java.awt.event.KeyListener; 36 import java.awt.Frame; 37 import java.awt.TextArea; 38 39 public class AllKeyCode extends Frame { 40 41 private static Frame frame; 42 private static TextArea textArea; 43 private static KeyListener keyListener; 44 private static int allKeyArr[]; 45 private static int keyPressedIndex; 46 47 AllKeyCode() { 48 AllKeyCode.allKeyArr = new int[] { 49 KeyEvent.VK_BACK_SPACE, 50 KeyEvent.VK_TAB, 51 KeyEvent.VK_ENTER, 52 KeyEvent.VK_CLEAR, 53 KeyEvent.VK_SHIFT, 54 KeyEvent.VK_CONTROL, 55 KeyEvent.VK_ALT, 56 KeyEvent.VK_CAPS_LOCK, 57 KeyEvent.VK_ESCAPE, 58 KeyEvent.VK_SPACE, 59 KeyEvent.VK_PAGE_UP, 60 KeyEvent.VK_PAGE_DOWN, 61 KeyEvent.VK_END, 62 KeyEvent.VK_HOME, 63 KeyEvent.VK_LEFT, 64 KeyEvent.VK_UP, 65 KeyEvent.VK_RIGHT, 66 KeyEvent.VK_DOWN, 67 KeyEvent.VK_COMMA, 68 KeyEvent.VK_MINUS, 69 KeyEvent.VK_PERIOD, 70 KeyEvent.VK_SLASH, 71 KeyEvent.VK_0, 72 KeyEvent.VK_1, 73 KeyEvent.VK_2, 74 KeyEvent.VK_3, 75 KeyEvent.VK_4, 76 KeyEvent.VK_5, 77 KeyEvent.VK_6, 78 KeyEvent.VK_7, 79 KeyEvent.VK_8, 80 KeyEvent.VK_9, 81 KeyEvent.VK_SEMICOLON, 82 KeyEvent.VK_EQUALS, 83 KeyEvent.VK_A, 84 KeyEvent.VK_B, 85 KeyEvent.VK_C, 86 KeyEvent.VK_D, 87 KeyEvent.VK_E, 88 KeyEvent.VK_F, 89 KeyEvent.VK_G, 90 KeyEvent.VK_H, 91 KeyEvent.VK_I, 92 KeyEvent.VK_J, 93 KeyEvent.VK_K, 94 KeyEvent.VK_L, 95 KeyEvent.VK_M, 96 KeyEvent.VK_N, 97 KeyEvent.VK_O, 98 KeyEvent.VK_P, 99 KeyEvent.VK_Q, 100 KeyEvent.VK_R, 101 KeyEvent.VK_S, 102 KeyEvent.VK_T, 103 KeyEvent.VK_U, 104 KeyEvent.VK_V, 105 KeyEvent.VK_W, 106 KeyEvent.VK_X, 107 KeyEvent.VK_Y, 108 KeyEvent.VK_Z, 109 KeyEvent.VK_OPEN_BRACKET, 110 KeyEvent.VK_BACK_SLASH, 111 KeyEvent.VK_CLOSE_BRACKET, 112 KeyEvent.VK_NUMPAD0, 113 KeyEvent.VK_NUMPAD1, 114 KeyEvent.VK_NUMPAD2, 115 KeyEvent.VK_NUMPAD3, 116 KeyEvent.VK_NUMPAD4, 117 KeyEvent.VK_NUMPAD5, 118 KeyEvent.VK_NUMPAD6, 119 KeyEvent.VK_NUMPAD7, 120 KeyEvent.VK_NUMPAD8, 121 KeyEvent.VK_NUMPAD9, 122 KeyEvent.VK_MULTIPLY, 123 KeyEvent.VK_ADD, 124 KeyEvent.VK_SUBTRACT, 125 KeyEvent.VK_DECIMAL, 126 KeyEvent.VK_DIVIDE, 127 KeyEvent.VK_F1, 128 KeyEvent.VK_F2, 129 KeyEvent.VK_F3, 130 KeyEvent.VK_F4, 131 KeyEvent.VK_F5, 132 KeyEvent.VK_F6, 133 KeyEvent.VK_F7, 134 KeyEvent.VK_F8, 135 KeyEvent.VK_F9, 136 KeyEvent.VK_F10, 137 KeyEvent.VK_F11, 138 KeyEvent.VK_F12, 139 KeyEvent.VK_DELETE, 140 KeyEvent.VK_HELP, 141 KeyEvent.VK_META, 142 KeyEvent.VK_BACK_QUOTE, 143 KeyEvent.VK_QUOTE, 144 KeyEvent.VK_F13, 145 KeyEvent.VK_F14, 146 KeyEvent.VK_F15, 147 KeyEvent.VK_F16, 148 KeyEvent.VK_F17, 149 KeyEvent.VK_F18, 150 KeyEvent.VK_F19, 151 KeyEvent.VK_F20, 152 KeyEvent.VK_ALT_GRAPH 153 }; 154 155 keyPressedIndex = -1; 156 } 157 158 private void createAndShowGUI() { 159 frame = new Frame("Function Key Keycodes"); 160 textArea = new TextArea(); 161 textArea.setFocusable(true); 162 frame.add(textArea); 163 frame.pack(); 164 frame.setSize(200, 200); 165 166 textArea.addKeyListener(keyListener = new KeyListener() { 167 168 @Override 169 public void keyTyped(KeyEvent ke) { 170 } 171 172 @Override 173 public void keyPressed(KeyEvent ke) { 174 if (allKeyArr[keyPressedIndex] != ke.getKeyCode()) { 175 throw new RuntimeException("Wrong keycode received"); 176 } 177 } 178 179 @Override 180 public void keyReleased(KeyEvent ke) { 181 } 182 }); 183 frame.setVisible(true); 184 } 185 186 private void removeListener() { 187 if (keyListener != null) { 188 textArea.removeKeyListener(keyListener); 189 keyListener = null; 190 } 191 } 192 193 @Override 194 public void dispose() { 195 if (null != frame) { 196 frame.dispose(); 197 frame = null; 198 } 199 } 200 201 public void generateFunctionKeyPress() { 202 try { 203 Robot robot = new Robot(); 204 robot.waitForIdle(); 205 206 for (int i = 0; i < allKeyArr.length; i++) { 207 keyPressedIndex = i; 208 robot.keyPress(allKeyArr[i]); 209 robot.keyRelease(allKeyArr[i]); 210 robot.waitForIdle(); 211 } 212 removeListener(); 213 214 } catch (AWTException e) { 215 throw new RuntimeException("Robot creation failed"); 216 } 217 } 218 219 public static void main(String args[]) { 220 AllKeyCode allKeyObj = new AllKeyCode(); 221 allKeyObj.createAndShowGUI(); 222 allKeyObj.generateFunctionKeyPress(); 223 allKeyObj.dispose(); 224 225 System.out.println("Test Passed"); 226 } 227 }