Skip to content

Commit c064dce

Browse files
committed
8274597: Some of the dnd tests time out and fail intermittently
8028998: [TEST_BUG] [macosx] java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java failed Backport-of: 669ac611b269bbda5c53d84173e5c9d0eb4ce919
1 parent 9ffc4b3 commit c064dce

File tree

4 files changed

+147
-52
lines changed

4 files changed

+147
-52
lines changed

test/jdk/java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java

Lines changed: 52 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,44 @@
3535

3636
import test.java.awt.regtesthelpers.Util;
3737

38-
import javax.swing.*;
39-
import java.awt.*;
40-
import java.awt.datatransfer.*;
41-
import java.awt.dnd.*;
38+
import java.awt.Color;
39+
import java.awt.Cursor;
40+
import java.awt.Dimension;
41+
import java.awt.Frame;
42+
import java.awt.Panel;
43+
import java.awt.Point;
44+
import java.awt.Rectangle;
45+
import java.awt.Robot;
46+
import java.awt.Toolkit;
47+
import java.awt.datatransfer.StringSelection;
48+
import java.awt.dnd.DnDConstants;
49+
import java.awt.dnd.DragGestureEvent;
50+
import java.awt.dnd.DragGestureListener;
51+
import java.awt.dnd.DragSource;
52+
import java.awt.dnd.DropTarget;
53+
import java.awt.dnd.DropTargetAdapter;
54+
import java.awt.dnd.DropTargetDropEvent;
4255
import java.awt.event.InputEvent;
56+
import java.io.File;
57+
import java.io.IOException;
58+
import java.util.concurrent.CountDownLatch;
59+
import java.util.concurrent.TimeUnit;
60+
import java.util.concurrent.atomic.AtomicReference;
61+
import javax.imageio.ImageIO;
62+
import javax.swing.SwingUtilities;
4363

4464
public class AcceptDropMultipleTimes {
4565

4666
private static final int FRAME_SIZE = 100;
47-
private static final int FRAME_LOCATION = 100;
67+
private static CountDownLatch dropCompleteLatch = new CountDownLatch(1);
4868

4969
private static volatile Frame f;
5070

5171
private static void initAndShowUI() {
5272
f = new Frame("Test frame");
53-
f.setBounds(FRAME_LOCATION, FRAME_LOCATION, FRAME_SIZE, FRAME_SIZE);
73+
f.setSize(FRAME_SIZE, FRAME_SIZE);
74+
f.setLocationRelativeTo(null);
75+
f.setUndecorated(true);
5476

5577
final DraggablePanel dragSource = new DraggablePanel();
5678
dragSource.setBackground(Color.yellow);
@@ -63,11 +85,12 @@ private static void initAndShowUI() {
6385
dtde.acceptDrop(DnDConstants.ACTION_MOVE);
6486

6587
dtde.dropComplete(true);
88+
dropCompleteLatch.countDown();
6689
}
6790
});
6891
dragSource.setDropTarget(dt);
6992
f.add(dragSource);
70-
93+
f.setAlwaysOnTop(true);
7194
f.setVisible(true);
7295
}
7396

