modules/graphics/src/test/java/test/javafx/scene/input/DragAndDropTest.java

Print this page
rev 9250 : 8134762: Refactor Javafx graphics module tests for clear separation of tests
Reviewed-by:


   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()) ||