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 }