1 /* 2 * Copyright (c) 2011, 2015, 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.animation; 27 28 import com.sun.javafx.animation.TickCalculation; 29 import javafx.animation.Animation.Status; 30 import javafx.animation.Interpolator; 31 import javafx.animation.ParallelTransition; 32 import javafx.animation.ParallelTransitionShim; 33 import javafx.animation.Transition; 34 import javafx.animation.TransitionShim; 35 import javafx.beans.property.LongProperty; 36 import javafx.beans.property.SimpleLongProperty; 37 import javafx.util.Duration; 38 import static org.junit.Assert.assertEquals; 39 import org.junit.Before; 40 import org.junit.Test; 41 42 public class ParallelTransitionPlayTest { 43 public static final double TICK_MILLIS = TickCalculation.toMillis(100); 44 public static final long TICK_STEP = Math.round(TICK_MILLIS); 45 46 LongProperty xProperty = new SimpleLongProperty(); 47 LongProperty yProperty = new SimpleLongProperty(); 48 49 AbstractMasterTimerMock amt; 50 ParallelTransition pt; 51 52 Transition child1X; 53 Transition child2X; 54 Transition child1Y; 55 Transition childByX; 56 57 @Before 58 public void setUp() { 59 amt = new AbstractMasterTimerMock(); 60 pt = ParallelTransitionShim.getParallelTransition(amt); 61 child1X = new TransitionShim() { 62 63 { 64 setCycleDuration(Duration.minutes(1)); 65 setInterpolator(Interpolator.LINEAR); 66 } 67 68 @Override 69 protected void interpolate(double d) { 70 xProperty.set(Math.round(d * 60000)); 71 } 72 }; 73 child1Y = new TransitionShim() { 74 75 { 76 setCycleDuration(Duration.seconds(10)); 77 setInterpolator(Interpolator.LINEAR); 78 } 79 80 @Override 81 protected void interpolate(double d) { 82 yProperty.set(Math.round(d * 10000)); 83 } 84 }; 85 childByX = new TransitionShim() { 86 { 87 setCycleDuration(Duration.seconds(1)); 88 setInterpolator(Interpolator.LINEAR); 89 } 90 91 long lastX; 92 93 @Override 94 protected void interpolate(double frac) { 95 xProperty.set(Math.round(lastX + frac * 1000)); 96 } 97 98 @Override 99 public void sync(boolean forceSync) { 100 super.sync(forceSync); 101 if (forceSync) { 102 lastX = xProperty.get(); 103 } 104 } 105 106 107 }; 108 } 109 110 111 @Test 112 public void testSimplePlay() { 113 pt.getChildren().addAll(child1X, child1Y); 114 115 pt.play(); 116 assertEquals(Status.RUNNING, pt.getStatus()); 117 assertEquals(Status.STOPPED, child1X.getStatus()); 118 assertEquals(Status.STOPPED, child1Y.getStatus()); 119 120 amt.pulse(); 121 assertEquals(TickCalculation.toDuration(100), pt.getCurrentTime()); 122 assertEquals(TickCalculation.toDuration(100), child1X.getCurrentTime()); 123 assertEquals(TickCalculation.toDuration(100), child1Y.getCurrentTime()); 124 assertEquals(TICK_STEP, xProperty.get()); 125 assertEquals(TICK_STEP, yProperty.get()); 126 127 assertEquals(Status.RUNNING, pt.getStatus()); 128 assertEquals(Status.RUNNING, child1X.getStatus()); 129 assertEquals(Status.RUNNING, child1Y.getStatus()); 130 131 pt.jumpTo(Duration.seconds(10).subtract(TickCalculation.toDuration(100))); 132 133 assertEquals(Status.RUNNING, pt.getStatus()); 134 assertEquals(Status.RUNNING, child1X.getStatus()); 135 assertEquals(Status.RUNNING, child1Y.getStatus()); 136 assertEquals(10000 - TICK_STEP, xProperty.get()); 137 assertEquals(10000 - TICK_STEP, yProperty.get()); 138 139 amt.pulse(); 140 141 assertEquals(Status.RUNNING, pt.getStatus()); 142 assertEquals(Status.RUNNING, child1X.getStatus()); 143 assertEquals(Status.STOPPED, child1Y.getStatus()); 144 assertEquals(10000, xProperty.get()); 145 assertEquals(10000, yProperty.get()); 146 147 amt.pulse(); 148 149 assertEquals(Status.RUNNING, pt.getStatus()); 150 assertEquals(Status.RUNNING, child1X.getStatus()); 151 assertEquals(Status.STOPPED, child1Y.getStatus()); 152 assertEquals(10000 + TICK_STEP, xProperty.get()); 153 assertEquals(10000, yProperty.get()); 154 155 pt.jumpTo(Duration.minutes(1).subtract(TickCalculation.toDuration(100))); 156 157 assertEquals(Status.RUNNING, pt.getStatus()); 158 assertEquals(Status.RUNNING, child1X.getStatus()); 159 assertEquals(Status.STOPPED, child1Y.getStatus()); 160 assertEquals(60000 - TICK_STEP, xProperty.get()); 161 assertEquals(10000, yProperty.get()); 162 163 amt.pulse(); 164 assertEquals(Status.STOPPED, pt.getStatus()); 165 assertEquals(Status.STOPPED, child1X.getStatus()); 166 assertEquals(Status.STOPPED, child1Y.getStatus()); 167 assertEquals(60000, xProperty.get()); 168 assertEquals(10000, yProperty.get()); 169 } 170 171 @Test 172 public void testSimplePlayReversed() { 173 pt.getChildren().addAll(child1X, child1Y); 174 175 pt.setRate(-1.0); 176 pt.jumpTo(Duration.seconds(60)); 177 178 pt.play(); 179 assertEquals(Status.RUNNING, pt.getStatus()); 180 assertEquals(Status.STOPPED, child1X.getStatus()); 181 assertEquals(Status.STOPPED, child1Y.getStatus()); 182 183 amt.pulse(); 184 assertEquals(60000 - TICK_STEP, xProperty.get()); 185 assertEquals(10000, yProperty.get()); 186 187 assertEquals(Status.RUNNING, pt.getStatus()); 188 assertEquals(Status.RUNNING, child1X.getStatus()); 189 assertEquals(Status.STOPPED, child1Y.getStatus()); 190 191 pt.jumpTo(Duration.seconds(10).add(TickCalculation.toDuration(100))); 192 193 assertEquals(Status.RUNNING, pt.getStatus()); 194 assertEquals(Status.RUNNING, child1X.getStatus()); 195 assertEquals(Status.STOPPED, child1Y.getStatus()); 196 assertEquals(10000 + TICK_STEP, xProperty.get()); 197 assertEquals(10000, yProperty.get()); 198 199 amt.pulse(); 200 201 assertEquals(Status.RUNNING, pt.getStatus()); 202 assertEquals(Status.RUNNING, child1X.getStatus()); 203 assertEquals(Status.STOPPED, child1Y.getStatus()); 204 assertEquals(10000, xProperty.get()); 205 assertEquals(10000, yProperty.get()); 206 207 amt.pulse(); 208 209 assertEquals(Status.RUNNING, pt.getStatus()); 210 assertEquals(Status.RUNNING, child1X.getStatus()); 211 assertEquals(Status.RUNNING, child1Y.getStatus()); 212 assertEquals(10000 - TICK_STEP, xProperty.get()); 213 assertEquals(10000 - TICK_STEP, yProperty.get()); 214 215 pt.jumpTo(TickCalculation.toDuration(100)); 216 217 assertEquals(Status.RUNNING, pt.getStatus()); 218 assertEquals(Status.RUNNING, child1X.getStatus()); 219 assertEquals(Status.RUNNING, child1Y.getStatus()); 220 assertEquals(TICK_STEP, xProperty.get()); 221 assertEquals(TICK_STEP, yProperty.get()); 222 223 amt.pulse(); 224 assertEquals(Status.STOPPED, pt.getStatus()); 225 assertEquals(Status.STOPPED, child1X.getStatus()); 226 assertEquals(Status.STOPPED, child1Y.getStatus()); 227 assertEquals(0, xProperty.get()); 228 assertEquals(0, yProperty.get()); 229 } 230 231 @Test 232 public void testCycle() { 233 pt.getChildren().addAll(child1X, child1Y); 234 pt.setCycleCount(2); 235 236 pt.play(); 237 238 pt.jumpTo(Duration.minutes(1).subtract(TickCalculation.toDuration(100))); 239 240 assertEquals(Status.RUNNING, pt.getStatus()); 241 assertEquals(Status.RUNNING, child1X.getStatus()); 242 assertEquals(Status.STOPPED, child1Y.getStatus()); 243 assertEquals(60000 - TICK_STEP, xProperty.get()); 244 assertEquals(10000, yProperty.get()); 245 246 amt.pulse(); 247 248 assertEquals(Status.RUNNING, pt.getStatus()); 249 assertEquals(Status.STOPPED, child1X.getStatus()); 250 assertEquals(Status.STOPPED, child1Y.getStatus()); 251 assertEquals(0, xProperty.get()); 252 assertEquals(0, yProperty.get()); 253 254 pt.jumpTo(Duration.seconds(65).subtract(TickCalculation.toDuration(100))); 255 256 assertEquals(Status.RUNNING, pt.getStatus()); 257 assertEquals(Status.RUNNING, child1X.getStatus()); 258 assertEquals(Status.RUNNING, child1Y.getStatus()); 259 assertEquals(5000 - TICK_STEP, xProperty.get()); 260 assertEquals(5000 - TICK_STEP, yProperty.get()); 261 262 amt.pulse(); 263 assertEquals(Status.RUNNING, pt.getStatus()); 264 assertEquals(Status.RUNNING, child1X.getStatus()); 265 assertEquals(Status.RUNNING, child1Y.getStatus()); 266 assertEquals(5000, xProperty.get()); 267 assertEquals(5000, yProperty.get()); 268 269 pt.jumpTo(Duration.minutes(2).subtract(TickCalculation.toDuration(100))); 270 271 assertEquals(Status.RUNNING, pt.getStatus()); 272 assertEquals(Status.RUNNING, child1X.getStatus()); 273 assertEquals(Status.STOPPED, child1Y.getStatus()); 274 assertEquals(60000 - TICK_STEP, xProperty.get()); 275 assertEquals(10000, yProperty.get()); 276 277 amt.pulse(); 278 assertEquals(Status.STOPPED, pt.getStatus()); 279 assertEquals(Status.STOPPED, child1X.getStatus()); 280 assertEquals(Status.STOPPED, child1Y.getStatus()); 281 assertEquals(60000, xProperty.get()); 282 assertEquals(10000, yProperty.get()); 283 284 } 285 286 @Test 287 public void testCycleReversed() { 288 pt.getChildren().addAll(child1X, child1Y); 289 pt.setCycleCount(2); 290 pt.setRate(-1.0); 291 pt.jumpTo(Duration.seconds(60)); 292 293 pt.play(); 294 295 assertEquals(Status.RUNNING, pt.getStatus()); 296 assertEquals(Status.STOPPED, child1X.getStatus()); 297 assertEquals(Status.STOPPED, child1Y.getStatus()); 298 assertEquals(60000, xProperty.get()); 299 assertEquals(10000, yProperty.get()); 300 301 amt.pulse(); 302 303 assertEquals(Status.RUNNING, pt.getStatus()); 304 assertEquals(Status.RUNNING, child1X.getStatus()); 305 assertEquals(Status.STOPPED, child1Y.getStatus()); 306 assertEquals(60000 - TICK_STEP, xProperty.get()); 307 assertEquals(10000, yProperty.get()); 308 309 pt.jumpTo(Duration.seconds(60).add(TickCalculation.toDuration(100))); 310 311 assertEquals(Status.RUNNING, pt.getStatus()); 312 assertEquals(Status.RUNNING, child1X.getStatus()); 313 assertEquals(Status.RUNNING, child1Y.getStatus()); 314 assertEquals(TICK_STEP, xProperty.get()); 315 assertEquals(TICK_STEP, yProperty.get()); 316 317 amt.pulse(); 318 assertEquals(Status.RUNNING, pt.getStatus()); 319 assertEquals(Status.STOPPED, child1X.getStatus()); 320 assertEquals(Status.STOPPED, child1Y.getStatus()); 321 assertEquals(60000, xProperty.get()); 322 assertEquals(10000, yProperty.get()); 323 324 pt.jumpTo(Duration.minutes(2).subtract(TickCalculation.toDuration(100))); 325 326 assertEquals(Status.RUNNING, pt.getStatus()); 327 assertEquals(Status.RUNNING, child1X.getStatus()); 328 assertEquals(Status.STOPPED, child1Y.getStatus()); 329 assertEquals(60000 - TICK_STEP, xProperty.get()); 330 assertEquals(10000, yProperty.get()); 331 332 amt.pulse(); 333 assertEquals(Status.RUNNING, pt.getStatus()); 334 assertEquals(Status.RUNNING, child1X.getStatus()); 335 assertEquals(Status.STOPPED, child1Y.getStatus()); 336 assertEquals(60000 - Math.round(2 * TICK_MILLIS), xProperty.get()); 337 assertEquals(10000, yProperty.get()); 338 339 } 340 341 @Test 342 public void testAutoReverse() { 343 pt.getChildren().addAll(child1X, child1Y); 344 pt.setAutoReverse(true); 345 pt.setCycleCount(-1); 346 347 pt.play(); 348 349 for (int i = 0; i < TickCalculation.fromDuration(Duration.seconds(60)) / 100 - 1; ++i) { 350 amt.pulse(); 351 } 352 353 amt.pulse(); 354 355 assertEquals(Status.RUNNING, pt.getStatus()); 356 assertEquals(Status.STOPPED, child1X.getStatus()); 357 assertEquals(Status.STOPPED, child1Y.getStatus()); 358 359 assertEquals(60000, xProperty.get()); 360 assertEquals(10000, yProperty.get()); 361 362 amt.pulse(); 363 364 assertEquals(Status.RUNNING, pt.getStatus()); 365 assertEquals(Status.RUNNING, child1X.getStatus()); 366 assertEquals(Status.STOPPED, child1Y.getStatus()); 367 368 assertEquals(60000 - TICK_STEP, xProperty.get()); 369 assertEquals(10000, yProperty.get()); 370 371 } 372 373 @Test 374 public void testAutoReverseWithJump() { 375 pt.getChildren().addAll(child1X, child1Y); 376 pt.setAutoReverse(true); 377 pt.setCycleCount(-1); 378 379 pt.play(); 380 381 pt.jumpTo(Duration.seconds(60).subtract(TickCalculation.toDuration(100))); 382 383 amt.pulse(); 384 385 assertEquals(Status.RUNNING, pt.getStatus()); 386 assertEquals(Status.STOPPED, child1X.getStatus()); 387 assertEquals(Status.STOPPED, child1Y.getStatus()); 388 389 assertEquals(60000, xProperty.get()); 390 assertEquals(10000, yProperty.get()); 391 392 amt.pulse(); 393 394 assertEquals(Status.RUNNING, pt.getStatus()); 395 assertEquals(Status.RUNNING, child1X.getStatus()); 396 assertEquals(Status.STOPPED, child1Y.getStatus()); 397 398 assertEquals(60000 - TICK_STEP, xProperty.get()); 399 assertEquals(10000, yProperty.get()); 400 401 } 402 403 @Test 404 public void testJump() { 405 pt.getChildren().addAll(child1X, child1Y); 406 407 assertEquals(Status.STOPPED, pt.getStatus()); 408 assertEquals(Status.STOPPED, child1X.getStatus()); 409 assertEquals(Status.STOPPED, child1Y.getStatus()); 410 assertEquals(0, xProperty.get()); 411 assertEquals(0, yProperty.get()); 412 413 pt.jumpTo(Duration.seconds(10)); 414 415 assertEquals(Status.STOPPED, pt.getStatus()); 416 assertEquals(Status.STOPPED, child1X.getStatus()); 417 assertEquals(Status.STOPPED, child1Y.getStatus()); 418 assertEquals(0, xProperty.get()); 419 assertEquals(0, yProperty.get()); 420 421 pt.play(); 422 423 assertEquals(Status.RUNNING, pt.getStatus()); 424 assertEquals(Status.RUNNING, child1X.getStatus()); //Note: Not sure if we need to have also child1X running at this point 425 assertEquals(Status.STOPPED, child1Y.getStatus()); 426 assertEquals(10000, xProperty.get()); 427 assertEquals(10000, yProperty.get()); 428 429 amt.pulse(); 430 431 assertEquals(Status.RUNNING, pt.getStatus()); 432 assertEquals(Status.RUNNING, child1X.getStatus()); 433 assertEquals(Status.STOPPED, child1Y.getStatus()); 434 assertEquals(10000 + TICK_STEP, xProperty.get()); 435 assertEquals(10000, yProperty.get()); 436 437 pt.jumpTo(Duration.seconds(55)); 438 439 assertEquals(Status.RUNNING, pt.getStatus()); 440 assertEquals(Status.RUNNING, child1X.getStatus()); 441 assertEquals(Status.STOPPED, child1Y.getStatus()); 442 assertEquals(55000, xProperty.get()); 443 assertEquals(10000, yProperty.get()); 444 445 pt.jumpTo(Duration.seconds(10)); 446 447 assertEquals(Status.RUNNING, pt.getStatus()); 448 assertEquals(Status.RUNNING, child1X.getStatus()); 449 assertEquals(Status.STOPPED, child1Y.getStatus()); 450 assertEquals(10000, xProperty.get()); 451 assertEquals(10000, yProperty.get()); 452 453 pt.stop(); 454 455 assertEquals(Status.STOPPED, pt.getStatus()); 456 assertEquals(Status.STOPPED, child1X.getStatus()); 457 assertEquals(Status.STOPPED, child1Y.getStatus()); 458 assertEquals(10000, xProperty.get()); 459 assertEquals(10000, yProperty.get()); 460 461 } 462 463 @Test 464 public void testToggleRate() { 465 pt.getChildren().addAll(child1X, child1Y); 466 467 pt.play(); 468 469 pt.jumpTo(Duration.seconds(10)); 470 471 amt.pulse(); 472 473 assertEquals(Status.RUNNING, pt.getStatus()); 474 assertEquals(Status.RUNNING, child1X.getStatus()); 475 assertEquals(Status.STOPPED, child1Y.getStatus()); 476 477 assertEquals(10000 + TICK_STEP, xProperty.get()); 478 assertEquals(10000, yProperty.get()); 479 480 pt.setRate(-1.0); 481 482 amt.pulse(); 483 amt.pulse(); 484 485 assertEquals(Status.RUNNING, pt.getStatus()); 486 assertEquals(Status.RUNNING, child1X.getStatus()); 487 assertEquals(Status.RUNNING, child1Y.getStatus()); 488 489 assertEquals(10000 - TICK_STEP, xProperty.get()); 490 assertEquals(10000 - TICK_STEP, yProperty.get()); 491 492 pt.setRate(1.0); 493 494 amt.pulse(); 495 amt.pulse(); 496 497 assertEquals(Status.RUNNING, pt.getStatus()); 498 assertEquals(Status.RUNNING, child1X.getStatus()); 499 assertEquals(Status.STOPPED, child1Y.getStatus()); 500 501 assertEquals(10000 + TICK_STEP, xProperty.get()); 502 assertEquals(10000, yProperty.get()); 503 } 504 505 @Test 506 public void testToggleRate_2() { 507 pt.getChildren().addAll(child1X, child1Y); 508 509 pt.play(); 510 511 pt.jumpTo(Duration.seconds(20)); 512 513 amt.pulse(); 514 515 assertEquals(Status.RUNNING, pt.getStatus()); 516 assertEquals(Status.RUNNING, child1X.getStatus()); 517 assertEquals(Status.STOPPED, child1Y.getStatus()); 518 519 assertEquals(20000 + TICK_STEP, xProperty.get()); 520 assertEquals(10000, yProperty.get()); 521 522 pt.setRate(-1.0); 523 524 amt.pulse(); 525 amt.pulse(); 526 527 assertEquals(Status.RUNNING, pt.getStatus()); 528 assertEquals(Status.RUNNING, child1X.getStatus()); 529 assertEquals(Status.STOPPED, child1Y.getStatus()); 530 531 assertEquals(20000 - TICK_STEP, xProperty.get()); 532 assertEquals(10000, yProperty.get()); 533 534 pt.setRate(1.0); 535 536 amt.pulse(); 537 amt.pulse(); 538 539 assertEquals(Status.RUNNING, pt.getStatus()); 540 assertEquals(Status.RUNNING, child1X.getStatus()); 541 assertEquals(Status.STOPPED, child1Y.getStatus()); 542 543 assertEquals(20000 + TICK_STEP, xProperty.get()); 544 assertEquals(10000, yProperty.get()); 545 } 546 547 548 @Test 549 public void testChildWithDifferentRate() { 550 pt.getChildren().addAll(child1X, child1Y); 551 child1X.setRate(2.0); 552 553 pt.play(); 554 555 amt.pulse(); 556 557 assertEquals(Math.round(TICK_MILLIS * 2), xProperty.get()); 558 559 pt.jumpTo(Duration.seconds(30)); 560 561 assertEquals(60000, xProperty.get()); 562 assertEquals(10000, yProperty.get()); 563 564 pt.jumpTo(Duration.seconds(40)); 565 566 assertEquals(60000, xProperty.get()); 567 assertEquals(10000, yProperty.get()); 568 569 pt.jumpTo(Duration.seconds(5)); 570 amt.pulse(); 571 572 pt.setRate(-1.0); 573 574 amt.pulse(); 575 amt.pulse(); 576 577 assertEquals(10000 - Math.round(TICK_MILLIS * 2), xProperty.get()); 578 assertEquals(5000 - TICK_STEP, yProperty.get()); 579 580 pt.setRate(1.0); 581 582 amt.pulse(); 583 amt.pulse(); 584 585 assertEquals(10000 + Math.round(TICK_MILLIS * 2), xProperty.get()); 586 assertEquals(5000 + TICK_STEP, yProperty.get()); 587 588 } 589 590 @Test 591 public void testPauseForward1() { 592 pt.getChildren().addAll(child1X, child1Y); 593 594 pt.play(); 595 pt.jumpTo(Duration.seconds(5)); 596 amt.pulse(); 597 pt.pause(); 598 assertEquals(Status.PAUSED, pt.getStatus()); 599 assertEquals(Status.PAUSED, child1X.getStatus()); 600 assertEquals(Status.PAUSED, child1Y.getStatus()); 601 assertEquals(5000 + TICK_STEP, xProperty.get()); 602 assertEquals(5000 + TICK_STEP, yProperty.get()); 603 604 pt.jumpTo(Duration.seconds(6)); 605 assertEquals(Status.PAUSED, pt.getStatus()); 606 assertEquals(Status.PAUSED, child1X.getStatus()); 607 assertEquals(Status.PAUSED, child1Y.getStatus()); 608 assertEquals(6000, xProperty.get()); 609 assertEquals(6000, yProperty.get()); 610 611 pt.play(); 612 assertEquals(Status.RUNNING, pt.getStatus()); 613 assertEquals(Status.RUNNING, child1X.getStatus()); 614 assertEquals(Status.RUNNING, child1Y.getStatus()); 615 assertEquals(6000, xProperty.get()); 616 assertEquals(6000, yProperty.get()); 617 618 amt.pulse(); 619 assertEquals(Status.RUNNING, pt.getStatus()); 620 assertEquals(Status.RUNNING, child1X.getStatus()); 621 assertEquals(Status.RUNNING, child1Y.getStatus()); 622 assertEquals(6000 + TICK_STEP, xProperty.get()); 623 assertEquals(6000 + TICK_STEP, yProperty.get()); 624 625 pt.pause(); 626 pt.jumpTo(Duration.seconds(7)); 627 pt.jumpTo(Duration.seconds(9)); 628 assertEquals(Status.PAUSED, pt.getStatus()); 629 assertEquals(Status.PAUSED, child1X.getStatus()); 630 assertEquals(Status.PAUSED, child1Y.getStatus()); 631 assertEquals(9000, xProperty.get()); 632 assertEquals(9000, yProperty.get()); 633 634 pt.play(); 635 assertEquals(Status.RUNNING, pt.getStatus()); 636 assertEquals(Status.RUNNING, child1X.getStatus()); 637 assertEquals(Status.RUNNING, child1Y.getStatus()); 638 assertEquals(9000, xProperty.get()); 639 assertEquals(9000, yProperty.get()); 640 641 amt.pulse(); 642 assertEquals(Status.RUNNING, pt.getStatus()); 643 assertEquals(Status.RUNNING, child1X.getStatus()); 644 assertEquals(Status.RUNNING, child1Y.getStatus()); 645 assertEquals(9000 + TICK_STEP, xProperty.get()); 646 assertEquals(9000 + TICK_STEP, yProperty.get()); 647 648 pt.pause(); 649 assertEquals(Status.PAUSED, pt.getStatus()); 650 assertEquals(Status.PAUSED, child1X.getStatus()); 651 assertEquals(Status.PAUSED, child1Y.getStatus()); 652 assertEquals(9000 + TICK_STEP, xProperty.get()); 653 assertEquals(9000 + TICK_STEP, yProperty.get()); 654 655 pt.jumpTo(Duration.seconds(10).subtract(TickCalculation.toDuration(100))); 656 assertEquals(Status.PAUSED, pt.getStatus()); 657 assertEquals(Status.PAUSED, child1X.getStatus()); 658 assertEquals(Status.PAUSED, child1Y.getStatus()); 659 assertEquals(10000 - TICK_STEP, xProperty.get()); 660 assertEquals(10000 - TICK_STEP, yProperty.get()); 661 662 pt.play(); 663 assertEquals(Status.RUNNING, pt.getStatus()); 664 assertEquals(Status.RUNNING, child1X.getStatus()); 665 assertEquals(Status.RUNNING, child1Y.getStatus()); 666 assertEquals(10000 - TICK_STEP, xProperty.get()); 667 assertEquals(10000 - TICK_STEP, yProperty.get()); 668 669 amt.pulse(); 670 assertEquals(Status.RUNNING, pt.getStatus()); 671 assertEquals(Status.RUNNING, child1X.getStatus()); 672 assertEquals(Status.STOPPED, child1Y.getStatus()); 673 assertEquals(10000, xProperty.get()); 674 assertEquals(10000, yProperty.get()); 675 676 pt.pause(); 677 pt.jumpTo(Duration.seconds(60).subtract(TickCalculation.toDuration(100))); 678 assertEquals(Status.PAUSED, pt.getStatus()); 679 assertEquals(Status.PAUSED, child1X.getStatus()); 680 assertEquals(Status.STOPPED, child1Y.getStatus()); 681 assertEquals(60000 - TICK_STEP, xProperty.get()); 682 assertEquals(10000, yProperty.get()); 683 684 pt.play(); 685 assertEquals(Status.RUNNING, pt.getStatus()); 686 assertEquals(Status.RUNNING, child1X.getStatus()); 687 assertEquals(Status.STOPPED, child1Y.getStatus()); 688 assertEquals(60000 - TICK_STEP, xProperty.get()); 689 assertEquals(10000, yProperty.get()); 690 691 amt.pulse(); 692 assertEquals(Status.STOPPED, pt.getStatus()); 693 assertEquals(Status.STOPPED, child1X.getStatus()); 694 assertEquals(Status.STOPPED, child1Y.getStatus()); 695 assertEquals(60000, xProperty.get()); 696 assertEquals(10000, yProperty.get()); 697 } 698 699 @Test 700 public void testPauseForward2() { 701 pt.getChildren().addAll(child1X, child1Y); 702 703 pt.play(); 704 pt.jumpTo(Duration.seconds(5)); 705 amt.pulse(); 706 pt.pause(); 707 assertEquals(Status.PAUSED, pt.getStatus()); 708 assertEquals(Status.PAUSED, child1X.getStatus()); 709 assertEquals(Status.PAUSED, child1Y.getStatus()); 710 assertEquals(5000 + TICK_STEP, xProperty.get()); 711 assertEquals(5000 + TICK_STEP, yProperty.get()); 712 713 pt.jumpTo(Duration.seconds(30)); 714 assertEquals(Status.PAUSED, pt.getStatus()); 715 assertEquals(Status.PAUSED, child1X.getStatus()); 716 assertEquals(Status.STOPPED, child1Y.getStatus()); 717 assertEquals(30000, xProperty.get()); 718 assertEquals(10000, yProperty.get()); 719 720 pt.play(); 721 assertEquals(Status.RUNNING, pt.getStatus()); 722 assertEquals(Status.RUNNING, child1X.getStatus()); 723 assertEquals(Status.STOPPED, child1Y.getStatus()); 724 assertEquals(30000, xProperty.get()); 725 assertEquals(10000, yProperty.get()); 726 727 amt.pulse(); 728 assertEquals(Status.RUNNING, pt.getStatus()); 729 assertEquals(Status.RUNNING, child1X.getStatus()); 730 assertEquals(Status.STOPPED, child1Y.getStatus()); 731 assertEquals(30000 + TICK_STEP, xProperty.get()); 732 assertEquals(10000, yProperty.get()); 733 734 pt.pause(); 735 pt.jumpTo(Duration.seconds(60).subtract(TickCalculation.toDuration(100))); 736 assertEquals(Status.PAUSED, pt.getStatus()); 737 assertEquals(Status.PAUSED, child1X.getStatus()); 738 assertEquals(Status.STOPPED, child1Y.getStatus()); 739 assertEquals(60000 - TICK_STEP, xProperty.get()); 740 assertEquals(10000, yProperty.get()); 741 742 pt.play(); 743 assertEquals(Status.RUNNING, pt.getStatus()); 744 assertEquals(Status.RUNNING, child1X.getStatus()); 745 assertEquals(Status.STOPPED, child1Y.getStatus()); 746 assertEquals(60000 - TICK_STEP, xProperty.get()); 747 assertEquals(10000, yProperty.get()); 748 749 amt.pulse(); 750 assertEquals(Status.STOPPED, pt.getStatus()); 751 assertEquals(Status.STOPPED, child1X.getStatus()); 752 assertEquals(Status.STOPPED, child1Y.getStatus()); 753 assertEquals(60000, xProperty.get()); 754 assertEquals(10000, yProperty.get()); 755 } 756 757 @Test 758 public void testPauseAutoReverse() { 759 pt.getChildren().addAll(child1X, child1Y); 760 pt.setAutoReverse(true); 761 pt.setCycleCount(-1); 762 763 pt.play(); 764 pt.jumpTo(Duration.seconds(5)); 765 amt.pulse(); 766 pt.pause(); 767 assertEquals(Status.PAUSED, pt.getStatus()); 768 assertEquals(Status.PAUSED, child1X.getStatus()); 769 assertEquals(Status.PAUSED, child1Y.getStatus()); 770 assertEquals(5000 + TICK_STEP, xProperty.get()); 771 assertEquals(5000 + TICK_STEP, yProperty.get()); 772 773 pt.jumpTo(Duration.seconds(60).subtract(TickCalculation.toDuration(100))); 774 assertEquals(Status.PAUSED, pt.getStatus()); 775 assertEquals(Status.PAUSED, child1X.getStatus()); 776 assertEquals(Status.STOPPED, child1Y.getStatus()); 777 assertEquals(60000 - TICK_STEP, xProperty.get()); 778 assertEquals(10000, yProperty.get()); 779 780 pt.play(); 781 assertEquals(Status.RUNNING, pt.getStatus()); 782 assertEquals(Status.RUNNING, child1X.getStatus()); 783 assertEquals(Status.STOPPED, child1Y.getStatus()); 784 assertEquals(60000 - TICK_STEP, xProperty.get()); 785 assertEquals(10000, yProperty.get()); 786 787 amt.pulse(); 788 assertEquals(Status.RUNNING, pt.getStatus()); 789 assertEquals(Status.STOPPED, child1X.getStatus()); 790 assertEquals(Status.STOPPED, child1Y.getStatus()); 791 assertEquals(60000, xProperty.get()); 792 assertEquals(10000, yProperty.get()); 793 794 amt.pulse(); 795 assertEquals(Status.RUNNING, pt.getStatus()); 796 assertEquals(Status.RUNNING, child1X.getStatus()); 797 assertEquals(Status.STOPPED, child1Y.getStatus()); 798 assertEquals(60000 - TICK_STEP, xProperty.get()); 799 assertEquals(10000, yProperty.get()); 800 801 pt.pause(); 802 pt.jumpTo(Duration.seconds(110).subtract(TickCalculation.toDuration(100))); 803 assertEquals(Status.PAUSED, pt.getStatus()); 804 assertEquals(Status.PAUSED, child1X.getStatus()); 805 assertEquals(Status.STOPPED, child1Y.getStatus()); 806 assertEquals(10000 + TICK_STEP, xProperty.get()); 807 assertEquals(10000, yProperty.get()); 808 809 pt.play(); 810 assertEquals(Status.RUNNING, pt.getStatus()); 811 assertEquals(Status.RUNNING, child1X.getStatus()); 812 assertEquals(Status.STOPPED, child1Y.getStatus()); 813 assertEquals(10000 + TICK_STEP, xProperty.get()); 814 assertEquals(10000, yProperty.get()); 815 816 amt.pulse(); 817 assertEquals(Status.RUNNING, pt.getStatus()); 818 assertEquals(Status.RUNNING, child1X.getStatus()); 819 assertEquals(Status.STOPPED, child1Y.getStatus()); 820 assertEquals(10000, xProperty.get()); 821 assertEquals(10000, yProperty.get()); 822 823 amt.pulse(); 824 assertEquals(Status.RUNNING, pt.getStatus()); 825 assertEquals(Status.RUNNING, child1X.getStatus()); 826 assertEquals(Status.RUNNING, child1Y.getStatus()); 827 assertEquals(10000 - TICK_STEP, xProperty.get()); 828 assertEquals(10000 - TICK_STEP, yProperty.get()); 829 830 pt.pause(); 831 pt.jumpTo(Duration.seconds(120).subtract(TickCalculation.toDuration(100))); 832 assertEquals(Status.PAUSED, pt.getStatus()); 833 assertEquals(Status.PAUSED, child1X.getStatus()); 834 assertEquals(Status.PAUSED, child1Y.getStatus()); 835 assertEquals(0 + TICK_STEP, xProperty.get()); 836 assertEquals(0 + TICK_STEP, yProperty.get()); 837 838 pt.play(); 839 assertEquals(Status.RUNNING, pt.getStatus()); 840 assertEquals(Status.RUNNING, child1X.getStatus()); 841 assertEquals(Status.RUNNING, child1Y.getStatus()); 842 assertEquals(0 + TICK_STEP, xProperty.get()); 843 assertEquals(0 + TICK_STEP, yProperty.get()); 844 845 amt.pulse(); 846 assertEquals(Status.RUNNING, pt.getStatus()); 847 assertEquals(Status.STOPPED, child1X.getStatus()); 848 assertEquals(Status.STOPPED, child1Y.getStatus()); 849 assertEquals(0, xProperty.get()); 850 assertEquals(0, yProperty.get()); 851 852 amt.pulse(); 853 assertEquals(Status.RUNNING, pt.getStatus()); 854 assertEquals(Status.RUNNING, child1X.getStatus()); 855 assertEquals(Status.RUNNING, child1Y.getStatus()); 856 assertEquals(0 + TICK_STEP, xProperty.get()); 857 assertEquals(0 + TICK_STEP, yProperty.get()); 858 } 859 860 861 @Test public void testNestedParallelTransition() { 862 ParallelTransition pt2 = new ParallelTransition(); 863 864 pt.getChildren().addAll(pt2, child1X); 865 pt2.getChildren().add(child1Y); 866 867 pt.play(); 868 869 amt.pulse(); 870 871 assertEquals(Status.RUNNING, pt.getStatus()); 872 assertEquals(Status.RUNNING, pt2.getStatus()); 873 assertEquals(Status.RUNNING, child1X.getStatus()); 874 assertEquals(Status.RUNNING, child1Y.getStatus()); 875 assertEquals(TICK_STEP, xProperty.get()); 876 assertEquals(TICK_STEP, yProperty.get()); 877 878 amt.pulse(); 879 880 assertEquals(Status.RUNNING, pt.getStatus()); 881 assertEquals(Status.RUNNING, pt2.getStatus()); 882 assertEquals(Status.RUNNING, child1X.getStatus()); 883 assertEquals(Status.RUNNING, child1Y.getStatus()); 884 assertEquals(Math.round(TICK_MILLIS * 2), xProperty.get()); 885 assertEquals(Math.round(TICK_MILLIS * 2), yProperty.get()); 886 887 888 pt.jumpTo(Duration.seconds(60).subtract(TickCalculation.toDuration(100))); 889 890 amt.pulse(); 891 892 assertEquals(Status.STOPPED, pt.getStatus()); 893 assertEquals(Status.STOPPED, pt2.getStatus()); 894 assertEquals(Status.STOPPED, child1X.getStatus()); 895 assertEquals(Status.STOPPED, child1Y.getStatus()); 896 897 pt.play(); 898 899 900 amt.pulse(); 901 902 assertEquals(Status.RUNNING, pt.getStatus()); 903 assertEquals(Status.RUNNING, pt2.getStatus()); 904 assertEquals(Status.RUNNING, child1X.getStatus()); 905 assertEquals(Status.RUNNING, child1Y.getStatus()); 906 assertEquals(TICK_STEP, xProperty.get()); 907 assertEquals(TICK_STEP, yProperty.get()); 908 909 amt.pulse(); 910 911 assertEquals(Status.RUNNING, pt.getStatus()); 912 assertEquals(Status.RUNNING, pt2.getStatus()); 913 assertEquals(Status.RUNNING, child1X.getStatus()); 914 assertEquals(Status.RUNNING, child1Y.getStatus()); 915 assertEquals(Math.round(TICK_MILLIS * 2), xProperty.get()); 916 assertEquals(Math.round(TICK_MILLIS * 2), yProperty.get()); 917 918 919 pt.jumpTo(Duration.seconds(60).subtract(TickCalculation.toDuration(100))); 920 921 amt.pulse(); 922 923 assertEquals(Status.STOPPED, pt.getStatus()); 924 assertEquals(Status.STOPPED, pt2.getStatus()); 925 assertEquals(Status.STOPPED, child1X.getStatus()); 926 assertEquals(Status.STOPPED, child1Y.getStatus()); 927 } 928 929 @Test 930 public void testPlayFromStartSynchronization() { 931 pt.getChildren().addAll(child1Y, childByX); 932 933 pt.play(); 934 935 assertEquals(0, yProperty.get()); 936 assertEquals(0, xProperty.get()); 937 938 pt.jumpTo(Duration.seconds(10)); 939 amt.pulse(); 940 941 pt.play(); 942 assertEquals(0, yProperty.get()); 943 assertEquals(1000, xProperty.get()); 944 945 pt.jumpTo(Duration.seconds(10)); 946 amt.pulse(); 947 948 assertEquals(10000, yProperty.get()); 949 assertEquals(2000, xProperty.get()); 950 951 } 952 953 @Test 954 public void testCycleSynchronization() { 955 pt.setCycleCount(2); 956 pt.getChildren().addAll(childByX); 957 958 pt.play(); 959 960 assertEquals(0, xProperty.get()); 961 962 pt.jumpTo(Duration.seconds(1)); 963 amt.pulse(); 964 965 assertEquals(TICK_STEP, xProperty.get()); 966 967 pt.jumpTo(Duration.seconds(2)); 968 amt.pulse(); 969 970 assertEquals(1000, xProperty.get()); 971 972 } 973 974 }