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 27 @requires os.family == "mac" 28 @summary KeyEvents for all keys 29 @run main AllKeyCode 30 */ 31 32 import java.awt.AWTException; 33 import java.awt.GridBagLayout; 34 import java.awt.Robot; 35 import java.awt.event.KeyEvent; 36 import java.awt.event.KeyListener; 37 import java.awt.Frame; 38 import java.awt.TextArea; 39 40 public class AllKeyCode extends Frame { 41 42 private static Frame frame; 43 private static TextArea textArea; 44 private static KeyListener keyListener; 45 private static int allKeyArr[]; 46 private static int keyPressedIndex; 47 48 AllKeyCode() { 49 AllKeyCode.allKeyArr = new int[] { 50 KeyEvent.VK_BACK_SPACE, 51 KeyEvent.VK_TAB, 52 KeyEvent.VK_ENTER, 53 KeyEvent.VK_CLEAR, 54 KeyEvent.VK_SHIFT, 55 KeyEvent.VK_CONTROL, 56 KeyEvent.VK_ALT, 57 KeyEvent.VK_CAPS_LOCK, 58 KeyEvent.VK_ESCAPE, 59 KeyEvent.VK_SPACE, 60 KeyEvent.VK_PAGE_UP, 61 KeyEvent.VK_PAGE_DOWN, 62 KeyEvent.VK_END, 63 KeyEvent.VK_HOME, 64 KeyEvent.VK_LEFT, 65 KeyEvent.VK_UP, 66 KeyEvent.VK_RIGHT, 67 KeyEvent.VK_DOWN, 68 KeyEvent.VK_COMMA, 69 KeyEvent.VK_MINUS, 70 KeyEvent.VK_PERIOD, 71 KeyEvent.VK_SLASH, 72 KeyEvent.VK_0, 73 KeyEvent.VK_1, 74 KeyEvent.VK_2, 75 KeyEvent.VK_3, 76 KeyEvent.VK_4, 77 KeyEvent.VK_5, 78 KeyEvent.VK_6, 79 KeyEvent.VK_7, 80 KeyEvent.VK_8, 81 KeyEvent.VK_9, 82 KeyEvent.VK_SEMICOLON, 83 KeyEvent.VK_EQUALS, 84 KeyEvent.VK_A, 85 KeyEvent.VK_B, 86 KeyEvent.VK_C, 87 KeyEvent.VK_D, 88 KeyEvent.VK_E, 89 KeyEvent.VK_F, 90 KeyEvent.VK_G, 91 KeyEvent.VK_H, 92 KeyEvent.VK_I, 93 KeyEvent.VK_J, 94 KeyEvent.VK_K, 95 KeyEvent.VK_L, 96 KeyEvent.VK_M, 97 KeyEvent.VK_N, 98 KeyEvent.VK_O, 99 KeyEvent.VK_P, 100 KeyEvent.VK_Q, 101 KeyEvent.VK_R, 102 KeyEvent.VK_S, 103 KeyEvent.VK_T, 104 KeyEvent.VK_U, 105 KeyEvent.VK_V, 106 KeyEvent.VK_W, 107 KeyEvent.VK_X, 108 KeyEvent.VK_Y, 109 KeyEvent.VK_Z, 110 KeyEvent.VK_OPEN_BRACKET, 111 KeyEvent.VK_BACK_SLASH, 112 KeyEvent.VK_CLOSE_BRACKET, 113 KeyEvent.VK_NUMPAD0, 114 KeyEvent.VK_NUMPAD1, 115 KeyEvent.VK_NUMPAD2, 116 KeyEvent.VK_NUMPAD3, 117 KeyEvent.VK_NUMPAD4, 118 KeyEvent.VK_NUMPAD5, 119 KeyEvent.VK_NUMPAD6, 120 KeyEvent.VK_NUMPAD7, 121 KeyEvent.VK_NUMPAD8, 122 KeyEvent.VK_NUMPAD9, 123 KeyEvent.VK_MULTIPLY, 124 KeyEvent.VK_ADD, 125 KeyEvent.VK_SUBTRACT, 126 KeyEvent.VK_DECIMAL, 127 KeyEvent.VK_DIVIDE, 128 KeyEvent.VK_F1, 129 KeyEvent.VK_F2, 130 KeyEvent.VK_F3, 131 KeyEvent.VK_F4, 132 KeyEvent.VK_F5, 133 KeyEvent.VK_F6, 134 KeyEvent.VK_F7, 135 KeyEvent.VK_F8, 136 KeyEvent.VK_F9, 137 KeyEvent.VK_F10, 138 KeyEvent.VK_F11, 139 KeyEvent.VK_F12, 140 KeyEvent.VK_DELETE, 141 KeyEvent.VK_HELP, 142 KeyEvent.VK_META, 143 KeyEvent.VK_BACK_QUOTE, 144 KeyEvent.VK_QUOTE, 145 KeyEvent.VK_F13, 146 KeyEvent.VK_F14, 147 KeyEvent.VK_F15, 148 KeyEvent.VK_F16, 149 KeyEvent.VK_F17, 150 KeyEvent.VK_F18, 151 KeyEvent.VK_F19, 152 KeyEvent.VK_F20 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 }