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 static org.junit.Assert.assertEquals;
  29 import static org.junit.Assert.assertNull;
  30 import static org.junit.Assert.assertTrue;
  31 
  32 import com.sun.javafx.tk.Toolkit;
  33 import javafx.animation.Interpolator;
  34 import javafx.animation.ParallelTransition;
  35 import javafx.animation.Transition;
  36 import javafx.animation.TransitionShim;
  37 import javafx.scene.shape.Rectangle;
  38 import javafx.util.Duration;
  39 
  40 import org.junit.Before;
  41 import org.junit.Test;
  42 
  43 
  44 public class TransitionTest {
  45 
  46     private static Interpolator DEFAULT_INTERPOLATOR = Interpolator.EASE_BOTH;
  47     private static double EPSILON = 1e-12;
  48 
  49     private TransitionImpl transition;
  50 
  51     @Before
  52     public void setUp() {
  53         transition = new TransitionImpl(Duration.millis(1000));
  54     }
  55 
  56     @Test
  57     public void testDefaultValues() {
  58         // emtpy ctor
  59         Transition t0 = new TransitionImpl(Duration.millis(1000));
  60         assertEquals(DEFAULT_INTERPOLATOR, t0.getInterpolator());
  61         assertEquals(6000.0 / Toolkit.getToolkit().getMasterTimer().getDefaultResolution(), t0.getTargetFramerate(), EPSILON);
  62 
  63         // setting targetFramerate
  64         Transition t1 = new TransitionImpl(Duration.millis(1000), 10);
  65         assertEquals(DEFAULT_INTERPOLATOR, t1.getInterpolator());
  66         assertEquals(10, t1.getTargetFramerate(), EPSILON);
  67     }
  68 
  69     @Test
  70     public void testDefaultValuesFromProperties() {
  71         assertEquals(DEFAULT_INTERPOLATOR, transition.interpolatorProperty().get());
  72     }
  73 
  74     @Test
  75     public void testGetParentTargetNode() {
  76         final Rectangle node = new Rectangle();
  77 
  78         // parent and parent node set
  79         final ParallelTransition parent = new ParallelTransition();
  80         parent.getChildren().add(transition);
  81         parent.setNode(node);
  82         assertEquals(node, transition.getParentTargetNode());
  83 
  84         // parent set, parent node null
  85         parent.setNode(null);
  86         assertNull(transition.getParentTargetNode());
  87 
  88         // parent null, parent node set
  89         parent.setNode(node);
  90         parent.getChildren().clear();
  91         assertNull(transition.getParentTargetNode());
  92     }
  93 
  94     @Test
  95     public void testStart() {
  96         transition.impl_start(true);
  97         transition.setInterpolator(Interpolator.DISCRETE);
  98         assertEquals(DEFAULT_INTERPOLATOR, transition.getCachedInterpolator());
  99         transition.shim_impl_finished();
 100 
 101         transition.impl_start(true);
 102         assertEquals(Interpolator.DISCRETE, transition.getCachedInterpolator());
 103         transition.shim_impl_finished();
 104     }
 105 
 106     @Test
 107     public void testPlayTo() {
 108         assertTrue(transition.impl_startable(true));
 109 
 110         // normal play with linear interpolator
 111         transition.setInterpolator(Interpolator.LINEAR);
 112         transition.impl_start(true);
 113         transition.impl_playTo(0, 2);
 114         assertEquals(0.0, transition.frac, EPSILON);
 115         transition.impl_playTo(1, 2);
 116         assertEquals(0.5, transition.frac, EPSILON);
 117         transition.impl_playTo(2, 2);
 118         assertEquals(1.0, transition.frac, EPSILON);
 119         transition.shim_impl_finished();
 120 
 121         // normal play with discrete interpolator
 122         transition.setInterpolator(Interpolator.DISCRETE);
 123         transition.impl_start(true);
 124         transition.impl_playTo(0, 2);
 125         assertEquals(0.0, transition.frac, EPSILON);
 126         transition.impl_playTo(1, 2);
 127         assertEquals(0.0, transition.frac, EPSILON);
 128         transition.impl_playTo(2, 2);
 129         assertEquals(1.0, transition.frac, EPSILON);
 130 
 131         transition.shim_impl_finished();
 132     }
 133 
 134     @Test
 135     public void testJumpTo() {
 136         // not running
 137         transition.impl_jumpTo(0, 2, false);
 138         assertEquals(0.0, transition.frac, EPSILON);
 139         transition.impl_jumpTo(1, 2, false);
 140         assertEquals(0.0, transition.frac, EPSILON);
 141         transition.impl_jumpTo(2, 2, false);
 142         assertEquals(0.0, transition.frac, EPSILON);
 143 
 144         // running with linear interpolator
 145         transition.setInterpolator(Interpolator.LINEAR);
 146         assertTrue(transition.impl_startable(true));
 147         transition.impl_start(true);
 148         transition.impl_jumpTo(0, 2, false);
 149         assertEquals(0.0, transition.frac, EPSILON);
 150         transition.impl_jumpTo(1, 2, false);
 151         assertEquals(0.5, transition.frac, EPSILON);
 152         transition.impl_jumpTo(2, 2, false);
 153         assertEquals(1.0, transition.frac, EPSILON);
 154 
 155         // paused with linear interpolator
 156         transition.impl_pause();
 157         transition.impl_jumpTo(0, 2, false);
 158         assertEquals(0.0, transition.frac, EPSILON);
 159         transition.impl_jumpTo(1, 2, false);
 160         assertEquals(0.5, transition.frac, EPSILON);
 161         transition.impl_jumpTo(2, 2, false);
 162         assertEquals(1.0, transition.frac, EPSILON);
 163         transition.shim_impl_finished();
 164 
 165         // running with discrete interpolator
 166         transition.setInterpolator(Interpolator.DISCRETE);
 167         assertTrue(transition.impl_startable(true));
 168         transition.impl_start(true);
 169         transition.impl_jumpTo(0, 2, false);
 170         assertEquals(0.0, transition.frac, EPSILON);
 171         transition.impl_jumpTo(1, 2, false);
 172         assertEquals(0.0, transition.frac, EPSILON);
 173         transition.impl_jumpTo(2, 2, false);
 174         assertEquals(1.0, transition.frac, EPSILON);
 175 
 176         // paused with discrete interpolator
 177         transition.impl_pause();
 178         transition.impl_jumpTo(0, 2, false);
 179         assertEquals(0.0, transition.frac, EPSILON);
 180         transition.impl_jumpTo(1, 2, false);
 181         assertEquals(0.0, transition.frac, EPSILON);
 182         transition.impl_jumpTo(2, 2, false);
 183         assertEquals(1.0, transition.frac, EPSILON);
 184         transition.shim_impl_finished();
 185     }
 186 
 187 
 188 
 189     @Test
 190     public void testForcedJumpTo() {
 191         transition.setInterpolator(Interpolator.LINEAR);
 192         // not running
 193         transition.impl_jumpTo(0, 2, true);
 194         assertEquals(0.0, transition.frac, EPSILON);
 195         transition.impl_jumpTo(1, 2, true);
 196         assertEquals(0.5, transition.frac, EPSILON);
 197         transition.impl_jumpTo(2, 2, true);
 198         assertEquals(1.0, transition.frac, EPSILON);
 199 
 200         // running with linear interpolator
 201         assertTrue(transition.impl_startable(true));
 202         transition.impl_start(true);
 203         transition.impl_jumpTo(0, 2, true);
 204         assertEquals(0.0, transition.frac, EPSILON);
 205         transition.impl_jumpTo(1, 2, true);
 206         assertEquals(0.5, transition.frac, EPSILON);
 207         transition.impl_jumpTo(2, 2, true);
 208         assertEquals(1.0, transition.frac, EPSILON);
 209 
 210         // paused with linear interpolator
 211         transition.impl_pause();
 212         transition.impl_jumpTo(0, 2, true);
 213         assertEquals(0.0, transition.frac, EPSILON);
 214         transition.impl_jumpTo(1, 2, true);
 215         assertEquals(0.5, transition.frac, EPSILON);
 216         transition.impl_jumpTo(2, 2, true);
 217         assertEquals(1.0, transition.frac, EPSILON);
 218         transition.shim_impl_finished();
 219 
 220     }
 221 
 222     private static class TransitionImpl extends TransitionShim {
 223         private double frac;
 224 
 225         private TransitionImpl(Duration duration) {
 226             setCycleDuration(duration);
 227         }
 228 
 229         private TransitionImpl(Duration duration, double targetFramerate) {
 230             super(targetFramerate);
 231             setCycleDuration(duration);
 232         }
 233 
 234         public void impl_setCurrentTicks(long ticks) {
 235             // no-op
 236         }
 237 
 238         @Override
 239         protected void interpolate(double frac) {
 240             this.frac = frac;
 241         }
 242     }
 243 }