From 440c3664215d9f5f4f3ddb581f84594f468f1036 Mon Sep 17 00:00:00 2001 From: duke Date: Thu, 16 Oct 2025 13:59:54 +0000 Subject: [PATCH] Backport 99e01301cd7f063f167db107d31468b1d3f901aa --- test/jdk/java/awt/List/ListEnterExitTest.java | 80 +++++++++---------- 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/test/jdk/java/awt/List/ListEnterExitTest.java b/test/jdk/java/awt/List/ListEnterExitTest.java index cb9c035d977..201a0e43c13 100644 --- a/test/jdk/java/awt/List/ListEnterExitTest.java +++ b/test/jdk/java/awt/List/ListEnterExitTest.java @@ -36,16 +36,24 @@ import java.awt.Point; import java.awt.Robot; -import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + public class ListEnterExitTest { final List list = new List(); - final MouseEnterExitListener mouseEnterExitListener = new MouseEnterExitListener(); Frame frame; volatile Point p; + private static final int X_OFFSET = 30; + private static final int Y_OFFSET = 40; + private static final int LATCH_TIMEOUT = 3; + + private final CountDownLatch mouseEnterLatch = new CountDownLatch(1); + private final CountDownLatch mouseExitLatch = new CountDownLatch(1); + public static void main(String[] args) throws Exception { ListEnterExitTest test = new ListEnterExitTest(); test.start(); @@ -57,7 +65,11 @@ public void start() throws Exception { frame = new Frame("ListEnterExitTest"); list.add("Item 1"); list.add("Item 2"); - list.addMouseListener(mouseEnterExitListener); + list.add("Item 3"); + list.add("Item 4"); + list.add("Item 5"); + list.add("Item 6"); + list.addMouseListener(new MouseEnterExitListener()); frame.add(list); frame.setLayout(new FlowLayout()); frame.setSize(300, 200); @@ -66,25 +78,28 @@ public void start() throws Exception { }); final Robot robot = new Robot(); - robot.delay(1000); + robot.setAutoDelay(100); robot.waitForIdle(); + robot.delay(1000); EventQueue.invokeAndWait(() -> { p = list.getLocationOnScreen(); }); - robot.mouseMove(p.x + 10, p.y + 10); - robot.delay(100); + robot.mouseMove(p.x + X_OFFSET, p.y + Y_OFFSET); robot.waitForIdle(); - robot.mouseMove(p.x - 10, p.y - 10); - robot.delay(100); + + robot.mouseMove(p.x - X_OFFSET, p.y + Y_OFFSET); robot.waitForIdle(); - robot.mouseMove(p.x + 10, p.y + 10); - robot.mousePress(InputEvent.BUTTON1_MASK); - robot.mouseRelease(InputEvent.BUTTON1_MASK); + robot.mouseMove(p.x + X_OFFSET, p.y + Y_OFFSET); + robot.waitForIdle(); + + if (!mouseEnterLatch.await(LATCH_TIMEOUT, TimeUnit.SECONDS)) { + throw new RuntimeException("Mouse enter event timeout"); + } - synchronized (mouseEnterExitListener) { - mouseEnterExitListener.wait(2000); + if (!mouseExitLatch.await(LATCH_TIMEOUT, TimeUnit.SECONDS)) { + throw new RuntimeException("Mouse exit event timeout"); } } finally { EventQueue.invokeAndWait(() -> { @@ -93,38 +108,19 @@ public void start() throws Exception { } }); } - System.out.println("mouseEnterExitListener.isPassed() : " + mouseEnterExitListener.isPassed()); - if (!mouseEnterExitListener.isPassed()) { - throw new RuntimeException("Haven't receive mouse enter/exit events"); - } - } -} - -class MouseEnterExitListener extends MouseAdapter { - - volatile boolean passed_1 = false; - volatile boolean passed_2 = false; - - public void mouseEntered(MouseEvent e) { - passed_1 = true; - System.out.println("passed_1 is: " + passed_1); - } - - public void mouseExited(MouseEvent e) { - passed_2 = true; - System.out.println("passed_2 is: " + passed_2); - } - - public void mousePressed(MouseEvent e) { - synchronized (this) { - System.out.println("mouse pressed"); - this.notifyAll(); + private class MouseEnterExitListener extends MouseAdapter { + @Override + public void mouseEntered(MouseEvent e) { + System.out.println("Mouse Entered Event"); + mouseEnterLatch.countDown(); } - } - public boolean isPassed() { - return passed_1 & passed_2; + @Override + public void mouseExited(MouseEvent e) { + System.out.println("Mouse Exited Event"); + mouseExitLatch.countDown(); + } } }