1 /*
   2  * Copyright (c) 2010, 2014, 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 javafx.scene.input;
  27 
  28 import com.sun.javafx.pgstub.StubScene;
  29 import com.sun.javafx.test.MouseEventGenerator;
  30 import javafx.event.Event;
  31 import javafx.event.EventHandler;
  32 import javafx.geometry.Point3D;
  33 import javafx.scene.Group;
  34 import javafx.scene.Scene;
  35 import javafx.scene.shape.Rectangle;
  36 import javafx.stage.Stage;
  37 import org.junit.Assert;
  38 import org.junit.Test;
  39 import static org.junit.Assert.*;
  40 
  41 public class SwipeEventTest {
  42 
  43     private boolean swiped;
  44     private boolean swiped2;
  45 
  46     @Test public void testShortConstructor() {
  47         Rectangle node = new Rectangle();
  48         node.setTranslateX(3);
  49         node.setTranslateY(2);
  50         node.setTranslateZ(50);
  51 
  52         PickResult pickRes = new PickResult(node, new Point3D(15, 25, 100), 33);
  53         SwipeEvent e = new SwipeEvent(
  54                 SwipeEvent.SWIPE_UP, 10, 20, 30, 40,
  55                 false, true, false, true, false, 3, pickRes);
  56 
  57         assertSame(SwipeEvent.SWIPE_UP, e.getEventType());
  58         assertSame(pickRes, e.getPickResult());
  59         assertEquals(18, e.getX(), 10e-20);
  60         assertEquals(27, e.getY(), 10e-20);
  61         assertEquals(150, e.getZ(), 10e-20);
  62         assertEquals(10, e.getSceneX(), 10e-20);
  63         assertEquals(20, e.getSceneY(), 10e-20);
  64         assertEquals(30, e.getScreenX(), 10e-20);
  65         assertEquals(40, e.getScreenY(), 10e-20);
  66         assertFalse(e.isShiftDown());
  67         assertTrue(e.isControlDown());
  68         assertFalse(e.isAltDown());
  69         assertTrue(e.isMetaDown());
  70         assertFalse(e.isDirect());
  71         assertFalse(e.isInertia());
  72         assertEquals(3.0, e.getTouchCount(), 10e-20);
  73         assertSame(Event.NULL_SOURCE_TARGET, e.getSource());
  74         assertSame(Event.NULL_SOURCE_TARGET, e.getTarget());
  75         assertFalse(e.isConsumed());
  76 
  77         e = new SwipeEvent(
  78                 SwipeEvent.SWIPE_UP, 10, 20, 30, 40,
  79                 true, false, true, false, true, 3, pickRes);
  80         assertTrue(e.isShiftDown());
  81         assertFalse(e.isControlDown());
  82         assertTrue(e.isAltDown());
  83         assertFalse(e.isMetaDown());
  84         assertTrue(e.isDirect());
  85         assertFalse(e.isInertia());
  86     }
  87 
  88     @Test public void testShortConstructorWithoutPickResult() {
  89         SwipeEvent e = new SwipeEvent(
  90                 SwipeEvent.SWIPE_UP, 10, 20, 30, 40,
  91                 false, true, false, true, false, 3, null);
  92 
  93         assertEquals(10, e.getX(), 10e-20);
  94         assertEquals(20, e.getY(), 10e-20);
  95         assertEquals(0, e.getZ(), 10e-20);
  96         assertEquals(10, e.getSceneX(), 10e-20);
  97         assertEquals(20, e.getSceneY(), 10e-20);
  98         assertEquals(30, e.getScreenX(), 10e-20);
  99         assertEquals(40, e.getScreenY(), 10e-20);
 100         assertNotNull(e.getPickResult());
 101         assertNotNull(e.getPickResult().getIntersectedPoint());
 102         assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20);
 103         assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20);
 104         assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20);
 105         assertSame(Event.NULL_SOURCE_TARGET, e.getSource());
 106         assertSame(Event.NULL_SOURCE_TARGET, e.getTarget());
 107     }
 108 
 109     @Test public void testLongConstructor() {
 110         Rectangle node = new Rectangle(10, 10);
 111         node.setTranslateX(3);
 112         node.setTranslateY(2);
 113         node.setTranslateZ(50);
 114         Rectangle n1 = new Rectangle(10, 10);
 115         Rectangle n2 = new Rectangle(10, 10);
 116 
 117         PickResult pickRes = new PickResult(node, new Point3D(15, 25, 100), 33);
 118         SwipeEvent e = new SwipeEvent(n1, n2,
 119                 SwipeEvent.SWIPE_UP, 10, 20, 30, 40,
 120                 false, true, false, true, false, 3, pickRes);
 121 
 122         assertSame(n1, e.getSource());
 123         assertSame(n2, e.getTarget());
 124         assertSame(SwipeEvent.SWIPE_UP, e.getEventType());
 125         assertSame(pickRes, e.getPickResult());
 126         assertEquals(18, e.getX(), 10e-20);
 127         assertEquals(27, e.getY(), 10e-20);
 128         assertEquals(150, e.getZ(), 10e-20);
 129         assertEquals(10, e.getSceneX(), 10e-20);
 130         assertEquals(20, e.getSceneY(), 10e-20);
 131         assertEquals(30, e.getScreenX(), 10e-20);
 132         assertEquals(40, e.getScreenY(), 10e-20);
 133         assertFalse(e.isShiftDown());
 134         assertTrue(e.isControlDown());
 135         assertFalse(e.isAltDown());
 136         assertTrue(e.isMetaDown());
 137         assertFalse(e.isDirect());
 138         assertFalse(e.isInertia());
 139         assertEquals(3.0, e.getTouchCount(), 10e-20);
 140         assertFalse(e.isConsumed());
 141 
 142         e = new SwipeEvent(n1, n2,
 143                 SwipeEvent.SWIPE_UP, 10, 20, 30, 40,
 144                 true, false, true, false, true, 3, pickRes);
 145         assertTrue(e.isShiftDown());
 146         assertFalse(e.isControlDown());
 147         assertTrue(e.isAltDown());
 148         assertFalse(e.isMetaDown());
 149         assertTrue(e.isDirect());
 150         assertFalse(e.isInertia());
 151     }
 152 
 153     @Test public void testLongConstructorWithoutPickResult() {
 154         Rectangle n1 = new Rectangle(10, 10);
 155         Rectangle n2 = new Rectangle(10, 10);
 156         SwipeEvent e = new SwipeEvent(n1, n2,
 157                 SwipeEvent.SWIPE_UP, 10, 20, 30, 40,
 158                 false, true, false, true, false, 3, null);
 159 
 160         assertSame(n1, e.getSource());
 161         assertSame(n2, e.getTarget());
 162         assertEquals(10, e.getX(), 10e-20);
 163         assertEquals(20, e.getY(), 10e-20);
 164         assertEquals(0, e.getZ(), 10e-20);
 165         assertEquals(10, e.getSceneX(), 10e-20);
 166         assertEquals(20, e.getSceneY(), 10e-20);
 167         assertEquals(30, e.getScreenX(), 10e-20);
 168         assertEquals(40, e.getScreenY(), 10e-20);
 169         assertNotNull(e.getPickResult());
 170         assertNotNull(e.getPickResult().getIntersectedPoint());
 171         assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20);
 172         assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20);
 173         assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20);
 174     }
 175 
 176     @Test
 177     public void shouldDeliverSwipeLeftEventToPickedNode() {
 178         Scene scene = createScene();
 179         Rectangle rect =
 180                 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
 181 
 182         swiped = false;
 183         rect.setOnSwipeLeft(event -> {
 184             swiped = true;
 185         });
 186 
 187         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 188                 SwipeEvent.SWIPE_LEFT, 1, 1, 1, 1, 1,
 189                 false, false, false, false, false);
 190 
 191         assertFalse(swiped);
 192 
 193         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 194                 SwipeEvent.SWIPE_LEFT, 1, 150, 150, 150, 150,
 195                 false, false, false, false, false);
 196 
 197         assertTrue(swiped);
 198     }
 199 
 200     @Test
 201     public void shouldPassTouchCount() {
 202         Scene scene = createScene();
 203         Rectangle rect =
 204                 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
 205 
 206         swiped = false;
 207 
 208         rect.setOnSwipeUp(event -> {
 209             Assert.assertEquals(3, event.getTouchCount());
 210             swiped = true;
 211         });
 212 
 213         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 214                 SwipeEvent.SWIPE_UP, 3, 150, 150, 150, 150,
 215                 false, false, false, false, false);
 216 
 217         assertTrue(swiped);
 218     }
 219 
 220     @Test
 221     public void shouldPassCoordinates() {
 222         Scene scene = createScene();
 223         Rectangle rect =
 224                 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
 225 
 226         swiped = false;
 227 
 228         rect.setOnSwipeUp(event -> {
 229             Assert.assertEquals(151.0, event.getX(), 0.0001);
 230             Assert.assertEquals(152.0, event.getY(), 0.0001);
 231             Assert.assertEquals(153.0, event.getScreenX(), 0.0001);
 232             Assert.assertEquals(154.0, event.getScreenY(), 0.0001);
 233             swiped = true;
 234         });
 235 
 236         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 237                 SwipeEvent.SWIPE_UP, 3, 151, 152, 153, 154,
 238                 false, false, false, false, false);
 239 
 240         assertTrue(swiped);
 241     }
 242 
 243     @Test
 244     public void shouldPassDirect() {
 245         Scene scene = createScene();
 246         Rectangle rect =
 247                 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
 248 
 249         swiped = false;
 250 
 251         rect.setOnSwipeDown(event -> {
 252             Assert.assertEquals(swiped, event.isDirect());
 253             swiped = !swiped;
 254         });
 255 
 256         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 257                 SwipeEvent.SWIPE_DOWN, 3, 151, 152, 153, 154,
 258                 false, false, false, false, false);
 259 
 260         assertTrue(swiped);
 261 
 262         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 263                 SwipeEvent.SWIPE_DOWN, 3, 151, 152, 153, 154,
 264                 false, false, false, false, true);
 265 
 266         assertFalse(swiped);
 267     }
 268 
 269     @Test
 270     public void shouldCompute3dCoordinates() {
 271         Scene scene = createScene();
 272         Rectangle rect =
 273                 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
 274         rect.setTranslateZ(50);
 275 
 276         swiped = false;
 277         swiped2 = false;
 278         rect.setOnSwipeLeft(event -> {
 279             Assert.assertEquals(150, event.getX(), 0.00001);
 280             Assert.assertEquals(150, event.getY(), 0.00001);
 281             Assert.assertEquals(0, event.getZ(), 0.00001);
 282             swiped = true;
 283         });
 284 
 285         scene.setOnSwipeLeft(event -> {
 286             Assert.assertEquals(150, event.getX(), 0.00001);
 287             Assert.assertEquals(150, event.getY(), 0.00001);
 288             Assert.assertEquals(50, event.getZ(), 0.00001);
 289             swiped2 = true;
 290         });
 291 
 292         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 293                 SwipeEvent.SWIPE_LEFT, 1, 150, 150, 150, 150,
 294                 false, false, false, false, false);
 295 
 296         assertTrue(swiped);
 297         assertTrue(swiped2);
 298     }
 299 
 300     @Test
 301     public void shouldContainPickResult() {
 302         Scene scene = createScene();
 303         final Rectangle rect =
 304                 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
 305 
 306         swiped = false;
 307 
 308         rect.setOnSwipeUp(event -> {
 309             PickResult pickRes = event.getPickResult();
 310             assertNotNull(pickRes);
 311             assertSame(rect, pickRes.getIntersectedNode());
 312             assertEquals(151, pickRes.getIntersectedPoint().getX(), 0.00001);
 313             assertEquals(152, pickRes.getIntersectedPoint().getY(), 0.00001);
 314             assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001);
 315             swiped = true;
 316         });
 317 
 318         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 319                 SwipeEvent.SWIPE_UP, 3, 151, 152, 153, 154,
 320                 false, false, false, false, false);
 321 
 322         assertTrue(swiped);
 323     }
 324 
 325     @Test
 326     public void handlingAnyShouldGetAllTypes() {
 327         Scene scene = createScene();
 328         Rectangle rect =
 329                 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
 330 
 331         rect.addEventHandler(SwipeEvent.ANY, event -> {
 332             swiped = true;
 333         });
 334 
 335         swiped = false;
 336         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 337                 SwipeEvent.SWIPE_UP, 3, 151, 152, 153, 154,
 338                 false, false, false, false, false);
 339         assertTrue(swiped);
 340 
 341         swiped = false;
 342         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 343                 SwipeEvent.SWIPE_DOWN, 3, 151, 152, 153, 154,
 344                 false, false, false, false, false);
 345         assertTrue(swiped);
 346 
 347         swiped = false;
 348         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 349                 SwipeEvent.SWIPE_LEFT, 3, 151, 152, 153, 154,
 350                 false, false, false, false, false);
 351         assertTrue(swiped);
 352 
 353         swiped = false;
 354         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 355                 SwipeEvent.SWIPE_RIGHT, 3, 151, 152, 153, 154,
 356                 false, false, false, false, false);
 357         assertTrue(swiped);
 358     }
 359 
 360     @Test
 361     public void unknownLocalShouldBeFixedByMousePosition() {
 362         MouseEventGenerator gen = new MouseEventGenerator();
 363         Scene scene = createScene();
 364         Rectangle rect =
 365                 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
 366 
 367         rect.setOnSwipeRight(event -> {
 368             Assert.assertEquals(150.0, event.getSceneX(), 0.0001);
 369             Assert.assertEquals(150.0, event.getSceneY(), 0.0001);
 370             swiped = true;
 371         });
 372 
 373         swiped = false;
 374 
 375         scene.impl_processMouseEvent(
 376                 gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 250, 250));
 377 
 378         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 379                 SwipeEvent.SWIPE_RIGHT, 3,
 380                 Double.NaN, Double.NaN, Double.NaN, Double.NaN,
 381                 false, false, false, false, false);
 382 
 383         assertFalse(swiped);
 384 
 385         scene.impl_processMouseEvent(
 386                 gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 150, 150));
 387 
 388         ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
 389                 SwipeEvent.SWIPE_RIGHT, 3,
 390                 Double.NaN, Double.NaN, Double.NaN, Double.NaN,
 391                 false, false, false, false, false);
 392 
 393         assertTrue(swiped);
 394     }
 395 
 396     @Test public void testToString() {
 397         SwipeEvent e = new SwipeEvent(SwipeEvent.SWIPE_RIGHT,
 398             100, 100, 200, 200,
 399             false, false, false, false,
 400             true, 3, null);
 401 
 402         String s = e.toString();
 403 
 404         assertNotNull(s);
 405         assertFalse(s.isEmpty());
 406     }
 407 
 408     private Scene createScene() {
 409         final Group root = new Group();
 410 
 411         final Scene scene = new Scene(root, 400, 400);
 412 
 413         Rectangle rect = new Rectangle(100, 100, 100, 100);
 414         Rectangle rect2 = new Rectangle(200, 200, 100, 100);
 415 
 416         root.getChildren().addAll(rect, rect2);
 417 
 418         Stage stage = new Stage();
 419         stage.setScene(scene);
 420         stage.show();
 421 
 422         return scene;
 423     }
 424 }