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