@@ -77,19 +100,37 @@ public static void main(String[] args) throws Throwable {
77100
SwingUtilities.invokeAndWait(() -> initAndShowUI());
78101

79102
Robot r = new Robot();
103+
r.setAutoDelay(50);
80104
Util.waitForIdle(r);
105+
final AtomicReference<Point> frameLoc = new AtomicReference<>();
106+
SwingUtilities.invokeAndWait(() -> frameLoc.set(f.getLocationOnScreen()));
107+
Point loc = frameLoc.get();
81108
Util.drag(r,
82-
new Point(FRAME_LOCATION + FRAME_SIZE / 3, FRAME_LOCATION + FRAME_SIZE / 3),
83-
new Point(FRAME_LOCATION + FRAME_SIZE / 3 * 2, FRAME_LOCATION + FRAME_SIZE / 3 * 2),
84-
InputEvent.BUTTON1_MASK);
109+
new Point(loc.x + FRAME_SIZE / 3, loc.y + FRAME_SIZE / 3),
110+
new Point(loc.x + FRAME_SIZE / 3 * 2, loc.y + FRAME_SIZE / 3 * 2),
111+
InputEvent.BUTTON1_DOWN_MASK);
85112
Util.waitForIdle(r);
113+
if(!dropCompleteLatch.await(10, TimeUnit.SECONDS)) {
114+
captureScreen(r);
115+
throw new RuntimeException("Waited too long, but the drop is not completed");
116+
}
86117
} finally {
87118
if (f != null) {
88119
f.dispose();
89120
}
90121
}
91122
}
92-
123+
private static void captureScreen(Robot r) {
124+
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
125+
try {
126+
ImageIO.write(
127+
r.createScreenCapture(new Rectangle(0, 0, screenSize.width, screenSize.height)),
128+
"png",
129+
new File("FailedScreenImage.png")
130+
);
131+
} catch (IOException ignore) {
132+
}
133+
}
93134
private static class DraggablePanel extends Panel implements DragGestureListener {
94135

95136
public DraggablePanel() {

test/jdk/java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,13 @@
3535

3636
import test.java.awt.regtesthelpers.Util;
3737

38-
import javax.swing.*;
39-
import java.awt.*;
38+
import java.awt.Color;
39+
import java.awt.Cursor;
40+
import java.awt.Frame;
41+
import java.awt.GridLayout;
42+
import java.awt.Panel;
43+
import java.awt.Point;
44+
import java.awt.Robot;
4045
import java.awt.datatransfer.StringSelection;
4146
import java.awt.dnd.DnDConstants;
4247
import java.awt.dnd.DragGestureEvent;
@@ -47,23 +52,27 @@
4752
import java.awt.dnd.DropTargetDragEvent;
4853
import java.awt.dnd.DropTargetDropEvent;
4954
import java.awt.event.InputEvent;
55+
import java.util.concurrent.CountDownLatch;
56+
import java.util.concurrent.TimeUnit;
5057
import java.util.concurrent.atomic.AtomicInteger;
58+
import javax.swing.SwingUtilities;
5159

5260
public class ExtraDragEnterTest {
5361

5462
private static final int FRAME_SIZE = 100;
55-
private static final int FRAME_LOCATION = 100;
5663

5764
private static AtomicInteger dragEnterCalled = new AtomicInteger(0);
5865

5966
private static volatile Panel mainPanel;
6067
private static volatile Frame f;
68+
private static CountDownLatch dropCompleteLatch = new CountDownLatch(1);
6169

6270
private static void initAndShowUI() {
6371
f = new Frame("Test frame");
64-
f.setBounds(FRAME_LOCATION,FRAME_LOCATION,FRAME_SIZE,FRAME_SIZE);
72+
f.setLocationRelativeTo(null);
73+
f.setSize(FRAME_SIZE,FRAME_SIZE);
6574
mainPanel = new Panel();
66-
mainPanel.setBounds(0, 0, FRAME_SIZE, FRAME_SIZE);
75+
mainPanel.setSize(FRAME_SIZE, FRAME_SIZE);
6776
mainPanel.setBackground(Color.black);
6877
mainPanel.setLayout(new GridLayout(2, 1));
6978

@@ -75,7 +84,10 @@ private static void initAndShowUI() {
7584
Panel dropTarget = new Panel();
7685
dropTarget.setBackground(Color.red);
7786
DropTarget dt = new DropTarget(dropTarget, new DropTargetAdapter() {
78-
@Override public void drop(DropTargetDropEvent dtde) { }
87+
@Override public void drop(DropTargetDropEvent dtde) {
88+
System.out.println("Drop complete");
89+
dropCompleteLatch.countDown();
90+
}
7991

8092
@Override
8193
public void dragEnter(DropTargetDragEvent dtde) {
@@ -86,6 +98,7 @@ public void dragEnter(DropTargetDragEvent dtde) {
8698
mainPanel.add(dropTarget);
8799

88100
f.add(mainPanel);
101+
f.setAlwaysOnTop(true);
89102
f.setVisible(true);
90103
}
91104

@@ -113,6 +126,9 @@ public void run() {
113126
if (called != 1) {
114127
throw new RuntimeException("Failed. Drag enter called " + called + " times. Expected 1" );
115128
}
129+
if(!dropCompleteLatch.await(10, TimeUnit.SECONDS)) {
130+
throw new RuntimeException("Waited too long, but the drop is not completed");
131+
}
116132
} finally {
117133
if (f != null) {
118134
f.dispose();

test/jdk/java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@
3535

3636
import test.java.awt.regtesthelpers.Util;
3737

38-
import javax.swing.*;
39-
import java.awt.*;
38+
import java.awt.Color;
39+
import java.awt.Cursor;
40+
import java.awt.Frame;
41+
import java.awt.Panel;
42+
import java.awt.Point;
43+
import java.awt.Robot;
4044
import java.awt.datatransfer.StringSelection;
4145
import java.awt.dnd.DnDConstants;
4246
import java.awt.dnd.DragGestureEvent;
@@ -48,15 +52,17 @@
4852
import java.awt.dnd.DropTargetDropEvent;
4953
import java.awt.dnd.DropTargetEvent;
5054
import java.awt.event.InputEvent;
55+
import java.util.concurrent.CountDownLatch;
56+
import java.util.concurrent.TimeUnit;
57+
import javax.swing.SwingUtilities;
5158

5259
public class MissedDragExitTest {
5360

5461
private static final int FRAME_SIZE = 100;
5562
private static final int FRAME_LOCATION = 100;
5663

57-
private static volatile boolean dragExitCalled = false;
58-
5964
private static volatile Frame f;
65+
private static CountDownLatch dragLatch = new CountDownLatch(2);
6066

6167
private static void initAndShowUI() {
6268
f = new Frame("Test frame");
@@ -70,21 +76,30 @@ private static void initAndShowUI() {
7076

7177
@Override
7278
public void dragExit(DropTargetEvent dte) {
73-
dragExitCalled = true;
79+
System.out.println("Drag Exit");
80+
dragLatch.countDown();
7481
}
7582

7683
@Override
7784
public void dragOver(DropTargetDragEvent dtde) {
78-
Panel newDropTarget = new Panel();
79-
newDropTarget.setDropTarget(new DropTarget());
80-
newDropTarget.setBackground(Color.red);
81-
newDropTarget.setBounds(0, 0, FRAME_SIZE, FRAME_SIZE);
82-
dragSource.add(newDropTarget);
85+
Panel newDropTargetPanel = new Panel();
86+
final DropTarget dropTarget = new DropTarget(null,new DropTargetAdapter() {
87+
@Override
88+
public void drop(DropTargetDropEvent dtde) {
89+
System.out.println("Drop complete");
90+
dragLatch.countDown();
91+
}
92+
});
93+
newDropTargetPanel.setDropTarget(dropTarget);
94+
newDropTargetPanel.setBackground(Color.red);
95+
newDropTargetPanel.setSize(FRAME_SIZE, FRAME_SIZE);
96+
dragSource.add(newDropTargetPanel);
8397
}
8498
});
8599
dragSource.setDropTarget(dt);
86100
f.add(dragSource);
87101

102+
f.setAlwaysOnTop(true);
88103
f.setVisible(true);
89104
}
90105

@@ -105,8 +120,7 @@ public void run() {
105120
new Point(FRAME_LOCATION + FRAME_SIZE / 3 * 2, FRAME_LOCATION + FRAME_SIZE / 3 * 2),
106121
InputEvent.BUTTON1_DOWN_MASK);
107122
Util.waitForIdle(r);
108-
109-
if (!dragExitCalled) {
123+
if(!dragLatch.await(10, TimeUnit.SECONDS)) {
110124
throw new RuntimeException("Failed. Drag exit was not called" );
111125
}
112126
} finally {

0 commit comments

Comments
 (0)