| /* |
| * Copyright (c) 2017, 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 8177414 |
| * @summary KEY_PRESSED and KEY_TYPED events are not generated if a key's held |
| * @library ../../regtesthelpers |
| * @build Util |
| * @run main/manual InputMethodKeyEventsTest |
| */ |
| |
| import java.awt.*; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import java.awt.event.KeyEvent; |
| import java.awt.event.KeyListener; |
| import java.util.concurrent.atomic.AtomicBoolean; |
| |
| import test.java.awt.regtesthelpers.Util; |
| |
| public class InputMethodKeyEventsTest { |
| private static final AtomicBoolean testCompleted = new AtomicBoolean(false); |
| private static volatile boolean testResult = false; |
| |
| private static Dialog controlDialog; |
| private static Frame testFrame; |
| |
| private static final String instructions = |
| "Verify that KEY_PRESSED and KEY_TYPED events are generated after a key's " + |
| "\npressed and held.\n" + |
| "\nThis test is for OS X only. For other platforms please simply press \"Pass\".\n" + |
| "\n1. Go to \"System Preferences -> Keyboard -> Input Sources\" and add \"British\" IM." + |
| "\n2. Set current IM to \"British\"." + |
| "\n3. Set focus to the frame located at north-west corner." + |
| "\n4. Pres and hold the \"i\" key for 3 seconds." + |
| "\n5. Press and release the \"i\" key again. Use log area to ensure that " + |
| "\n KEY_TYPED and KEY_PRESSED events are still generated." + |
| "\nIf KEY_PRESSED, KEY_TYPED and KEY_RELEASED are generated for every key press then " + |
| "\npress \"Pass\", otherwise press \"Fail\"."; |
| |
| public static void main(String[] args) { |
| try { |
| Robot robot = Util.createRobot(); |
| |
| createAndShowGUI(); |
| Util.waitForIdle(robot); |
| |
| Util.waitForCondition(testCompleted); |
| if (!testResult) { |
| throw new RuntimeException("Test FAILED!"); |
| } |
| } finally { |
| if (controlDialog != null) { |
| controlDialog.dispose(); |
| } |
| if (testFrame != null) { |
| testFrame.dispose(); |
| } |
| } |
| } |
| |
| private static void createAndShowGUI() { |
| controlDialog = new Dialog((Frame)null, "InputMethodKeyEventsTest"); |
| |
| TextArea messageArea = new TextArea(instructions, 15, 80, TextArea.SCROLLBARS_BOTH); |
| controlDialog.add("North", messageArea); |
| |
| TextArea logArea = new TextArea("Test's logs are displayed here\n", 15, 80, TextArea.SCROLLBARS_BOTH); |
| controlDialog.add("Center", logArea); |
| |
| Button passedButton = new Button("Pass"); |
| passedButton.addActionListener(new ActionListener() { |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| testResult = true; |
| completeTest(); |
| } |
| }); |
| |
| Button failedButton = new Button("Fail"); |
| failedButton.addActionListener(new ActionListener() { |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| testResult = false; |
| completeTest(); |
| } |
| }); |
| |
| Panel buttonPanel = new Panel(); |
| buttonPanel.add("West",passedButton); |
| buttonPanel.add("East", failedButton); |
| controlDialog.add("South", buttonPanel); |
| |
| controlDialog.setBounds(250, 0, 500, 500); |
| controlDialog.setVisible(true); |
| |
| testFrame = new Frame("InputMethodKeyEventsTest"); |
| testFrame.setSize(200, 200); |
| testFrame.addKeyListener(new KeyListener() { |
| @Override |
| public void keyTyped(KeyEvent e) { |
| logArea.append("KEY_TYPED keyCode = " + e.getKeyCode() + "\n"); |
| } |
| |
| @Override |
| public void keyPressed(KeyEvent e) { |
| logArea.append("KEY_PRESSED keyCode = " + e.getKeyCode() + "\n"); |
| } |
| |
| @Override |
| public void keyReleased(KeyEvent e) { |
| logArea.append("KEY_RELEASED keyCode = " + e.getKeyCode() + "\n"); |
| } |
| }); |
| testFrame.setVisible(true); |
| } |
| |
| private static void completeTest() { |
| testCompleted.set(true); |
| synchronized (testCompleted) { |
| testCompleted.notifyAll(); |
| } |
| } |
| } |