Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 38 additions & 42 deletions test/jdk/java/awt/List/ListEnterExitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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);
Expand All @@ -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(() -> {
Expand All @@ -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();
}
}
}