6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package javafx.scene.input;
27
28 import static org.junit.Assert.assertNull;
29 import static org.junit.Assert.fail;
30
31 import java.security.AccessControlContext;
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.HashSet;
35 import java.util.List;
36 import java.util.Set;
37
38 import com.sun.javafx.tk.TKScene;
39 import javafx.event.EventHandler;
40 import javafx.scene.Group;
41 import javafx.scene.Node;
42 import javafx.scene.Scene;
43 import javafx.scene.shape.Rectangle;
44 import javafx.stage.Stage;
45 import javafx.util.Pair;
46
47 import org.junit.After;
48 import org.junit.Assert;
49 import org.junit.Before;
50 import org.junit.Test;
51
52 import com.sun.javafx.pgstub.StubToolkit;
53 import com.sun.javafx.tk.TKClipboard;
54 import com.sun.javafx.tk.TKDragGestureListener;
55 import com.sun.javafx.tk.TKDragSourceListener;
56 import com.sun.javafx.tk.TKDropTargetListener;
57 import com.sun.javafx.tk.Toolkit;
58 import com.sun.javafx.test.MouseEventGenerator;
59 import javafx.event.Event;
60 import javafx.geometry.Point3D;
61 import javafx.scene.SubScene;
62 import javafx.scene.image.Image;
63 import static org.junit.Assert.assertEquals;
64 import static org.junit.Assert.assertFalse;
65 import static org.junit.Assert.assertNotNull;
66 import static org.junit.Assert.assertSame;
67 import static org.junit.Assert.assertTrue;
68
69 public class DragAndDropTest {
70
71 private DndToolkit toolkit = new DndToolkit();
72 private int counter;
73 private boolean detected;
74 private Node dragSource;
75
76 @Before
77 public void setUp() {
78 counter = 0;
79 detected = false;
80 toolkit = new DndToolkit();
81 ((StubToolkit) Toolkit.getToolkit()).setDndDelegate(toolkit);
82 }
83
84 @After
85 public void tearDown() {
86 ((StubToolkit) Toolkit.getToolkit()).setDndDelegate(null);
87 toolkit = null;
88 }
89
90 /************************************************************************/
91 /* DRAG EVENT CONSTRUCTOR */
92 /************************************************************************/
93
94 @Test public void testShortConstructor() {
95 Rectangle node = new Rectangle(10, 10);
96 node.setTranslateX(3);
97 node.setTranslateY(2);
98 node.setTranslateZ(50);
99 Dragboard db = new Dragboard(new ClipboardImpl());
100 Rectangle gsrc = new Rectangle(10, 10);
101 Rectangle gtrg = new Rectangle(10, 10);
102
103 PickResult pickRes = new PickResult(node, new Point3D(15, 25, 100), 33);
104 DragEvent e = new DragEvent(DragEvent.DRAG_ENTERED, db, 10, 20, 30, 40,
105 TransferMode.LINK, gsrc, gtrg, pickRes);
106
107 assertSame(DragEvent.DRAG_ENTERED, e.getEventType());
108 assertEquals(18, e.getX(), 10e-20);
109 assertEquals(27, e.getY(), 10e-20);
110 assertEquals(150, e.getZ(), 10e-20);
111 assertEquals(10, e.getSceneX(), 10e-20);
112 assertEquals(20, e.getSceneY(), 10e-20);
113 assertEquals(30, e.getScreenX(), 10e-20);
114 assertEquals(40, e.getScreenY(), 10e-20);
115 assertSame(db, e.getDragboard());
116 assertSame(gsrc, e.getGestureSource());
117 assertSame(gtrg, e.getGestureTarget());
118 assertSame(TransferMode.LINK, e.getTransferMode());
119 assertSame(pickRes, e.getPickResult());
120 assertSame(Event.NULL_SOURCE_TARGET, e.getSource());
121 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget());
122 assertFalse(e.isAccepted());
123 assertNull(e.getAcceptedTransferMode());
124 assertFalse(e.isConsumed());
125 }
126
127 @Test public void testShortConstructorWithoutPickResult() {
128 Dragboard db = new Dragboard(new ClipboardImpl());
129 Rectangle gsrc = new Rectangle(10, 10);
130 Rectangle gtrg = new Rectangle(10, 10);
131 DragEvent e = new DragEvent(DragEvent.DRAG_ENTERED, db, 10, 20, 30, 40,
132 TransferMode.LINK, gsrc, gtrg, null);
133
134 assertEquals(10, e.getX(), 10e-20);
135 assertEquals(20, e.getY(), 10e-20);
136 assertEquals(0, e.getZ(), 10e-20);
137 assertEquals(10, e.getSceneX(), 10e-20);
138 assertEquals(20, e.getSceneY(), 10e-20);
139 assertEquals(30, e.getScreenX(), 10e-20);
140 assertEquals(40, e.getScreenY(), 10e-20);
141 assertNotNull(e.getPickResult());
142 assertNotNull(e.getPickResult().getIntersectedPoint());
143 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20);
144 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20);
145 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20);
146 assertSame(Event.NULL_SOURCE_TARGET, e.getSource());
147 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget());
148 }
149
150 @Test public void testLongConstructor() {
151 Rectangle node = new Rectangle(10, 10);
152 node.setTranslateX(3);
153 node.setTranslateY(2);
154 node.setTranslateZ(50);
155 Rectangle n1 = new Rectangle(10, 10);
156 Rectangle n2 = new Rectangle(10, 10);
157 Dragboard db = new Dragboard(new ClipboardImpl());
158 Rectangle gsrc = new Rectangle(10, 10);
159 Rectangle gtrg = new Rectangle(10, 10);
160
161 PickResult pickRes = new PickResult(node, new Point3D(15, 25, 100), 33);
162 DragEvent e = new DragEvent(n1, n2, DragEvent.DRAG_ENTERED, db,
163 10, 20, 30, 40, TransferMode.LINK, gsrc, gtrg, pickRes);
164 assertSame(n1, e.getSource());
165 assertSame(n2, e.getTarget());
166 assertSame(DragEvent.DRAG_ENTERED, e.getEventType());
167 assertEquals(18, e.getX(), 10e-20);
168 assertEquals(27, e.getY(), 10e-20);
169 assertEquals(150, e.getZ(), 10e-20);
170 assertEquals(10, e.getSceneX(), 10e-20);
171 assertEquals(20, e.getSceneY(), 10e-20);
172 assertEquals(30, e.getScreenX(), 10e-20);
173 assertEquals(40, e.getScreenY(), 10e-20);
174 assertSame(TransferMode.LINK, e.getTransferMode());
175 assertSame(db, e.getDragboard());
176 assertSame(gsrc, e.getGestureSource());
177 assertSame(gtrg, e.getGestureTarget());
178 assertSame(pickRes, e.getPickResult());
179 assertFalse(e.isConsumed());
180 assertFalse(e.isAccepted());
181 assertNull(e.getAcceptedTransferMode());
182 }
183
184 @Test public void testLongConstructorWithoutPickResult() {
185 Rectangle n1 = new Rectangle(10, 10);
186 Rectangle n2 = new Rectangle(10, 10);
187 Dragboard db = new Dragboard(new ClipboardImpl());
188 Rectangle gsrc = new Rectangle(10, 10);
189 Rectangle gtrg = new Rectangle(10, 10);
190 DragEvent e = new DragEvent(n1, n2, DragEvent.DRAG_ENTERED, db,
191 10, 20, 30, 40, TransferMode.LINK, gsrc, gtrg, null);
192
193 assertEquals(10, e.getX(), 10e-20);
194 assertEquals(20, e.getY(), 10e-20);
195 assertEquals(0, e.getZ(), 10e-20);
196 assertEquals(10, e.getSceneX(), 10e-20);
197 assertEquals(20, e.getSceneY(), 10e-20);
198 assertEquals(30, e.getScreenX(), 10e-20);
199 assertEquals(40, e.getScreenY(), 10e-20);
200 assertNotNull(e.getPickResult());
201 assertNotNull(e.getPickResult().getIntersectedPoint());
202 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20);
203 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20);
204 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20);
205 }
206
207 @Test public void shortConstructorMakesDropAccepted() {
208 DragEvent e = new DragEvent(DragEvent.DRAG_DROPPED,
209 new Dragboard(new ClipboardImpl()), 10, 20, 30, 40,
210 TransferMode.LINK, new Rectangle(), new Rectangle(), null);
211 assertSame(DragEvent.DRAG_DROPPED, e.getEventType());
212 assertTrue(e.isAccepted());
213 assertSame(TransferMode.LINK, e.getAcceptedTransferMode());
214 }
215
216 @Test public void shortConstructorMakesDoneAccepted() {
217 DragEvent e = new DragEvent(DragEvent.DRAG_DONE,
218 new Dragboard(new ClipboardImpl()), 10, 20, 30, 40,
219 TransferMode.LINK, new Rectangle(), new Rectangle(), null);
220 assertSame(DragEvent.DRAG_DONE, e.getEventType());
221 assertTrue(e.isAccepted());
222 assertSame(TransferMode.LINK, e.getAcceptedTransferMode());
223 }
224
225 @Test public void longConstructorMakesDropAccepted() {
226 DragEvent e = new DragEvent(new Rectangle(), new Rectangle(),
227 DragEvent.DRAG_DROPPED,
228 new Dragboard(new ClipboardImpl()), 10, 20, 30, 40,
229 TransferMode.LINK, new Rectangle(), new Rectangle(), null);
230 assertSame(DragEvent.DRAG_DROPPED, e.getEventType());
231 assertTrue(e.isAccepted());
232 assertSame(TransferMode.LINK, e.getAcceptedTransferMode());
233 }
234
235 @Test public void longConstructorMakesDoneAccepted() {
236 DragEvent e = new DragEvent(new Rectangle(), new Rectangle(),
237 DragEvent.DRAG_DONE,
238 new Dragboard(new ClipboardImpl()), 10, 20, 30, 40,
239 TransferMode.LINK, new Rectangle(), new Rectangle(), null);
240 assertSame(DragEvent.DRAG_DONE, e.getEventType());
241 assertTrue(e.isAccepted());
242 assertSame(TransferMode.LINK, e.getAcceptedTransferMode());
243 }
244
245 /************************************************************************/
246 /* DRAG INITIATION */
247 /************************************************************************/
248
249
250 @Test
251 public void dragDetectionShouldUseHysteresis() {
252 Node n = oneNode();
253 MouseEventGenerator gen = new MouseEventGenerator();
254
255 EventHandler<MouseEvent> thirdEventFailsHysteresis =
256 event -> {
257 counter++;
258 assertTrue((counter != 3 && !event.isDragDetect()) ||
|
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package test.javafx.scene.input;
27
28 import static org.junit.Assert.assertNull;
29 import static org.junit.Assert.fail;
30
31 import java.security.AccessControlContext;
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.HashSet;
35 import java.util.List;
36 import java.util.Set;
37
38 import com.sun.javafx.tk.TKScene;
39 import javafx.event.EventHandler;
40 import javafx.scene.Group;
41 import javafx.scene.Node;
42 import javafx.scene.Scene;
43 import javafx.scene.shape.Rectangle;
44 import javafx.stage.Stage;
45 import javafx.util.Pair;
46
47 import org.junit.After;
48 import org.junit.Assert;
49 import org.junit.Before;
50 import org.junit.Test;
51
52 import test.com.sun.javafx.pgstub.StubToolkit;
53 import com.sun.javafx.tk.TKClipboard;
54 import com.sun.javafx.tk.TKDragGestureListener;
55 import com.sun.javafx.tk.TKDragSourceListener;
56 import com.sun.javafx.tk.TKDropTargetListener;
57 import com.sun.javafx.tk.Toolkit;
58 import test.com.sun.javafx.test.MouseEventGenerator;
59 import javafx.event.Event;
60 import javafx.geometry.Point3D;
61 import javafx.scene.SubScene;
62 import javafx.scene.image.Image;
63 import javafx.scene.input.ClipboardContent;
64 import javafx.scene.input.ClipboardContent;
65 import javafx.scene.input.DataFormat;
66 import javafx.scene.input.DataFormat;
67 import javafx.scene.input.DragEvent;
68 import javafx.scene.input.DragEvent;
69 import javafx.scene.input.Dragboard;
70 import javafx.scene.input.Dragboard;
71 import javafx.scene.input.DragboardShim;
72 import javafx.scene.input.MouseEvent;
73 import javafx.scene.input.MouseEvent;
74 import javafx.scene.input.PickResult;
75 import javafx.scene.input.PickResult;
76 import javafx.scene.input.TransferMode;
77 import javafx.scene.input.TransferMode;
78 import static org.junit.Assert.assertEquals;
79 import static org.junit.Assert.assertFalse;
80 import static org.junit.Assert.assertNotNull;
81 import static org.junit.Assert.assertSame;
82 import static org.junit.Assert.assertTrue;
83
84 public class DragAndDropTest {
85
86 private DndToolkit toolkit = new DndToolkit();
87 private int counter;
88 private boolean detected;
89 private Node dragSource;
90
91 @Before
92 public void setUp() {
93 counter = 0;
94 detected = false;
95 toolkit = new DndToolkit();
96 ((StubToolkit) Toolkit.getToolkit()).setDndDelegate(toolkit);
97 }
98
99 @After
100 public void tearDown() {
101 ((StubToolkit) Toolkit.getToolkit()).setDndDelegate(null);
102 toolkit = null;
103 }
104
105 /************************************************************************/
106 /* DRAG EVENT CONSTRUCTOR */
107 /************************************************************************/
108
109 @Test public void testShortConstructor() {
110 Rectangle node = new Rectangle(10, 10);
111 node.setTranslateX(3);
112 node.setTranslateY(2);
113 node.setTranslateZ(50);
114 Dragboard db = DragboardShim.getDragboard(new ClipboardImpl());
115 Rectangle gsrc = new Rectangle(10, 10);
116 Rectangle gtrg = new Rectangle(10, 10);
117
118 PickResult pickRes = new PickResult(node, new Point3D(15, 25, 100), 33);
119 DragEvent e = new DragEvent(DragEvent.DRAG_ENTERED, db, 10, 20, 30, 40,
120 TransferMode.LINK, gsrc, gtrg, pickRes);
121
122 assertSame(DragEvent.DRAG_ENTERED, e.getEventType());
123 assertEquals(18, e.getX(), 10e-20);
124 assertEquals(27, e.getY(), 10e-20);
125 assertEquals(150, e.getZ(), 10e-20);
126 assertEquals(10, e.getSceneX(), 10e-20);
127 assertEquals(20, e.getSceneY(), 10e-20);
128 assertEquals(30, e.getScreenX(), 10e-20);
129 assertEquals(40, e.getScreenY(), 10e-20);
130 assertSame(db, e.getDragboard());
131 assertSame(gsrc, e.getGestureSource());
132 assertSame(gtrg, e.getGestureTarget());
133 assertSame(TransferMode.LINK, e.getTransferMode());
134 assertSame(pickRes, e.getPickResult());
135 assertSame(Event.NULL_SOURCE_TARGET, e.getSource());
136 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget());
137 assertFalse(e.isAccepted());
138 assertNull(e.getAcceptedTransferMode());
139 assertFalse(e.isConsumed());
140 }
141
142 @Test public void testShortConstructorWithoutPickResult() {
143 Dragboard db = DragboardShim.getDragboard(new ClipboardImpl());
144 Rectangle gsrc = new Rectangle(10, 10);
145 Rectangle gtrg = new Rectangle(10, 10);
146 DragEvent e = new DragEvent(DragEvent.DRAG_ENTERED, db, 10, 20, 30, 40,
147 TransferMode.LINK, gsrc, gtrg, null);
148
149 assertEquals(10, e.getX(), 10e-20);
150 assertEquals(20, e.getY(), 10e-20);
151 assertEquals(0, e.getZ(), 10e-20);
152 assertEquals(10, e.getSceneX(), 10e-20);
153 assertEquals(20, e.getSceneY(), 10e-20);
154 assertEquals(30, e.getScreenX(), 10e-20);
155 assertEquals(40, e.getScreenY(), 10e-20);
156 assertNotNull(e.getPickResult());
157 assertNotNull(e.getPickResult().getIntersectedPoint());
158 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20);
159 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20);
160 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20);
161 assertSame(Event.NULL_SOURCE_TARGET, e.getSource());
162 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget());
163 }
164
165 @Test public void testLongConstructor() {
166 Rectangle node = new Rectangle(10, 10);
167 node.setTranslateX(3);
168 node.setTranslateY(2);
169 node.setTranslateZ(50);
170 Rectangle n1 = new Rectangle(10, 10);
171 Rectangle n2 = new Rectangle(10, 10);
172 Dragboard db = DragboardShim.getDragboard(new ClipboardImpl());
173 Rectangle gsrc = new Rectangle(10, 10);
174 Rectangle gtrg = new Rectangle(10, 10);
175
176 PickResult pickRes = new PickResult(node, new Point3D(15, 25, 100), 33);
177 DragEvent e = new DragEvent(n1, n2, DragEvent.DRAG_ENTERED, db,
178 10, 20, 30, 40, TransferMode.LINK, gsrc, gtrg, pickRes);
179 assertSame(n1, e.getSource());
180 assertSame(n2, e.getTarget());
181 assertSame(DragEvent.DRAG_ENTERED, e.getEventType());
182 assertEquals(18, e.getX(), 10e-20);
183 assertEquals(27, e.getY(), 10e-20);
184 assertEquals(150, e.getZ(), 10e-20);
185 assertEquals(10, e.getSceneX(), 10e-20);
186 assertEquals(20, e.getSceneY(), 10e-20);
187 assertEquals(30, e.getScreenX(), 10e-20);
188 assertEquals(40, e.getScreenY(), 10e-20);
189 assertSame(TransferMode.LINK, e.getTransferMode());
190 assertSame(db, e.getDragboard());
191 assertSame(gsrc, e.getGestureSource());
192 assertSame(gtrg, e.getGestureTarget());
193 assertSame(pickRes, e.getPickResult());
194 assertFalse(e.isConsumed());
195 assertFalse(e.isAccepted());
196 assertNull(e.getAcceptedTransferMode());
197 }
198
199 @Test public void testLongConstructorWithoutPickResult() {
200 Rectangle n1 = new Rectangle(10, 10);
201 Rectangle n2 = new Rectangle(10, 10);
202 Dragboard db = DragboardShim.getDragboard(new ClipboardImpl());
203 Rectangle gsrc = new Rectangle(10, 10);
204 Rectangle gtrg = new Rectangle(10, 10);
205 DragEvent e = new DragEvent(n1, n2, DragEvent.DRAG_ENTERED, db,
206 10, 20, 30, 40, TransferMode.LINK, gsrc, gtrg, null);
207
208 assertEquals(10, e.getX(), 10e-20);
209 assertEquals(20, e.getY(), 10e-20);
210 assertEquals(0, e.getZ(), 10e-20);
211 assertEquals(10, e.getSceneX(), 10e-20);
212 assertEquals(20, e.getSceneY(), 10e-20);
213 assertEquals(30, e.getScreenX(), 10e-20);
214 assertEquals(40, e.getScreenY(), 10e-20);
215 assertNotNull(e.getPickResult());
216 assertNotNull(e.getPickResult().getIntersectedPoint());
217 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20);
218 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20);
219 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20);
220 }
221
222 @Test public void shortConstructorMakesDropAccepted() {
223 DragEvent e = new DragEvent(DragEvent.DRAG_DROPPED,
224 DragboardShim.getDragboard(
225 new ClipboardImpl()), 10, 20, 30, 40,
226 TransferMode.LINK, new Rectangle(), new Rectangle(), null);
227 assertSame(DragEvent.DRAG_DROPPED, e.getEventType());
228 assertTrue(e.isAccepted());
229 assertSame(TransferMode.LINK, e.getAcceptedTransferMode());
230 }
231
232 @Test
233 public void shortConstructorMakesDoneAccepted() {
234 DragEvent e = new DragEvent(DragEvent.DRAG_DONE,
235 DragboardShim.getDragboard(
236 new ClipboardImpl()), 10, 20, 30, 40,
237 TransferMode.LINK, new Rectangle(), new Rectangle(), null);
238 assertSame(DragEvent.DRAG_DONE, e.getEventType());
239 assertTrue(e.isAccepted());
240 assertSame(TransferMode.LINK, e.getAcceptedTransferMode());
241 }
242
243 @Test public void longConstructorMakesDropAccepted() {
244 DragEvent e = new DragEvent(new Rectangle(), new Rectangle(),
245 DragEvent.DRAG_DROPPED,
246 DragboardShim.getDragboard(
247 new ClipboardImpl()), 10, 20, 30, 40,
248 TransferMode.LINK, new Rectangle(), new Rectangle(), null);
249 assertSame(DragEvent.DRAG_DROPPED, e.getEventType());
250 assertTrue(e.isAccepted());
251 assertSame(TransferMode.LINK, e.getAcceptedTransferMode());
252 }
253
254 @Test public void longConstructorMakesDoneAccepted() {
255 DragEvent e = new DragEvent(new Rectangle(), new Rectangle(),
256 DragEvent.DRAG_DONE,
257 DragboardShim.getDragboard(
258 new ClipboardImpl()), 10, 20, 30, 40,
259 TransferMode.LINK, new Rectangle(), new Rectangle(), null);
260 assertSame(DragEvent.DRAG_DONE, e.getEventType());
261 assertTrue(e.isAccepted());
262 assertSame(TransferMode.LINK, e.getAcceptedTransferMode());
263 }
264
265 /************************************************************************/
266 /* DRAG INITIATION */
267 /************************************************************************/
268
269
270 @Test
271 public void dragDetectionShouldUseHysteresis() {
272 Node n = oneNode();
273 MouseEventGenerator gen = new MouseEventGenerator();
274
275 EventHandler<MouseEvent> thirdEventFailsHysteresis =
276 event -> {
277 counter++;
278 assertTrue((counter != 3 && !event.isDragDetect()) ||
|