jdk-24/test/jdk/java/awt/Focus/SetFocusableTest.java
Prasanta Sadhukhan 64ed816ad9 8305943: Open source few AWT Focus related tests
Reviewed-by: prr, serb
2023-04-20 02:35:05 +00:00

180 lines
6.9 KiB
Java

/*
* Copyright (c) 2002, 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 4597455
@summary setFocusable(false) is not moving the focus to next Focusable Component
@key headful
@run main SetFocusableTest
*/
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Point;
import java.awt.Robot;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class SetFocusableTest implements KeyListener {
static Object buttonMonitor;
Object tfMonitor;
static final int TEST_TIMEOUT = 5000;
Button button;
Frame frame;
TextField textfield;
public static void main(String[] args) throws Exception {
SetFocusableTest test = new SetFocusableTest();
test.start();
}
public void start() throws Exception {
try {
EventQueue.invokeAndWait(() -> {
buttonMonitor = new Object();
tfMonitor = new Object();
frame = new Frame();
frame.setTitle("Test Frame");
frame.setLocation(100, 100);
frame.setLayout(new FlowLayout());
button = new Button("BUTTON");
textfield = new TextField("First");
button.addKeyListener(this);
textfield.addKeyListener(this);
frame.add(button);
frame.add(textfield);
frame.setBackground(Color.red);
frame.setSize(500,200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.toFront();
button.addFocusListener(new MonitoredFocusListener(buttonMonitor));
textfield.addFocusListener(new MonitoredFocusListener(tfMonitor));
});
Robot robot;
robot = new Robot();
robot.setAutoDelay(100);
robot.setAutoWaitForIdle(true);
robot.delay(1000);
Point buttonOrigin = button.getLocationOnScreen();
Dimension buttonSize = button.getSize();
robot.mouseMove(
(int)buttonOrigin.getX() + (int)buttonSize.getWidth() / 2,
(int)buttonOrigin.getY() + (int)buttonSize.getHeight() / 2);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
if (!button.isFocusOwner()) {
synchronized (buttonMonitor) {
buttonMonitor.wait(TEST_TIMEOUT);
}
}
System.out.println("\n\nBefore calling the method button.setFocusable(false)");
System.out.println("====================================================");
System.out.println("Button is Focusable(button.isFocusable()) :"+button.isFocusable());
System.out.println("Button is Focus owner(button.isFocusOwner()) :"+button.isFocusOwner());
System.out.println("Button has Focus (button.hasFocus) :"+button.hasFocus());
System.out.println("====================================================");
button.setFocusable(false);
if (!textfield.isFocusOwner()) {
synchronized (tfMonitor) {
tfMonitor.wait(TEST_TIMEOUT);
}
}
System.out.println("\nAfter Calling button.setFocusable(false)");
System.out.println("====================================================");
System.out.println("Button is Focusable(button.isFocusable()) :"+button.isFocusable());
System.out.println("Button is Focus owner(button.isFocusOwner()) :"+button.isFocusOwner());
System.out.println("Button has Focus (button.hasFocus()) :"+button.hasFocus());
System.out.println("TextField is Focusable(textfield.isFocusable()) :"+textfield.isFocusable());
System.out.println("TextField is Focus owner(textfield.isFocusOwner()) :"+textfield.isFocusOwner());
System.out.println("TextField has Focus (textfield.hasFocus()) :"+textfield.hasFocus());
System.out.println("====================================================n\n\n\n");
if (!button.hasFocus() && !button.isFocusOwner() &&
textfield.hasFocus() && textfield.isFocusOwner()){
System.out.println("\n\n\nASSERTION :PASSED");
System.out.println("=========================");
System.out.println("Textfield is having the Focus.Transfer of Focus has happend.");
} else {
System.out.println("\n\n\nASSERTION :FAILED");
System.out.println("==========================");
System.out.println("Button is still having the Focus instead of TextField");
throw new RuntimeException("Test FIALED");
}
} finally {
if (frame != null) {
frame.dispose();
}
}
}// start()
public void keyPressed(KeyEvent e) {
System.out.println("Key Pressed ");
}
public void keyReleased(KeyEvent ke) {
System.out.println("keyReleased called ");
}
public void keyTyped(KeyEvent ke) {
System.out.println("keyTyped called ");
}
}// class SetFocusableTest
class MonitoredFocusListener extends FocusAdapter {
Object monitor;
public MonitoredFocusListener(Object monitor) {
this.monitor = monitor;
}
public void focusGained(FocusEvent fe) {
System.out.println(fe.toString());
synchronized (monitor) {
monitor.notify();
}
}
}