WrongKeyTypedConsumedTest.java revision 14851:980da45565c8
1/*
2 * Copyright (c) 2008, 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  @key headful
27  @bug      4782886
28  @summary  FocusManager consumes wrong KEY_TYPED events
29  @author   Oleg.Sukhodolsky: area=awt.focus
30  @library  ../../regtesthelpers
31  @build    Util
32  @run      main WrongKeyTypedConsumedTest
33*/
34
35import java.applet.Applet;
36import java.awt.AWTException;
37import java.awt.AWTKeyStroke;
38import java.awt.BorderLayout;
39import java.awt.Dialog;
40import java.awt.Dimension;
41import java.awt.FlowLayout;
42import java.awt.Frame;
43import java.awt.KeyboardFocusManager;
44import java.awt.Point;
45import java.awt.Robot;
46import java.awt.TextArea;
47
48import java.awt.event.KeyEvent;
49
50import java.util.HashSet;
51import java.util.Set;
52
53import javax.swing.JCheckBox;
54import javax.swing.JFrame;
55import javax.swing.JTextArea;
56
57import test.java.awt.regtesthelpers.Util;
58
59public class WrongKeyTypedConsumedTest extends Applet
60{
61    Robot robot = Util.createRobot();
62
63    public static void main(String[] args) {
64        WrongKeyTypedConsumedTest test = new WrongKeyTypedConsumedTest();
65        test.start();
66    }
67
68    public void start ()
69    {
70        setSize (200,200);
71        setVisible(true);
72        validate();
73
74        JFrame frame = new JFrame("The Frame");
75        Set ftk = new HashSet();
76        ftk.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_DOWN, 0));
77        frame.getContentPane().
78            setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
79                                  ftk);
80
81        JCheckBox checkbox = new JCheckBox("test");
82        frame.getContentPane().add(checkbox, BorderLayout.NORTH);
83
84        JTextArea textarea = new JTextArea(40, 10);
85        frame.getContentPane().add(textarea);
86
87        frame.pack();
88        frame.setVisible(true);
89        Util.waitForIdle(robot);
90
91        if (!frame.isActive()) {
92            throw new RuntimeException("Test Fialed: frame isn't active");
93        }
94
95        // verify if checkbox has focus
96        if (!checkbox.isFocusOwner()) {
97            checkbox.requestFocusInWindow();
98            Util.waitForIdle(robot);
99            if (!checkbox.isFocusOwner()) {
100                throw new RuntimeException("Test Failed: checkbox doesn't have focus");
101            }
102        }
103
104        // press VK_DOWN
105        robot.keyPress(KeyEvent.VK_DOWN);
106        robot.delay(50);
107        robot.keyRelease(KeyEvent.VK_DOWN);
108        robot.delay(50);
109
110        Util.waitForIdle(robot);
111
112        // verify if text area has focus
113        if (!textarea.isFocusOwner()) {
114            throw new RuntimeException("Test Failed: focus wasn't transfered to text area");
115        }
116        // press '1'
117        robot.keyPress(KeyEvent.VK_1);
118        robot.delay(50);
119        robot.keyRelease(KeyEvent.VK_1);
120        robot.delay(50);
121
122        Util.waitForIdle(robot);
123
124        // verify if KEY_TYPED arrived
125        if (!"1".equals(textarea.getText())) {
126            throw new RuntimeException("Test Failed: text area text is \"" + textarea.getText() + "\", not \"1\"");
127        }
128        System.out.println("Test Passed");
129    }
130}
131