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 }