1 /* 2 * Copyright (c) 2012, 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 test.javafx.scene.input; 27 28 import test.com.sun.javafx.pgstub.StubScene; 29 import test.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.ParentShim; 35 import javafx.scene.Scene; 36 import javafx.scene.input.MouseEvent; 37 import javafx.scene.input.PickResult; 38 import javafx.scene.input.RotateEvent; 39 import javafx.scene.shape.Rectangle; 40 import javafx.stage.Stage; 41 import org.junit.Assert; 42 import org.junit.Test; 43 import static org.junit.Assert.*; 44 45 public class RotateEventTest { 46 47 private boolean rotated; 48 private boolean rotated2; 49 private PickResult pickRes; 50 51 @Test public void testShortConstructor() { 52 Rectangle node = new Rectangle(); 53 node.setTranslateX(3); 54 node.setTranslateY(2); 55 node.setTranslateZ(50); 56 57 pickRes = new PickResult(node, new Point3D(15, 25, 100), 33); 58 RotateEvent e = new RotateEvent( 59 RotateEvent.ROTATION_FINISHED, 10, 20, 30, 40, 60 false, true, false, true, false, true, 61 45, 55, pickRes); 62 63 assertSame(RotateEvent.ROTATION_FINISHED, e.getEventType()); 64 assertSame(pickRes, e.getPickResult()); 65 assertEquals(18, e.getX(), 10e-20); 66 assertEquals(27, e.getY(), 10e-20); 67 assertEquals(150, e.getZ(), 10e-20); 68 assertEquals(10, e.getSceneX(), 10e-20); 69 assertEquals(20, e.getSceneY(), 10e-20); 70 assertEquals(30, e.getScreenX(), 10e-20); 71 assertEquals(40, e.getScreenY(), 10e-20); 72 assertFalse(e.isShiftDown()); 73 assertTrue(e.isControlDown()); 74 assertFalse(e.isAltDown()); 75 assertTrue(e.isMetaDown()); 76 assertFalse(e.isDirect()); 77 assertTrue(e.isInertia()); 78 assertEquals(45.0, e.getAngle(), 10e-20); 79 assertEquals(55.0, e.getTotalAngle(), 10e-20); 80 assertSame(Event.NULL_SOURCE_TARGET, e.getSource()); 81 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget()); 82 assertFalse(e.isConsumed()); 83 84 e = new RotateEvent( 85 RotateEvent.ROTATION_FINISHED, 10, 20, 30, 40, 86 true, false, true, false, true, false, 87 45, 55, pickRes); 88 assertTrue(e.isShiftDown()); 89 assertFalse(e.isControlDown()); 90 assertTrue(e.isAltDown()); 91 assertFalse(e.isMetaDown()); 92 assertTrue(e.isDirect()); 93 assertFalse(e.isInertia()); 94 } 95 96 @Test public void testShortConstructorWithoutPickResult() { 97 RotateEvent e = new RotateEvent( 98 RotateEvent.ROTATION_FINISHED, 10, 20, 30, 40, 99 false, true, false, true, false, true, 100 45, 55, null); 101 102 assertEquals(10, e.getX(), 10e-20); 103 assertEquals(20, e.getY(), 10e-20); 104 assertEquals(0, e.getZ(), 10e-20); 105 assertEquals(10, e.getSceneX(), 10e-20); 106 assertEquals(20, e.getSceneY(), 10e-20); 107 assertEquals(30, e.getScreenX(), 10e-20); 108 assertEquals(40, e.getScreenY(), 10e-20); 109 assertNotNull(e.getPickResult()); 110 assertNotNull(e.getPickResult().getIntersectedPoint()); 111 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20); 112 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20); 113 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20); 114 assertSame(Event.NULL_SOURCE_TARGET, e.getSource()); 115 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget()); 116 } 117 118 @Test public void testLongConstructor() { 119 Rectangle node = new Rectangle(10, 10); 120 node.setTranslateX(3); 121 node.setTranslateY(2); 122 node.setTranslateZ(50); 123 Rectangle n1 = new Rectangle(10, 10); 124 Rectangle n2 = new Rectangle(10, 10); 125 126 pickRes = new PickResult(node, new Point3D(15, 25, 100), 33); 127 RotateEvent e = new RotateEvent(n1, n2, 128 RotateEvent.ROTATION_FINISHED, 10, 20, 30, 40, 129 false, true, false, true, false, true, 130 45, 55, pickRes); 131 132 assertSame(n1, e.getSource()); 133 assertSame(n2, e.getTarget()); 134 assertSame(RotateEvent.ROTATION_FINISHED, e.getEventType()); 135 assertSame(pickRes, e.getPickResult()); 136 assertEquals(18, e.getX(), 10e-20); 137 assertEquals(27, e.getY(), 10e-20); 138 assertEquals(150, e.getZ(), 10e-20); 139 assertEquals(10, e.getSceneX(), 10e-20); 140 assertEquals(20, e.getSceneY(), 10e-20); 141 assertEquals(30, e.getScreenX(), 10e-20); 142 assertEquals(40, e.getScreenY(), 10e-20); 143 assertFalse(e.isShiftDown()); 144 assertTrue(e.isControlDown()); 145 assertFalse(e.isAltDown()); 146 assertTrue(e.isMetaDown()); 147 assertFalse(e.isDirect()); 148 assertTrue(e.isInertia()); 149 assertEquals(45.0, e.getAngle(), 10e-20); 150 assertEquals(55.0, e.getTotalAngle(), 10e-20); 151 assertFalse(e.isConsumed()); 152 153 e = new RotateEvent(n1, n2, 154 RotateEvent.ROTATION_FINISHED, 10, 20, 30, 40, 155 true, false, true, false, true, false, 156 45, 55, pickRes); 157 assertTrue(e.isShiftDown()); 158 assertFalse(e.isControlDown()); 159 assertTrue(e.isAltDown()); 160 assertFalse(e.isMetaDown()); 161 assertTrue(e.isDirect()); 162 assertFalse(e.isInertia()); 163 } 164 165 @Test public void testLongConstructorWithoutPickResult() { 166 Rectangle n1 = new Rectangle(10, 10); 167 Rectangle n2 = new Rectangle(10, 10); 168 RotateEvent e = new RotateEvent(n1, n2, 169 RotateEvent.ROTATION_FINISHED, 10, 20, 30, 40, 170 false, true, false, true, false, true, 171 45, 55, null); 172 173 assertSame(n1, e.getSource()); 174 assertSame(n2, e.getTarget()); 175 assertEquals(10, e.getX(), 10e-20); 176 assertEquals(20, e.getY(), 10e-20); 177 assertEquals(0, e.getZ(), 10e-20); 178 assertEquals(10, e.getSceneX(), 10e-20); 179 assertEquals(20, e.getSceneY(), 10e-20); 180 assertEquals(30, e.getScreenX(), 10e-20); 181 assertEquals(40, e.getScreenY(), 10e-20); 182 assertNotNull(e.getPickResult()); 183 assertNotNull(e.getPickResult().getIntersectedPoint()); 184 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20); 185 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20); 186 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20); 187 } 188 189 @Test 190 public void shouldDeliverRotateEventToPickedNode() { 191 Scene scene = createScene(); 192 Rectangle rect = 193 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 194 195 rotated = false; 196 rect.setOnRotate(event -> { 197 rotated = true; 198 }); 199 200 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 201 RotateEvent.ROTATE, 1, 1, 202 50, 50, 50, 50, false, false, false, false, false, false); 203 204 assertFalse(rotated); 205 206 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 207 RotateEvent.ROTATE, 1, 1, 208 150, 150, 150, 150, false, false, false, false, false, false); 209 210 assertTrue(rotated); 211 } 212 213 @Test 214 public void shouldPassAngles() { 215 Scene scene = createScene(); 216 Rectangle rect = 217 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 218 219 rotated = false; 220 rect.setOnRotate(event -> { 221 Assert.assertEquals(90, event.getAngle(), 0.0001); 222 Assert.assertEquals(-180, event.getTotalAngle(), 0.0001); 223 rotated = true; 224 }); 225 226 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 227 RotateEvent.ROTATE, 90, -180, 228 150, 150, 150, 150, false, false, false, false, false, false); 229 230 assertTrue(rotated); 231 } 232 233 @Test 234 public void shouldPassModifiers() { 235 Scene scene = createScene(); 236 Rectangle rect = 237 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 238 239 rotated = false; 240 rect.setOnRotate(event -> { 241 assertTrue(event.isShiftDown()); 242 assertFalse(event.isControlDown()); 243 assertTrue(event.isAltDown()); 244 assertFalse(event.isMetaDown()); 245 rotated = true; 246 }); 247 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 248 RotateEvent.ROTATE, 2, 3, 249 150, 150, 150, 150, true, false, true, false, false, false); 250 assertTrue(rotated); 251 252 rotated = false; 253 rect.setOnRotate(event -> { 254 assertFalse(event.isShiftDown()); 255 assertTrue(event.isControlDown()); 256 assertFalse(event.isAltDown()); 257 assertTrue(event.isMetaDown()); 258 rotated = true; 259 }); 260 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 261 RotateEvent.ROTATE, 2, 3, 262 150, 150, 150, 150, false, true, false, true, false, false); 263 assertTrue(rotated); 264 } 265 266 @Test 267 public void shouldPassDirect() { 268 Scene scene = createScene(); 269 Rectangle rect = 270 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 271 272 rotated = false; 273 rect.setOnRotate(event -> { 274 assertTrue(event.isDirect()); 275 rotated = true; 276 }); 277 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 278 RotateEvent.ROTATE, 2, 3, 279 150, 150, 150, 150, true, false, true, false, true, false); 280 assertTrue(rotated); 281 282 rotated = false; 283 rect.setOnRotate(event -> { 284 assertFalse(event.isDirect()); 285 rotated = true; 286 }); 287 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 288 RotateEvent.ROTATE, 2, 3, 289 150, 150, 150, 150, false, true, false, true, false, false); 290 assertTrue(rotated); 291 } 292 293 @Test 294 public void shouldPassInertia() { 295 Scene scene = createScene(); 296 Rectangle rect = 297 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 298 299 rotated = false; 300 rect.setOnRotate(event -> { 301 assertTrue(event.isInertia()); 302 rotated = true; 303 }); 304 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 305 RotateEvent.ROTATE, 2, 3, 306 150, 150, 150, 150, true, false, true, false, true, true); 307 assertTrue(rotated); 308 309 rotated = false; 310 rect.setOnRotate(event -> { 311 assertFalse(event.isInertia()); 312 rotated = true; 313 }); 314 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 315 RotateEvent.ROTATE, 2, 3, 316 150, 150, 150, 150, false, true, false, true, true, false); 317 assertTrue(rotated); 318 } 319 320 @Test 321 public void shouldPassEventType() { 322 Scene scene = createScene(); 323 Rectangle rect = 324 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 325 326 rotated = false; 327 rect.setOnRotationStarted(event -> { 328 rotated = true; 329 }); 330 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 331 RotateEvent.ROTATION_STARTED, 2, 3, 332 150, 150, 150, 150, true, false, true, false, true, false); 333 assertTrue(rotated); 334 335 rotated = false; 336 rect.setOnRotationFinished(event -> { 337 rotated = true; 338 }); 339 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 340 RotateEvent.ROTATION_FINISHED, 2, 3, 341 150, 150, 150, 150, true, false, true, false, true, false); 342 assertTrue(rotated); 343 } 344 345 @Test 346 public void handlingAnyShouldGetAllTypes() { 347 Scene scene = createScene(); 348 Rectangle rect = 349 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 350 351 rect.addEventHandler(RotateEvent.ANY, event -> { 352 rotated = true; 353 }); 354 355 rotated = false; 356 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 357 RotateEvent.ROTATION_STARTED, 2, 3, 358 150, 150, 150, 150, true, false, true, false, true, false); 359 assertTrue(rotated); 360 361 rotated = false; 362 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 363 RotateEvent.ROTATE, 2, 3, 364 150, 150, 150, 150, true, false, true, false, true, false); 365 assertTrue(rotated); 366 367 rotated = false; 368 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 369 RotateEvent.ROTATION_FINISHED, 2, 3, 370 150, 150, 150, 150, true, false, true, false, true, false); 371 assertTrue(rotated); 372 } 373 374 @Test 375 public void shouldDeliverWholeGestureToOneNode() { 376 Scene scene = createScene(); 377 Rectangle rect1 = 378 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 379 Rectangle rect2 = 380 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 381 382 rect1.addEventHandler(RotateEvent.ANY, event -> { 383 rotated = true; 384 }); 385 rect2.addEventHandler(RotateEvent.ANY, event -> { 386 rotated2 = true; 387 }); 388 389 rotated = false; 390 rotated2 = false; 391 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 392 RotateEvent.ROTATION_STARTED, 2, 3, 393 150, 150, 150, 150, true, false, true, false, true, false); 394 assertTrue(rotated); 395 assertFalse(rotated2); 396 397 rotated = false; 398 rotated2 = false; 399 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 400 RotateEvent.ROTATE, 2, 3, 401 250, 250, 250, 250, true, false, true, false, true, false); 402 assertTrue(rotated); 403 assertFalse(rotated2); 404 405 rotated = false; 406 rotated2 = false; 407 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 408 RotateEvent.ROTATION_FINISHED, 2, 3, 409 250, 250, 250, 250, true, false, true, false, true, false); 410 assertTrue(rotated); 411 assertFalse(rotated2); 412 } 413 414 @Test 415 public void shouldCompute3dCoordinates() { 416 Scene scene = createScene(); 417 Rectangle rect = 418 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 419 rect.setTranslateZ(50); 420 421 rotated = false; 422 rotated2 = false; 423 rect.setOnRotate(event -> { 424 Assert.assertEquals(150, event.getX(), 0.00001); 425 Assert.assertEquals(150, event.getY(), 0.00001); 426 Assert.assertEquals(0, event.getZ(), 0.00001); 427 rotated = true; 428 }); 429 430 scene.setOnRotate(event -> { 431 Assert.assertEquals(150, event.getX(), 0.00001); 432 Assert.assertEquals(150, event.getY(), 0.00001); 433 Assert.assertEquals(50, event.getZ(), 0.00001); 434 rotated2 = true; 435 }); 436 437 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 438 RotateEvent.ROTATE, 1, 1, 439 150, 150, 150, 150, false, false, false, false, false, false); 440 441 assertTrue(rotated); 442 assertTrue(rotated2); 443 } 444 445 @Test 446 public void shouldContainPickResult() { 447 Scene scene = createScene(); 448 Rectangle rect1 = 449 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 450 Rectangle rect2 = 451 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 452 453 rect1.addEventHandler(RotateEvent.ANY, event -> { 454 pickRes = event.getPickResult(); 455 rotated = true; 456 }); 457 rect2.addEventHandler(RotateEvent.ANY, event -> { 458 pickRes = event.getPickResult(); 459 rotated2 = true; 460 }); 461 462 rotated = false; 463 rotated2 = false; 464 pickRes = null; 465 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 466 RotateEvent.ROTATION_STARTED, 2, 3, 467 150, 150, 150, 150, true, false, true, false, true, false); 468 assertTrue(rotated); 469 assertFalse(rotated2); 470 assertNotNull(pickRes); 471 assertSame(rect1, pickRes.getIntersectedNode()); 472 assertEquals(150, pickRes.getIntersectedPoint().getX(), 0.00001); 473 assertEquals(150, pickRes.getIntersectedPoint().getY(), 0.00001); 474 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 475 476 rotated = false; 477 rotated2 = false; 478 pickRes = null; 479 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 480 RotateEvent.ROTATE, 2, 3, 481 250, 250, 250, 250, true, false, true, false, true, false); 482 assertTrue(rotated); 483 assertFalse(rotated2); 484 assertNotNull(pickRes); 485 assertSame(rect2, pickRes.getIntersectedNode()); 486 assertEquals(250, pickRes.getIntersectedPoint().getX(), 0.00001); 487 assertEquals(250, pickRes.getIntersectedPoint().getY(), 0.00001); 488 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 489 490 rotated = false; 491 rotated2 = false; 492 pickRes = null; 493 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 494 RotateEvent.ROTATION_FINISHED, 2, 3, 495 250, 250, 250, 250, true, false, true, false, true, false); 496 assertTrue(rotated); 497 assertFalse(rotated2); 498 assertNotNull(pickRes); 499 assertSame(rect2, pickRes.getIntersectedNode()); 500 assertEquals(250, pickRes.getIntersectedPoint().getX(), 0.00001); 501 assertEquals(250, pickRes.getIntersectedPoint().getY(), 0.00001); 502 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 503 } 504 505 @Test 506 public void unknownLocationShouldBeReplacedByMouseLocation() { 507 Scene scene = createScene(); 508 Rectangle rect1 = 509 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 510 Rectangle rect2 = 511 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 512 rect1.addEventHandler(RotateEvent.ANY, event -> { 513 rotated = true; 514 }); 515 516 MouseEventGenerator generator = new MouseEventGenerator(); 517 518 rotated = false; 519 rotated2 = false; 520 rect2.setOnRotationStarted(event -> { 521 Assert.assertEquals(250.0, event.getSceneX(), 0.0001); 522 Assert.assertEquals(250.0, event.getSceneY(), 0.0001); 523 rotated2 = true; 524 }); 525 scene.impl_processMouseEvent(generator.generateMouseEvent( 526 MouseEvent.MOUSE_MOVED, 250, 250)); 527 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 528 RotateEvent.ROTATION_STARTED, 2, 3, 529 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 530 true, false, true, false, true, false); 531 assertFalse(rotated); 532 assertTrue(rotated2); 533 534 rotated = false; 535 rotated2 = false; 536 rect2.setOnRotate(event -> { 537 Assert.assertEquals(150.0, event.getSceneX(), 0.0001); 538 Assert.assertEquals(150.0, event.getSceneY(), 0.0001); 539 rotated2 = true; 540 }); 541 scene.impl_processMouseEvent(generator.generateMouseEvent( 542 MouseEvent.MOUSE_MOVED, 150, 150)); 543 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 544 RotateEvent.ROTATE, 2, 3, 545 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 546 true, false, true, false, true, false); 547 assertFalse(rotated); 548 assertTrue(rotated2); 549 550 rotated = false; 551 rotated2 = false; 552 rect2.setOnRotationFinished(event -> { 553 Assert.assertEquals(150.0, event.getSceneX(), 0.0001); 554 Assert.assertEquals(150.0, event.getSceneY(), 0.0001); 555 rotated2 = true; 556 }); 557 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 558 RotateEvent.ROTATION_FINISHED, 2, 3, 559 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 560 true, false, true, false, true, false); 561 assertFalse(rotated); 562 assertTrue(rotated2); 563 } 564 565 @Test 566 public void finishedLocationShouldBeFixed() { 567 Scene scene = createScene(); 568 Rectangle rect = 569 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 570 rect.setOnRotationFinished(event -> { 571 Assert.assertEquals(250.0, event.getSceneX(), 0.0001); 572 Assert.assertEquals(250.0, event.getSceneY(), 0.0001); 573 rotated = true; 574 }); 575 576 rotated = false; 577 578 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 579 RotateEvent.ROTATION_STARTED, 2, 3, 580 150, 150, 150, 150, true, false, true, false, true, false); 581 582 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 583 RotateEvent.ROTATE, 2, 3, 584 250, 250, 250, 250, true, false, true, false, true, false); 585 586 assertFalse(rotated); 587 588 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 589 RotateEvent.ROTATION_FINISHED, 2, 3, 590 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 591 true, false, true, false, true, false); 592 593 assertTrue(rotated); 594 } 595 596 @Test 597 public void unknownLocalShouldBeFixedByMousePosition() { 598 MouseEventGenerator gen = new MouseEventGenerator(); 599 Scene scene = createScene(); 600 Rectangle rect = 601 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 602 rect.setOnRotate(event -> { 603 Assert.assertEquals(150.0, event.getSceneX(), 0.0001); 604 Assert.assertEquals(150.0, event.getSceneY(), 0.0001); 605 rotated = true; 606 }); 607 608 rotated = false; 609 610 scene.impl_processMouseEvent( 611 gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 250, 250)); 612 613 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 614 RotateEvent.ROTATE, 2, 3, 615 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 616 true, false, true, false, true, false); 617 618 assertFalse(rotated); 619 620 scene.impl_processMouseEvent( 621 gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 150, 150)); 622 623 ((StubScene) scene.impl_getPeer()).getListener().rotateEvent( 624 RotateEvent.ROTATE, 2, 3, 625 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 626 true, false, true, false, true, false); 627 628 assertTrue(rotated); 629 } 630 631 @Test public void testToString() { 632 RotateEvent e = new RotateEvent(RotateEvent.ROTATE, 633 100, 100, 200, 200, 634 false, false, false, false, 635 true, false, 10, 20, null); 636 637 String s = e.toString(); 638 639 assertNotNull(s); 640 assertFalse(s.isEmpty()); 641 } 642 643 private Scene createScene() { 644 final Group root = new Group(); 645 646 final Scene scene = new Scene(root, 400, 400); 647 648 Rectangle rect = new Rectangle(100, 100, 100, 100); 649 Rectangle rect2 = new Rectangle(200, 200, 100, 100); 650 651 ParentShim.getChildren(root).addAll(rect, rect2); 652 653 Stage stage = new Stage(); 654 stage.setScene(scene); 655 stage.show(); 656 657 return scene; 658 } 659 }