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 }