Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-aarch32-jdk8u
Path: blob/jdk8u272-b10-aarch32-20201026/jdk/test/java/awt/Mouse/ExtraMouseClick/ExtraMouseClick.java
48803 views
1
/*
2
* Copyright (c) 2005, 2006, 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
@bug 5039416 6404008
27
@summary REGRESSION: Extra mouse click dispatched after press-drag- release sequence.
28
@library ../../regtesthelpers
29
@build Util
30
@author andrei.dmitriev area=awt.event
31
@run applet ExtraMouseClick.html
32
*/
33
34
import java.applet.Applet;
35
import java.awt.*;
36
import java.awt.event.*;
37
import test.java.awt.regtesthelpers.Util;
38
39
//**
40
// Here are two values of smugde used in this test (2 and 5). They should be on
41
// different sides from value 4 (smudge distance on both toolkits).
42
// Note that this test may not fail easily. But it must always pass on
43
// patched workspace.
44
//**
45
46
public class ExtraMouseClick extends Applet
47
{
48
Frame frame = new Frame("Extra Click After MouseDrag");
49
final int TRIALS = 10;
50
final int SMUDGE_WIDTH = 4;
51
final int SMUDGE_HEIGHT = 4;
52
Robot robot;
53
Point fp; //frame's location on screen
54
boolean dragged = false;
55
boolean clicked = false;
56
boolean pressed = false;
57
boolean released = false;
58
59
public void init()
60
{
61
this.setLayout (new BorderLayout ());
62
63
frame.addMouseListener(new MouseAdapter() {
64
public void mousePressed(MouseEvent e) {
65
System.out.println("MousePressed");
66
pressed = true;
67
}
68
69
public void mouseReleased(MouseEvent e) {
70
System.out.println("MouseReleased");
71
released = true;
72
}
73
74
public void mouseClicked(MouseEvent e) {
75
System.out.println("MouseClicked!!!!");
76
clicked = true;
77
}
78
});
79
frame.addMouseMotionListener(new MouseMotionAdapter() {
80
public void mouseDragged(MouseEvent e) {
81
System.out.println("MouseDragged--"+e);
82
dragged = true;
83
}
84
public void mouseMoved(MouseEvent e) {
85
}
86
});
87
88
}//End init()
89
90
91
public void start ()
92
{
93
frame.setSize(480, 300);
94
frame.setVisible(true);
95
try{
96
robot = new Robot();
97
}catch(AWTException e){
98
throw new RuntimeException(e);
99
}
100
101
Util.waitForIdle(robot); //a time to show Frame
102
103
fp = frame.getLocationOnScreen();
104
105
for (int i = 0; i< TRIALS; i++){
106
checkClicked();
107
clearFlags();
108
}
109
110
for (int i = 0; i< TRIALS; i++){
111
oneDrag(2);
112
clearFlags();
113
}
114
115
for (int i = 0; i< TRIALS; i++){
116
oneDrag(5);
117
clearFlags();
118
}
119
120
for (int i = 0; i< TRIALS; i++){
121
oneDrag(70);
122
clearFlags();
123
}
124
125
//Check that no Drag event occur in the SMUDGE area
126
String sToolkit = Toolkit.getDefaultToolkit().getClass().getName();
127
System.out.println("Toolkit == "+sToolkit);
128
if ("sun.awt.windows.WToolkit".equals(sToolkit)){
129
int dragWidth = ((Integer)Toolkit.getDefaultToolkit().
130
getDesktopProperty("win.drag.width")).intValue();
131
int dragHeight = ((Integer)Toolkit.getDefaultToolkit().
132
getDesktopProperty("win.drag.height")).intValue();
133
System.out.println("dragWidth=="+dragWidth+":: dragHeight=="+dragHeight);
134
// DragWidth and dragHeight may be equal to 1. In that case the SMUDGE rectangle
135
// narrowed into 1x1 pixel and we can't drag a mouse in it.
136
// In that case we may skip following testcase but I'd prefer if we move mouse on 1 pixel only.
137
// And that should pass as well.
138
dragWidth = dragWidth > 1? dragWidth/2:1;
139
dragHeight = dragHeight > 1? dragHeight/2:1;
140
for (int i = 0; i< TRIALS; i++){
141
smallWin32Drag(dragWidth, dragHeight);
142
clearFlags();
143
}
144
}else{
145
for (int i = 0; i< TRIALS; i++){
146
smallDrag(SMUDGE_WIDTH - 1, SMUDGE_HEIGHT - 1); //on Motif and XAWT SMUDGE area is 4-pixels wide
147
clearFlags();
148
}
149
}
150
System.out.println("Test passed.");
151
}// start()
152
153
public void oneDrag(int pixels){
154
robot.mouseMove(fp.x + frame.getWidth()/2, fp.y + frame.getHeight()/2 );
155
//drag for a short distance
156
robot.mousePress(InputEvent.BUTTON1_MASK );
157
for (int i = 1; i<pixels;i++){
158
robot.mouseMove(fp.x + frame.getWidth()/2 + i, fp.y + frame.getHeight()/2 );
159
}
160
robot.mouseRelease(InputEvent.BUTTON1_MASK );
161
robot.delay(1000);
162
if (dragged && clicked){
163
throw new RuntimeException("Test failed. Clicked event follows by Dragged. Dragged = "+dragged +". Clicked = "+clicked + " : distance = "+pixels);
164
}
165
}
166
167
public void smallDrag(int pixelsX, int pixelsY){
168
// by the X-axis
169
robot.mouseMove(fp.x + frame.getWidth()/2, fp.y + frame.getHeight()/2 );
170
//drag for a short distance
171
robot.mousePress(InputEvent.BUTTON1_MASK );
172
for (int i = 1; i<pixelsX;i++){
173
robot.mouseMove(fp.x + frame.getWidth()/2 + i, fp.y + frame.getHeight()/2 );
174
}
175
robot.mouseRelease(InputEvent.BUTTON1_MASK );
176
robot.delay(1000);
177
if (dragged){
178
throw new RuntimeException("Test failed. Dragged event (by the X-axis) occured in SMUDGE area. Dragged = "+dragged +". Clicked = "+clicked);
179
}
180
181
// the same with Y-axis
182
robot.mouseMove(fp.x + frame.getWidth()/2, fp.y + frame.getHeight()/2 );
183
robot.mousePress(InputEvent.BUTTON1_MASK );
184
for (int i = 1; i<pixelsY;i++){
185
robot.mouseMove(fp.x + frame.getWidth()/2, fp.y + frame.getHeight()/2 + i );
186
}
187
robot.mouseRelease(InputEvent.BUTTON1_MASK );
188
robot.delay(1000);
189
if (dragged){
190
throw new RuntimeException("Test failed. Dragged event (by the Y-axis) occured in SMUDGE area. Dragged = "+dragged +". Clicked = "+clicked);
191
}
192
193
}
194
195
// The difference between X-system and Win32: on Win32 Dragged event start to be generated after any mouse drag.
196
// On X-systems Dragged event first fired when mouse has left the SMUDGE area
197
public void smallWin32Drag(int pixelsX, int pixelsY){
198
// by the X-axis
199
robot.mouseMove(fp.x + frame.getWidth()/2, fp.y + frame.getHeight()/2 );
200
//drag for a short distance
201
robot.mousePress(InputEvent.BUTTON1_MASK );
202
System.out.println(" pixelsX = "+ pixelsX +" pixelsY = " +pixelsY);
203
for (int i = 1; i<=pixelsX;i++){
204
System.out.println("Moving a mouse by X");
205
robot.mouseMove(fp.x + frame.getWidth()/2 + i, fp.y + frame.getHeight()/2 );
206
}
207
robot.mouseRelease(InputEvent.BUTTON1_MASK );
208
robot.delay(1000);
209
if (!dragged){
210
throw new RuntimeException("Test failed. Dragged event (by the X-axis) didn't occur in the SMUDGE area. Dragged = "+dragged);
211
}
212
213
// the same with Y-axis
214
robot.mouseMove(fp.x + frame.getWidth()/2, fp.y + frame.getHeight()/2 );
215
robot.mousePress(InputEvent.BUTTON1_MASK );
216
for (int i = 1; i<=pixelsY;i++){
217
System.out.println("Moving a mouse by Y");
218
robot.mouseMove(fp.x + frame.getWidth()/2, fp.y + frame.getHeight()/2 + i );
219
}
220
robot.mouseRelease(InputEvent.BUTTON1_MASK );
221
robot.delay(1000);
222
if (!dragged){
223
throw new RuntimeException("Test failed. Dragged event (by the Y-axis) didn't occur in the SMUDGE area. Dragged = "+dragged);
224
}
225
}
226
227
public void checkClicked(){
228
robot.mouseMove(fp.x + frame.getWidth()/2, fp.y + frame.getHeight()/2 );
229
robot.mousePress(InputEvent.BUTTON1_MASK );
230
robot.delay(10);
231
robot.mouseRelease(InputEvent.BUTTON1_MASK );
232
robot.delay(1000);
233
if (!clicked || !pressed || !released || dragged){
234
throw new RuntimeException("Test failed. Some of Pressed/Released/Clicked events are missed or dragged occured. Pressed/Released/Clicked/Dragged = "+pressed + ":"+released+":"+clicked +":" +dragged);
235
}
236
}
237
238
public void clearFlags(){
239
clicked = false;
240
pressed = false;
241
released = false;
242
dragged = false;
243
}
244
}// class
245
246