1 /* 2 * Copyright (c) 2011, 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 javafx.animation; 27 28 import static org.junit.Assert.assertEquals; 29 import static org.junit.Assert.assertFalse; 30 import static org.junit.Assert.assertNull; 31 import static org.junit.Assert.assertTrue; 32 import javafx.scene.Node; 33 import javafx.scene.shape.Rectangle; 34 import javafx.util.Duration; 35 36 import org.junit.Before; 37 import org.junit.Test; 38 39 public class TranslateTransitionTest { 40 41 private static Duration DEFAULT_DURATION = Duration.millis(400); 42 private static Interpolator DEFAULT_INTERPOLATOR = Interpolator.EASE_BOTH; 43 44 private static double EPSILON = 1e-12; 45 private static Duration ONE_SEC = Duration.millis(1000); 46 private static Duration TWO_SECS = Duration.millis(2000); 47 48 private Node node; 49 50 @Before 51 public void setUp() { 52 node = new Rectangle(); 53 } 54 55 @Test 56 public void testDefaultValues() { 57 // empty ctor 58 final TranslateTransition t0 = new TranslateTransition(); 59 assertEquals(DEFAULT_DURATION, t0.getDuration()); 60 assertEquals(DEFAULT_DURATION, t0.getCycleDuration()); 61 assertTrue(Double.isNaN(t0.getFromX())); 62 assertTrue(Double.isNaN(t0.getFromY())); 63 assertTrue(Double.isNaN(t0.getFromZ())); 64 assertTrue(Double.isNaN(t0.getToX())); 65 assertTrue(Double.isNaN(t0.getToY())); 66 assertTrue(Double.isNaN(t0.getToZ())); 67 assertEquals(0.0, t0.getByX(), EPSILON); 68 assertEquals(0.0, t0.getByY(), EPSILON); 69 assertEquals(0.0, t0.getByZ(), EPSILON); 70 assertNull(t0.getNode()); 71 assertEquals(DEFAULT_INTERPOLATOR, t0.getInterpolator()); 72 assertNull(t0.getOnFinished()); 73 74 // duration only 75 final TranslateTransition t1 = new TranslateTransition(ONE_SEC); 76 assertEquals(ONE_SEC, t1.getDuration()); 77 assertTrue(Double.isNaN(t1.getFromX())); 78 assertTrue(Double.isNaN(t1.getFromY())); 79 assertTrue(Double.isNaN(t1.getFromZ())); 80 assertTrue(Double.isNaN(t1.getToX())); 81 assertTrue(Double.isNaN(t1.getToY())); 82 assertTrue(Double.isNaN(t1.getToZ())); 83 assertEquals(0.0, t1.getByX(), EPSILON); 84 assertEquals(0.0, t1.getByY(), EPSILON); 85 assertEquals(0.0, t1.getByZ(), EPSILON); 86 assertNull(t1.getNode()); 87 assertEquals(DEFAULT_INTERPOLATOR, t1.getInterpolator()); 88 assertNull(t1.getOnFinished()); 89 90 // duration and node 91 final TranslateTransition t2 = new TranslateTransition(TWO_SECS, node); 92 assertEquals(TWO_SECS, t2.getDuration()); 93 assertTrue(Double.isNaN(t2.getFromX())); 94 assertTrue(Double.isNaN(t2.getFromY())); 95 assertTrue(Double.isNaN(t2.getFromZ())); 96 assertTrue(Double.isNaN(t2.getToX())); 97 assertTrue(Double.isNaN(t2.getToY())); 98 assertTrue(Double.isNaN(t2.getToZ())); 99 assertEquals(0.0, t2.getByX(), EPSILON); 100 assertEquals(0.0, t2.getByY(), EPSILON); 101 assertEquals(0.0, t2.getByZ(), EPSILON); 102 assertEquals(node, t2.getNode()); 103 assertEquals(DEFAULT_INTERPOLATOR, t2.getInterpolator()); 104 assertNull(t2.getOnFinished()); 105 } 106 107 @Test 108 public void testDefaultValuesFromProperties() { 109 // empty ctor 110 final TranslateTransition t0 = new TranslateTransition(); 111 assertEquals(DEFAULT_DURATION, t0.durationProperty().get()); 112 assertTrue(Double.isNaN(t0.fromXProperty().get())); 113 assertTrue(Double.isNaN(t0.fromYProperty().get())); 114 assertTrue(Double.isNaN(t0.fromZProperty().get())); 115 assertTrue(Double.isNaN(t0.toXProperty().get())); 116 assertTrue(Double.isNaN(t0.toYProperty().get())); 117 assertTrue(Double.isNaN(t0.toZProperty().get())); 118 assertEquals(0.0, t0.byXProperty().get(), EPSILON); 119 assertEquals(0.0, t0.byYProperty().get(), EPSILON); 120 assertEquals(0.0, t0.byZProperty().get(), EPSILON); 121 assertNull(t0.nodeProperty().get()); 122 assertEquals(DEFAULT_INTERPOLATOR, t0.interpolatorProperty().get()); 123 assertNull(t0.onFinishedProperty().get()); 124 125 // duration only 126 final TranslateTransition t1 = new TranslateTransition(ONE_SEC); 127 assertEquals(ONE_SEC, t1.durationProperty().get()); 128 assertTrue(Double.isNaN(t1.fromXProperty().get())); 129 assertTrue(Double.isNaN(t1.fromYProperty().get())); 130 assertTrue(Double.isNaN(t1.fromZProperty().get())); 131 assertTrue(Double.isNaN(t1.toXProperty().get())); 132 assertTrue(Double.isNaN(t1.toYProperty().get())); 133 assertTrue(Double.isNaN(t1.toZProperty().get())); 134 assertEquals(0.0, t1.byXProperty().get(), EPSILON); 135 assertEquals(0.0, t1.byYProperty().get(), EPSILON); 136 assertEquals(0.0, t1.byZProperty().get(), EPSILON); 137 assertNull(t1.nodeProperty().get()); 138 assertEquals(DEFAULT_INTERPOLATOR, t1.interpolatorProperty().get()); 139 assertNull(t1.onFinishedProperty().get()); 140 141 // duration and node 142 final TranslateTransition t2 = new TranslateTransition(TWO_SECS, node); 143 assertEquals(TWO_SECS, t2.durationProperty().get()); 144 assertTrue(Double.isNaN(t2.fromXProperty().get())); 145 assertTrue(Double.isNaN(t2.fromYProperty().get())); 146 assertTrue(Double.isNaN(t2.fromZProperty().get())); 147 assertTrue(Double.isNaN(t2.toXProperty().get())); 148 assertTrue(Double.isNaN(t2.toYProperty().get())); 149 assertTrue(Double.isNaN(t2.toZProperty().get())); 150 assertEquals(0.0, t2.byXProperty().get(), EPSILON); 151 assertEquals(0.0, t2.byYProperty().get(), EPSILON); 152 assertEquals(0.0, t2.byZProperty().get(), EPSILON); 153 assertEquals(node, t2.nodeProperty().get()); 154 assertEquals(DEFAULT_INTERPOLATOR, t2.interpolatorProperty().get()); 155 assertNull(t2.onFinishedProperty().get()); 156 } 157 158 @Test 159 public void testInterpolate() { 160 final TranslateTransition t0 = new TranslateTransition(ONE_SEC, node); 161 t0.setFromX(0.5); 162 t0.setToX(1.0); 163 t0.setFromY(1.5); 164 t0.setToY(2.0); 165 t0.setFromZ(1.5); 166 t0.setToZ(0.5); 167 168 assertTrue(t0.impl_startable(true)); 169 t0.impl_start(true); 170 t0.interpolate(0.0); 171 assertEquals(0.5, node.getTranslateX(), EPSILON); 172 assertEquals(1.5, node.getTranslateY(), EPSILON); 173 assertEquals(1.5, node.getTranslateZ(), EPSILON); 174 t0.interpolate(0.4); 175 assertEquals(0.7, node.getTranslateX(), EPSILON); 176 assertEquals(1.7, node.getTranslateY(), EPSILON); 177 assertEquals(1.1, node.getTranslateZ(), EPSILON); 178 t0.interpolate(1.0); 179 assertEquals(1.0, node.getTranslateX(), EPSILON); 180 assertEquals(2.0, node.getTranslateY(), EPSILON); 181 assertEquals(0.5, node.getTranslateZ(), EPSILON); 182 t0.impl_finished(); 183 } 184 185 @Test 186 public void testXValueCombinations() { 187 final TranslateTransition t0 = new TranslateTransition(ONE_SEC, node); 188 final double originalValue = 0.6; 189 final double fromValue = 0.4; 190 final double toValue = 0.9; 191 final double byValue = -0.2; 192 193 // no value set 194 node.setTranslateX(originalValue); 195 t0.setFromX(Double.NaN); 196 t0.setToX(Double.NaN); 197 t0.setByX(0.0); 198 assertTrue(t0.impl_startable(true)); 199 t0.impl_start(true); 200 t0.interpolate(0.0); 201 assertEquals(originalValue, node.getTranslateX(), EPSILON); 202 t0.interpolate(1.0); 203 assertEquals(originalValue, node.getTranslateX(), EPSILON); 204 t0.impl_finished(); 205 206 // only from-value set 207 node.setTranslateX(originalValue); 208 t0.setFromX(fromValue); 209 t0.setToX(Double.NaN); 210 t0.setByX(0.0); 211 assertTrue(t0.impl_startable(true)); 212 t0.impl_start(true); 213 t0.interpolate(0.0); 214 assertEquals(fromValue, node.getTranslateX(), EPSILON); 215 t0.interpolate(1.0); 216 assertEquals(fromValue, node.getTranslateX(), EPSILON); 217 t0.impl_finished(); 218 219 // only to-value set 220 node.setTranslateX(originalValue); 221 t0.setFromX(Double.NaN); 222 t0.setToX(toValue); 223 t0.setByX(0.0); 224 assertTrue(t0.impl_startable(true)); 225 t0.impl_start(true); 226 t0.interpolate(0.0); 227 assertEquals(originalValue, node.getTranslateX(), EPSILON); 228 t0.interpolate(1.0); 229 assertEquals(toValue, node.getTranslateX(), EPSILON); 230 t0.impl_finished(); 231 232 // only by-value set 233 node.setTranslateX(originalValue); 234 t0.setFromX(Double.NaN); 235 t0.setToX(Double.NaN); 236 t0.setByX(byValue); 237 assertTrue(t0.impl_startable(true)); 238 t0.impl_start(true); 239 t0.interpolate(0.0); 240 assertEquals(originalValue, node.getTranslateX(), EPSILON); 241 t0.interpolate(1.0); 242 assertEquals(originalValue + byValue, node.getTranslateX(), EPSILON); 243 t0.impl_finished(); 244 245 // from- and to-values set 246 node.setTranslateX(originalValue); 247 t0.setFromX(fromValue); 248 t0.setToX(toValue); 249 t0.setByX(0.0); 250 assertTrue(t0.impl_startable(true)); 251 t0.impl_start(true); 252 t0.interpolate(0.0); 253 assertEquals(fromValue, node.getTranslateX(), EPSILON); 254 t0.interpolate(1.0); 255 assertEquals(toValue, node.getTranslateX(), EPSILON); 256 t0.impl_finished(); 257 258 // from- and by-values set 259 node.setTranslateX(originalValue); 260 t0.setFromX(fromValue); 261 t0.setToX(Double.NaN); 262 t0.setByX(byValue); 263 assertTrue(t0.impl_startable(true)); 264 t0.impl_start(true); 265 t0.interpolate(0.0); 266 assertEquals(fromValue, node.getTranslateX(), EPSILON); 267 t0.interpolate(1.0); 268 assertEquals(fromValue + byValue, node.getTranslateX(), EPSILON); 269 t0.impl_finished(); 270 271 // to- and by-values set 272 node.setTranslateX(originalValue); 273 t0.setFromX(Double.NaN); 274 t0.setToX(toValue); 275 t0.setByX(byValue); 276 assertTrue(t0.impl_startable(true)); 277 t0.impl_start(true); 278 t0.interpolate(0.0); 279 assertEquals(originalValue, node.getTranslateX(), EPSILON); 280 t0.interpolate(1.0); 281 assertEquals(toValue, node.getTranslateX(), EPSILON); 282 t0.impl_finished(); 283 284 // all values set 285 node.setTranslateX(originalValue); 286 t0.setFromX(fromValue); 287 t0.setToX(toValue); 288 t0.setByX(byValue); 289 assertTrue(t0.impl_startable(true)); 290 t0.impl_start(true); 291 t0.interpolate(0.0); 292 assertEquals(fromValue, node.getTranslateX(), EPSILON); 293 t0.interpolate(1.0); 294 assertEquals(toValue, node.getTranslateX(), EPSILON); 295 t0.impl_finished(); 296 } 297 298 @Test 299 public void testYValueCombinations() { 300 final TranslateTransition t0 = new TranslateTransition(ONE_SEC, node); 301 final double originalValue = 0.6; 302 final double fromValue = 0.4; 303 final double toValue = 0.9; 304 final double byValue = -0.2; 305 306 // no value set 307 node.setTranslateY(originalValue); 308 t0.setFromY(Double.NaN); 309 t0.setToY(Double.NaN); 310 t0.setByY(0.0); 311 assertTrue(t0.impl_startable(true)); 312 t0.impl_start(true); 313 t0.interpolate(0.0); 314 assertEquals(originalValue, node.getTranslateY(), EPSILON); 315 t0.interpolate(1.0); 316 assertEquals(originalValue, node.getTranslateY(), EPSILON); 317 t0.impl_finished(); 318 319 // only from-value set 320 node.setTranslateY(originalValue); 321 t0.setFromY(fromValue); 322 t0.setToY(Double.NaN); 323 t0.setByY(0.0); 324 assertTrue(t0.impl_startable(true)); 325 t0.impl_start(true); 326 t0.interpolate(0.0); 327 assertEquals(fromValue, node.getTranslateY(), EPSILON); 328 t0.interpolate(1.0); 329 assertEquals(fromValue, node.getTranslateY(), EPSILON); 330 t0.impl_finished(); 331 332 // only to-value set 333 node.setTranslateY(originalValue); 334 t0.setFromY(Double.NaN); 335 t0.setToY(toValue); 336 t0.setByY(0.0); 337 assertTrue(t0.impl_startable(true)); 338 t0.impl_start(true); 339 t0.interpolate(0.0); 340 assertEquals(originalValue, node.getTranslateY(), EPSILON); 341 t0.interpolate(1.0); 342 assertEquals(toValue, node.getTranslateY(), EPSILON); 343 t0.impl_finished(); 344 345 // only by-value set 346 node.setTranslateY(originalValue); 347 t0.setFromY(Double.NaN); 348 t0.setToY(Double.NaN); 349 t0.setByY(byValue); 350 assertTrue(t0.impl_startable(true)); 351 t0.impl_start(true); 352 t0.interpolate(0.0); 353 assertEquals(originalValue, node.getTranslateY(), EPSILON); 354 t0.interpolate(1.0); 355 assertEquals(originalValue + byValue, node.getTranslateY(), EPSILON); 356 t0.impl_finished(); 357 358 // from- and to-values set 359 node.setTranslateY(originalValue); 360 t0.setFromY(fromValue); 361 t0.setToY(toValue); 362 t0.setByY(0.0); 363 assertTrue(t0.impl_startable(true)); 364 t0.impl_start(true); 365 t0.interpolate(0.0); 366 assertEquals(fromValue, node.getTranslateY(), EPSILON); 367 t0.interpolate(1.0); 368 assertEquals(toValue, node.getTranslateY(), EPSILON); 369 t0.impl_finished(); 370 371 // from- and by-values set 372 node.setTranslateY(originalValue); 373 t0.setFromY(fromValue); 374 t0.setToY(Double.NaN); 375 t0.setByY(byValue); 376 assertTrue(t0.impl_startable(true)); 377 t0.impl_start(true); 378 t0.interpolate(0.0); 379 assertEquals(fromValue, node.getTranslateY(), EPSILON); 380 t0.interpolate(1.0); 381 assertEquals(fromValue + byValue, node.getTranslateY(), EPSILON); 382 t0.impl_finished(); 383 384 // to- and by-values set 385 node.setTranslateY(originalValue); 386 t0.setFromY(Double.NaN); 387 t0.setToY(toValue); 388 t0.setByY(byValue); 389 assertTrue(t0.impl_startable(true)); 390 t0.impl_start(true); 391 t0.interpolate(0.0); 392 assertEquals(originalValue, node.getTranslateY(), EPSILON); 393 t0.interpolate(1.0); 394 assertEquals(toValue, node.getTranslateY(), EPSILON); 395 t0.impl_finished(); 396 397 // all values set 398 node.setTranslateY(originalValue); 399 t0.setFromY(fromValue); 400 t0.setToY(toValue); 401 t0.setByY(byValue); 402 assertTrue(t0.impl_startable(true)); 403 t0.impl_start(true); 404 t0.interpolate(0.0); 405 assertEquals(fromValue, node.getTranslateY(), EPSILON); 406 t0.interpolate(1.0); 407 assertEquals(toValue, node.getTranslateY(), EPSILON); 408 t0.impl_finished(); 409 } 410 411 @Test 412 public void testZValueCombinations() { 413 final TranslateTransition t0 = new TranslateTransition(ONE_SEC, node); 414 final double originalValue = 0.6; 415 final double fromValue = 0.4; 416 final double toValue = 0.9; 417 final double byValue = -0.2; 418 419 // no value set 420 node.setTranslateZ(originalValue); 421 t0.setFromZ(Double.NaN); 422 t0.setToZ(Double.NaN); 423 t0.setByZ(0.0); 424 assertTrue(t0.impl_startable(true)); 425 t0.impl_start(true); 426 t0.interpolate(0.0); 427 assertEquals(originalValue, node.getTranslateZ(), EPSILON); 428 t0.interpolate(1.0); 429 assertEquals(originalValue, node.getTranslateZ(), EPSILON); 430 t0.impl_finished(); 431 432 // only from-value set 433 node.setTranslateZ(originalValue); 434 t0.setFromZ(fromValue); 435 t0.setToZ(Double.NaN); 436 t0.setByZ(0.0); 437 assertTrue(t0.impl_startable(true)); 438 t0.impl_start(true); 439 t0.interpolate(0.0); 440 assertEquals(fromValue, node.getTranslateZ(), EPSILON); 441 t0.interpolate(1.0); 442 assertEquals(fromValue, node.getTranslateZ(), EPSILON); 443 t0.impl_finished(); 444 445 // only to-value set 446 node.setTranslateZ(originalValue); 447 t0.setFromZ(Double.NaN); 448 t0.setToZ(toValue); 449 t0.setByZ(0.0); 450 assertTrue(t0.impl_startable(true)); 451 t0.impl_start(true); 452 t0.interpolate(0.0); 453 assertEquals(originalValue, node.getTranslateZ(), EPSILON); 454 t0.interpolate(1.0); 455 assertEquals(toValue, node.getTranslateZ(), EPSILON); 456 t0.impl_finished(); 457 458 // only by-value set 459 node.setTranslateZ(originalValue); 460 t0.setFromZ(Double.NaN); 461 t0.setToZ(Double.NaN); 462 t0.setByZ(byValue); 463 assertTrue(t0.impl_startable(true)); 464 t0.impl_start(true); 465 t0.interpolate(0.0); 466 assertEquals(originalValue, node.getTranslateZ(), EPSILON); 467 t0.interpolate(1.0); 468 assertEquals(originalValue + byValue, node.getTranslateZ(), EPSILON); 469 t0.impl_finished(); 470 471 // from- and to-values set 472 node.setTranslateZ(originalValue); 473 t0.setFromZ(fromValue); 474 t0.setToZ(toValue); 475 t0.setByZ(0.0); 476 assertTrue(t0.impl_startable(true)); 477 t0.impl_start(true); 478 t0.interpolate(0.0); 479 assertEquals(fromValue, node.getTranslateZ(), EPSILON); 480 t0.interpolate(1.0); 481 assertEquals(toValue, node.getTranslateZ(), EPSILON); 482 t0.impl_finished(); 483 484 // from- and by-values set 485 node.setTranslateZ(originalValue); 486 t0.setFromZ(fromValue); 487 t0.setToZ(Double.NaN); 488 t0.setByZ(byValue); 489 assertTrue(t0.impl_startable(true)); 490 t0.impl_start(true); 491 t0.interpolate(0.0); 492 assertEquals(fromValue, node.getTranslateZ(), EPSILON); 493 t0.interpolate(1.0); 494 assertEquals(fromValue + byValue, node.getTranslateZ(), EPSILON); 495 t0.impl_finished(); 496 497 // to- and by-values set 498 node.setTranslateZ(originalValue); 499 t0.setFromZ(Double.NaN); 500 t0.setToZ(toValue); 501 t0.setByZ(byValue); 502 assertTrue(t0.impl_startable(true)); 503 t0.impl_start(true); 504 t0.interpolate(0.0); 505 assertEquals(originalValue, node.getTranslateZ(), EPSILON); 506 t0.interpolate(1.0); 507 assertEquals(toValue, node.getTranslateZ(), EPSILON); 508 t0.impl_finished(); 509 510 // all values set 511 node.setTranslateZ(originalValue); 512 t0.setFromZ(fromValue); 513 t0.setToZ(toValue); 514 t0.setByZ(byValue); 515 assertTrue(t0.impl_startable(true)); 516 t0.impl_start(true); 517 t0.interpolate(0.0); 518 assertEquals(fromValue, node.getTranslateZ(), EPSILON); 519 t0.interpolate(1.0); 520 assertEquals(toValue, node.getTranslateZ(), EPSILON); 521 t0.impl_finished(); 522 } 523 524 @Test 525 public void testGetTargetNode() { 526 final TranslateTransition t0 = new TranslateTransition(ONE_SEC, node); 527 t0.setInterpolator(Interpolator.LINEAR); 528 t0.setFromX(0.5); 529 t0.setToX(1.0); 530 final Rectangle node2 = new Rectangle(); 531 final ParallelTransition pt = new ParallelTransition(); 532 pt.getChildren().add(t0); 533 pt.setNode(node2); 534 535 // node set, parent set 536 assertTrue(t0.impl_startable(true)); 537 t0.impl_start(true); 538 t0.interpolate(0.5); 539 assertEquals(0.75, node.getTranslateX(), EPSILON); 540 assertEquals(0.0, node2.getTranslateX(), EPSILON); 541 t0.impl_finished(); 542 543 // node null, parent set 544 t0.setNode(null); 545 assertTrue(t0.impl_startable(true)); 546 t0.impl_start(true); 547 t0.interpolate(0.4); 548 assertEquals(0.75, node.getTranslateX(), EPSILON); 549 assertEquals(0.7, node2.getTranslateX(), EPSILON); 550 t0.impl_finished(); 551 552 // node null, parent null 553 pt.setNode(null); 554 assertFalse(t0.impl_startable(true)); 555 } 556 557 @Test 558 public void testCachedValues() { 559 final TranslateTransition t0 = new TranslateTransition(ONE_SEC, node); 560 t0.setInterpolator(Interpolator.LINEAR); 561 t0.setFromX(0.5); 562 t0.setToX(1.0); 563 t0.setFromY(1.5); 564 t0.setToY(2.0); 565 t0.setFromZ(1.5); 566 t0.setToZ(0.5); 567 568 // start 569 assertTrue(t0.impl_startable(true)); 570 t0.impl_start(true); 571 t0.setFromX(0.0); 572 t0.setFromY(-1.0); 573 t0.setFromZ(0.5); 574 t0.interpolate(0.5); 575 assertEquals(0.75, node.getTranslateX(), EPSILON); 576 assertEquals(1.75, node.getTranslateY(), EPSILON); 577 assertEquals(1.0, node.getTranslateZ(), EPSILON); 578 t0.impl_finished(); 579 t0.setFromX(0.5); 580 t0.setFromY(1.5); 581 t0.setFromZ(1.5); 582 583 // end 584 assertTrue(t0.impl_startable(true)); 585 t0.impl_start(true); 586 t0.setToX(0.0); 587 t0.setFromY(-1.0); 588 t0.setFromZ(1.5); 589 t0.interpolate(0.2); 590 assertEquals(0.6, node.getTranslateX(), EPSILON); 591 assertEquals(1.6, node.getTranslateY(), EPSILON); 592 assertEquals(1.3, node.getTranslateZ(), EPSILON); 593 t0.impl_finished(); 594 t0.setToX(1.0); 595 t0.setToY(2.0); 596 t0.setToZ(0.5); 597 598 // node 599 assertTrue(t0.impl_startable(true)); 600 t0.impl_start(true); 601 t0.setNode(null); 602 t0.interpolate(0.7); 603 assertEquals(0.85, node.getTranslateX(), EPSILON); 604 t0.impl_finished(); 605 t0.setNode(node); 606 607 // interpolator 608 assertTrue(t0.impl_startable(true)); 609 t0.impl_start(true); 610 t0.setInterpolator(null); 611 t0.interpolate(0.1); 612 assertEquals(0.55, node.getTranslateX(), EPSILON); 613 t0.impl_finished(); 614 t0.setInterpolator(Interpolator.LINEAR); 615 } 616 617 @Test 618 public void testStartable() { 619 final TranslateTransition t0 = new TranslateTransition(Duration.ONE, node); 620 assertTrue(t0.impl_startable(true)); 621 622 // duration is 0 623 t0.setDuration(Duration.ZERO); 624 assertFalse(t0.impl_startable(true)); 625 t0.setDuration(Duration.ONE); 626 assertTrue(t0.impl_startable(true)); 627 628 // node is null 629 t0.setNode(null); 630 assertFalse(t0.impl_startable(true)); 631 t0.setNode(node); 632 assertTrue(t0.impl_startable(true)); 633 634 // interpolator is null 635 t0.setInterpolator(null); 636 assertFalse(t0.impl_startable(true)); 637 t0.setInterpolator(Interpolator.LINEAR); 638 assertTrue(t0.impl_startable(true)); 639 } 640 641 @Test 642 public void testEvaluateStartValue() { 643 final TranslateTransition t0 = new TranslateTransition(Duration.INDEFINITE, node); 644 t0.setToX(2.0); 645 t0.setToY(2.0); 646 t0.setToZ(2.0); 647 648 // first run 649 node.setTranslateX( 0.6); 650 node.setTranslateY( 1.6); 651 node.setTranslateZ(-0.6); 652 assertTrue(t0.impl_startable(true)); 653 t0.impl_start(true); 654 node.setTranslateX(0.8); 655 node.setTranslateY(0.8); 656 node.setTranslateZ(0.8); 657 t0.interpolate(0.0); 658 assertEquals( 0.6, node.getTranslateX(), EPSILON); 659 assertEquals( 1.6, node.getTranslateY(), EPSILON); 660 assertEquals(-0.6, node.getTranslateZ(), EPSILON); 661 t0.impl_finished(); 662 663 // second run 664 node.setTranslateX( 0.2); 665 node.setTranslateY(-2.2); 666 node.setTranslateZ(11.2); 667 assertTrue(t0.impl_startable(true)); 668 t0.impl_start(true); 669 node.setTranslateX(0.8); 670 node.setTranslateY(0.8); 671 node.setTranslateZ(0.8); 672 t0.interpolate(0.0); 673 assertEquals( 0.2, node.getTranslateX(), EPSILON); 674 assertEquals(-2.2, node.getTranslateY(), EPSILON); 675 assertEquals(11.2, node.getTranslateZ(), EPSILON); 676 t0.impl_finished(); 677 } 678 679 }