1 /*
   2  * Copyright (c) 2010, 2013, 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.  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 javafx.event.Event;
  29 import javafx.geometry.Point3D;
  30 import javafx.scene.Node;
  31 import javafx.scene.input.MouseButton;
  32 import javafx.scene.input.MouseDragEvent;
  33 import javafx.scene.input.MouseEvent;
  34 import javafx.scene.input.PickResult;
  35 import javafx.scene.shape.Rectangle;
  36 import static org.junit.Assert.assertEquals;
  37 import static org.junit.Assert.assertFalse;
  38 import static org.junit.Assert.assertNotNull;
  39 import static org.junit.Assert.assertSame;
  40 import static org.junit.Assert.assertTrue;
  41 
  42 import org.junit.Test;
  43 
  44 public class MouseEventTest {
  45 
  46     private final Node node1 = new TestNode(5);
  47     private final Node node2 = new TestNode(10);
  48     private final MouseEvent doubleclick = new MouseEvent(
  49             MouseEvent.MOUSE_CLICKED,
  50             11, 12, 13, 14, MouseButton.PRIMARY, 2,
  51             true, false, true, false, false, true, false, false, true, false, null);
  52 
  53     @Test public void testShortConstructor() {
  54         Rectangle node = new Rectangle();
  55         node.setTranslateX(3);
  56         node.setTranslateY(2);
  57         node.setTranslateZ(50);
  58 
  59         PickResult pickRes = new PickResult(node, new Point3D(15, 25, 100), 33);
  60 
  61         MouseEvent e = new MouseEvent(MouseEvent.MOUSE_DRAGGED,
  62                 10, 20, 30, 40, MouseButton.MIDDLE, 3,
  63                 true, false, false, true,
  64                 false, true, false,
  65                 true, false, true, pickRes);
  66 
  67         assertSame(MouseEvent.MOUSE_DRAGGED, e.getEventType());
  68         assertEquals(18, e.getX(), 10e-20);
  69         assertEquals(27, e.getY(), 10e-20);
  70         assertEquals(150, e.getZ(), 10e-20);
  71         assertEquals(10, e.getSceneX(), 10e-20);
  72         assertEquals(20, e.getSceneY(), 10e-20);
  73         assertEquals(30, e.getScreenX(), 10e-20);
  74         assertEquals(40, e.getScreenY(), 10e-20);
  75         assertSame(MouseButton.MIDDLE, e.getButton());
  76         assertEquals(3, e.getClickCount());
  77         assertTrue(e.isShiftDown());
  78         assertFalse(e.isControlDown());
  79         assertFalse(e.isAltDown());
  80         assertTrue(e.isMetaDown());
  81         assertFalse(e.isPrimaryButtonDown());
  82         assertTrue(e.isMiddleButtonDown());
  83         assertFalse(e.isSecondaryButtonDown());
  84         assertTrue(e.isSynthesized());
  85         assertFalse(e.isPopupTrigger());
  86         assertTrue(e.isStillSincePress());
  87         assertFalse(e.isConsumed());
  88         assertSame(pickRes, e.getPickResult());
  89         assertSame(Event.NULL_SOURCE_TARGET, e.getSource());
  90         assertSame(Event.NULL_SOURCE_TARGET, e.getTarget());
  91 
  92         e = new MouseEvent(MouseEvent.MOUSE_DRAGGED,
  93                 10, 20, 30, 40, MouseButton.MIDDLE, 3,
  94                 false, true, true, false,
  95                 true, false, true,
  96                 false, true, false, pickRes);
  97 
  98         assertFalse(e.isShiftDown());
  99         assertTrue(e.isControlDown());
 100         assertTrue(e.isAltDown());
 101         assertFalse(e.isMetaDown());
 102         assertTrue(e.isPrimaryButtonDown());
 103         assertFalse(e.isMiddleButtonDown());
 104         assertTrue(e.isSecondaryButtonDown());
 105         assertFalse(e.isSynthesized());
 106         assertTrue(e.isPopupTrigger());
 107         assertFalse(e.isStillSincePress());
 108     }
 109 
 110     @Test public void testShortConstructorWithoutPickResult() {
 111         MouseDragEvent e = new MouseDragEvent(MouseDragEvent.MOUSE_DRAG_OVER,
 112                 10, 20, 30, 40, MouseButton.MIDDLE, 3,
 113                 true, false, false, true,
 114                 false, true, false,
 115                 true, false, null, new Rectangle());
 116         assertEquals(10, e.getX(), 10e-20);
 117         assertEquals(20, e.getY(), 10e-20);
 118         assertEquals(0, e.getZ(), 10e-20);
 119         assertEquals(10, e.getSceneX(), 10e-20);
 120         assertEquals(20, e.getSceneY(), 10e-20);
 121         assertEquals(30, e.getScreenX(), 10e-20);
 122         assertEquals(40, e.getScreenY(), 10e-20);
 123         assertNotNull(e.getPickResult());
 124         assertNotNull(e.getPickResult().getIntersectedPoint());
 125         assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20);
 126         assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20);
 127         assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20);
 128         assertSame(Event.NULL_SOURCE_TARGET, e.getSource());
 129         assertSame(Event.NULL_SOURCE_TARGET, e.getTarget());
 130     }
 131 
 132     @Test public void testLongConstructor() {
 133         Rectangle n1 = new Rectangle(10, 10);
 134         Rectangle n2 = new Rectangle(10, 10);
 135         Rectangle node = new Rectangle();
 136         node.setTranslateX(3);
 137         node.setTranslateY(2);
 138         node.setTranslateZ(50);
 139 
 140         PickResult pickRes = new PickResult(node, new Point3D(15, 25, 100), 33);
 141 
 142         MouseEvent e = new MouseEvent(n1, n2, MouseEvent.MOUSE_DRAGGED,
 143                 10, 20, 30, 40, MouseButton.MIDDLE, 3,
 144                 true, false, false, true,
 145                 false, true, false,
 146                 true, false, true, pickRes);
 147 
 148         assertSame(n1, e.getSource());
 149         assertSame(n2, e.getTarget());
 150         assertSame(MouseEvent.MOUSE_DRAGGED, e.getEventType());
 151         assertEquals(18, e.getX(), 10e-20);
 152         assertEquals(27, e.getY(), 10e-20);
 153         assertEquals(150, e.getZ(), 10e-20);
 154         assertEquals(10, e.getSceneX(), 10e-20);
 155         assertEquals(20, e.getSceneY(), 10e-20);
 156         assertEquals(30, e.getScreenX(), 10e-20);
 157         assertEquals(40, e.getScreenY(), 10e-20);
 158         assertSame(MouseButton.MIDDLE, e.getButton());
 159         assertEquals(3, e.getClickCount());
 160         assertTrue(e.isShiftDown());
 161         assertFalse(e.isControlDown());
 162         assertFalse(e.isAltDown());
 163         assertTrue(e.isMetaDown());
 164         assertFalse(e.isPrimaryButtonDown());
 165         assertTrue(e.isMiddleButtonDown());
 166         assertFalse(e.isSecondaryButtonDown());
 167         assertTrue(e.isSynthesized());
 168         assertFalse(e.isPopupTrigger());
 169         assertTrue(e.isStillSincePress());
 170         assertFalse(e.isConsumed());
 171         assertSame(pickRes, e.getPickResult());
 172 
 173         e = new MouseEvent(n1, n2, MouseEvent.MOUSE_DRAGGED,
 174                 10, 20, 30, 40, MouseButton.MIDDLE, 3,
 175                 false, true, true, false,
 176                 true, false, true,
 177                 false, true, false, pickRes);
 178 
 179         assertSame(n1, e.getSource());
 180         assertSame(n2, e.getTarget());
 181         assertFalse(e.isShiftDown());
 182         assertTrue(e.isControlDown());
 183         assertTrue(e.isAltDown());
 184         assertFalse(e.isMetaDown());
 185         assertTrue(e.isPrimaryButtonDown());
 186         assertFalse(e.isMiddleButtonDown());
 187         assertTrue(e.isSecondaryButtonDown());
 188         assertFalse(e.isSynthesized());
 189         assertTrue(e.isPopupTrigger());
 190         assertFalse(e.isStillSincePress());
 191     }
 192 
 193 
 194     @Test public void testLongConstructorWithoutPickResult() {
 195         Rectangle n1 = new Rectangle(10, 10);
 196         Rectangle n2 = new Rectangle(10, 10);
 197         MouseEvent e = new MouseEvent(n1, n2, MouseEvent.MOUSE_DRAGGED,
 198                 10, 20, 30, 40, MouseButton.MIDDLE, 3,
 199                 true, false, false, true,
 200                 false, true, false,
 201                 true, false, true, null);
 202         assertSame(n1, e.getSource());
 203         assertSame(n2, e.getTarget());
 204         assertEquals(10, e.getX(), 10e-20);
 205         assertEquals(20, e.getY(), 10e-20);
 206         assertEquals(0, e.getZ(), 10e-20);
 207         assertEquals(10, e.getSceneX(), 10e-20);
 208         assertEquals(20, e.getSceneY(), 10e-20);
 209         assertEquals(30, e.getScreenX(), 10e-20);
 210         assertEquals(40, e.getScreenY(), 10e-20);
 211         assertNotNull(e.getPickResult());
 212         assertNotNull(e.getPickResult().getIntersectedPoint());
 213         assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20);
 214         assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20);
 215         assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20);
 216     }
 217 
 218     @Test
 219     public void shouldCreateDoubleClickMouseEvent() {
 220         /* constructor called during initialization */
 221         assertEquals(11f, doubleclick.getX(), 0.0001);
 222         assertEquals(12f, doubleclick.getY(), 0.0001);
 223         assertEquals(11f, doubleclick.getSceneX(), 0.0001);
 224         assertEquals(12f, doubleclick.getSceneY(), 0.0001);
 225         assertEquals(13f, doubleclick.getScreenX(), 0.0001);
 226         assertEquals(14f, doubleclick.getScreenY(), 0.0001);
 227         assertSame(MouseButton.PRIMARY, doubleclick.getButton());
 228         assertEquals(2, doubleclick.getClickCount());
 229         assertTrue(doubleclick.isShiftDown());
 230         assertFalse(doubleclick.isControlDown());
 231         assertTrue(doubleclick.isAltDown());
 232         assertFalse(doubleclick.isMetaDown());
 233         assertTrue(doubleclick.isPopupTrigger());
 234         assertFalse(doubleclick.isPrimaryButtonDown());
 235         assertTrue(doubleclick.isMiddleButtonDown());
 236         assertFalse(doubleclick.isSecondaryButtonDown());
 237         assertSame(MouseEvent.MOUSE_CLICKED, doubleclick.getEventType());
 238         assertSame(MouseEvent.NULL_SOURCE_TARGET, doubleclick.getSource());
 239     }
 240 
 241     @Test
 242     public void shouldCopyMouseEvent() {
 243         MouseEvent copy = doubleclick.copyFor(node1, node2);
 244 
 245         assertEquals(6f, copy.getX(), 0.0001);
 246         assertEquals(7f, copy.getY(), 0.0001);
 247         assertEquals(11f, copy.getSceneX(), 0.0001);
 248         assertEquals(12f, copy.getSceneY(), 0.0001);
 249         assertEquals(13f, copy.getScreenX(), 0.0001);
 250         assertEquals(14f, copy.getScreenY(), 0.0001);
 251         assertSame(doubleclick.getButton(), copy.getButton());
 252         assertEquals(doubleclick.getClickCount(), copy.getClickCount());
 253         assertEquals(doubleclick.isShiftDown(), copy.isShiftDown());
 254         assertEquals(doubleclick.isControlDown(), copy.isControlDown());
 255         assertEquals(doubleclick.isAltDown(), copy.isAltDown());
 256         assertEquals(doubleclick.isMetaDown(), copy.isMetaDown());
 257         assertEquals(doubleclick.isPopupTrigger(),
 258                      copy.isPopupTrigger());
 259         assertEquals(doubleclick.isPrimaryButtonDown(), copy.isPrimaryButtonDown());
 260         assertEquals(doubleclick.isMiddleButtonDown(), copy.isMiddleButtonDown());
 261         assertEquals(doubleclick.isSecondaryButtonDown(), copy.isSecondaryButtonDown());
 262         assertSame(doubleclick.getEventType(), copy.getEventType());
 263         assertSame(node1, copy.getSource());
 264         assertSame(node2, copy.getTarget());
 265     }
 266 
 267     @Test
 268     public void shouldCopyMouseEventWithEventId() {
 269         MouseEvent copy = doubleclick.copyFor(node1, node2,
 270                 MouseEvent.MOUSE_ENTERED);
 271 
 272         assertEquals(6f, copy.getX(), 0.0001);
 273         assertEquals(7f, copy.getY(), 0.0001);
 274         assertEquals(11f, copy.getSceneX(), 0.0001);
 275         assertEquals(12f, copy.getSceneY(), 0.0001);
 276         assertEquals(13f, copy.getScreenX(), 0.0001);
 277         assertEquals(14f, copy.getScreenY(), 0.0001);
 278         assertSame(doubleclick.getButton(), copy.getButton());
 279         assertEquals(doubleclick.getClickCount(), copy.getClickCount());
 280         assertEquals(doubleclick.isShiftDown(), copy.isShiftDown());
 281         assertEquals(doubleclick.isControlDown(), copy.isControlDown());
 282         assertEquals(doubleclick.isAltDown(), copy.isAltDown());
 283         assertEquals(doubleclick.isMetaDown(), copy.isMetaDown());
 284         assertEquals(doubleclick.isPopupTrigger(),
 285                      copy.isPopupTrigger());
 286         assertEquals(doubleclick.isPrimaryButtonDown(), copy.isPrimaryButtonDown());
 287         assertEquals(doubleclick.isMiddleButtonDown(), copy.isMiddleButtonDown());
 288         assertEquals(doubleclick.isSecondaryButtonDown(), copy.isSecondaryButtonDown());
 289         assertSame(MouseEvent.MOUSE_ENTERED, copy.getEventType());
 290         assertSame(node1, copy.getSource());
 291         assertSame(node2, copy.getTarget());
 292     }
 293 
 294     @Test
 295     public void shouldCopyMouseEventWithNode() {
 296         MouseEvent temp = doubleclick.copyFor(node1, node2);
 297         MouseEvent copy = temp.copyFor(node2, node1);
 298 
 299         assertEquals(1f, copy.getX(), 0.0001);
 300         assertEquals(2f, copy.getY(), 0.0001);
 301         assertEquals(11f, copy.getSceneX(), 0.0001);
 302         assertEquals(12f, copy.getSceneY(), 0.0001);
 303         assertEquals(13f, copy.getScreenX(), 0.0001);
 304         assertEquals(14f, copy.getScreenY(), 0.0001);
 305         assertSame(doubleclick.getButton(), copy.getButton());
 306         assertEquals(doubleclick.getClickCount(), copy.getClickCount());
 307         assertEquals(doubleclick.isShiftDown(), copy.isShiftDown());
 308         assertEquals(doubleclick.isControlDown(), copy.isControlDown());
 309         assertEquals(doubleclick.isAltDown(), copy.isAltDown());
 310         assertEquals(doubleclick.isMetaDown(), copy.isMetaDown());
 311         assertEquals(doubleclick.isPopupTrigger(),
 312                      copy.isPopupTrigger());
 313         assertEquals(doubleclick.isPrimaryButtonDown(), copy.isPrimaryButtonDown());
 314         assertEquals(doubleclick.isMiddleButtonDown(), copy.isMiddleButtonDown());
 315         assertEquals(doubleclick.isSecondaryButtonDown(), copy.isSecondaryButtonDown());
 316         assertSame(doubleclick.getEventType(), copy.getEventType());
 317         assertSame(node2, copy.getSource());
 318         assertSame(node1, copy.getTarget());
 319     }
 320 
 321     @Test
 322     public void shouldCopyMouseEventWithDrag() {
 323         MouseEvent copy = doubleclick.copyFor(node1, node2);
 324 
 325         assertEquals(6f, copy.getX(), 0.0001);
 326         assertEquals(7f, copy.getY(), 0.0001);
 327         assertEquals(11f, copy.getSceneX(), 0.0001);
 328         assertEquals(12f, copy.getSceneY(), 0.0001);
 329         assertEquals(13f, copy.getScreenX(), 0.0001);
 330         assertEquals(14f, copy.getScreenY(), 0.0001);
 331         assertSame(doubleclick.getButton(), copy.getButton());
 332         assertEquals(doubleclick.getClickCount(), copy.getClickCount());
 333         assertEquals(doubleclick.isShiftDown(), copy.isShiftDown());
 334         assertEquals(doubleclick.isControlDown(), copy.isControlDown());
 335         assertEquals(doubleclick.isAltDown(), copy.isAltDown());
 336         assertEquals(doubleclick.isMetaDown(), copy.isMetaDown());
 337         assertEquals(doubleclick.isPopupTrigger(),
 338                      copy.isPopupTrigger());
 339         assertEquals(doubleclick.isPrimaryButtonDown(), copy.isPrimaryButtonDown());
 340         assertEquals(doubleclick.isMiddleButtonDown(), copy.isMiddleButtonDown());
 341         assertEquals(doubleclick.isSecondaryButtonDown(), copy.isSecondaryButtonDown());
 342         assertSame(doubleclick.getEventType(), copy.getEventType());
 343         assertSame(node1, copy.getSource());
 344         assertSame(node2, copy.getTarget());
 345     }
 346 
 347 
 348     @Test
 349     public void shouldGetNonEmptyDescription() {
 350         String s = doubleclick.toString();
 351         assertNotNull(s);
 352         assertFalse(s.isEmpty());
 353     }
 354 
 355 
 356 }