1 module unittests.repeattest; 2 3 import core.time; 4 5 import dunit; 6 7 import animate.d; 8 9 class RepeatTest 10 { 11 mixin UnitTest; 12 13 static immutable MAX_VAL = 180; 14 int m_val; 15 Duration m_dur; 16 17 DelegateAnimation m_anim; 18 19 this() 20 { 21 m_dur = seconds(2); 22 } 23 24 void updateFunction(double progress) 25 { 26 //Some simple function that uses the animation 27 //progress to come up with some value... 28 m_val = cast(int) (MAX_VAL * progress); 29 } 30 31 @Before 32 void setupAnimation() 33 { 34 m_val = 0; 35 m_anim = new DelegateAnimation(m_dur, &updateFunction); 36 } 37 38 @Test 39 void testRepeatSingle() 40 { 41 m_anim.repeatMode = RepeatMode.REPEAT; 42 m_anim.repeatCount = 1; 43 44 m_anim.update(seconds(1)); 45 assertEquals(m_val, 90); 46 assertTrue(m_anim.isRunning()); 47 48 m_anim.update(msecs(500)); 49 assertEquals(m_val, 135); 50 assertTrue(m_anim.isRunning()); 51 52 m_anim.update(msecs(500)); 53 assertEquals(m_val, 0); 54 assertTrue(m_anim.isRunning()); 55 56 m_anim.update(seconds(1)); 57 assertEquals(m_val, 90); 58 assertTrue(m_anim.isRunning()); 59 60 m_anim.update(seconds(1)); 61 assertEquals(m_val, 180); 62 assertFalse(m_anim.isRunning()); 63 } 64 65 @Test 66 void testRepeatInfinite() 67 { 68 m_anim.repeatMode = RepeatMode.REPEAT; 69 m_anim.repeatCount = INFINITE; 70 71 m_anim.update(seconds(1)); 72 assertEquals(m_val, 90); 73 assertTrue(m_anim.isRunning()); 74 75 m_anim.update(seconds(1)); 76 assertEquals(m_val, 0); 77 assertTrue(m_anim.isRunning()); 78 79 m_anim.update(msecs(500)); 80 assertEquals(m_val, 45); 81 assertTrue(m_anim.isRunning()); 82 83 m_anim.update(msecs(500)); 84 assertEquals(m_val, 90); 85 assertTrue(m_anim.isRunning()); 86 87 m_anim.update(seconds(199)); 88 assertEquals(m_val, 0); 89 assertTrue(m_anim.isRunning()); 90 } 91 92 @Test 93 void testReverseSingle() 94 { 95 m_anim.repeatMode = RepeatMode.REVERSE; 96 m_anim.repeatCount = 1; 97 98 m_anim.update(seconds(1)); 99 assertEquals(m_val, 90); 100 assertTrue(m_anim.isRunning()); 101 102 m_anim.update(seconds(1)); 103 assertEquals(m_val, 180); 104 assertTrue(m_anim.isRunning()); 105 106 m_anim.update(seconds(1)); 107 assertEquals(m_val, 90); 108 assertTrue(m_anim.isRunning()); 109 110 m_anim.update(seconds(1)); 111 assertEquals(m_val, 0); 112 assertFalse(m_anim.isRunning()); 113 } 114 115 @Test 116 void testReverseInfinite() 117 { 118 m_anim.repeatMode = RepeatMode.REVERSE; 119 m_anim.repeatCount = INFINITE; 120 121 m_anim.update(seconds(2)); 122 assertEquals(m_val, 180); 123 assertTrue(m_anim.isRunning()); 124 125 m_anim.update(msecs(500)); 126 assertEquals(m_val, 135); 127 assertTrue(m_anim.isRunning()); 128 129 m_anim.update(msecs(500)); 130 assertEquals(m_val, 90); 131 assertTrue(m_anim.isRunning()); 132 133 m_anim.update(seconds(1)); 134 assertEquals(m_val, 0); 135 assertTrue(m_anim.isRunning()); 136 137 m_anim.update(msecs(500)); 138 assertEquals(m_val, 45); 139 assertTrue(m_anim.isRunning()); 140 141 m_anim.update(msecs(1500)); 142 assertEquals(m_val, 180); 143 assertTrue(m_anim.isRunning()); 144 145 m_anim.update(msecs(500)); 146 assertEquals(m_val, 135); 147 assertTrue(m_anim.isRunning()); 148 149 m_anim.update(msecs(1500)); 150 assertEquals(m_val, 0); 151 assertTrue(m_anim.isRunning()); 152 153 m_anim.update(seconds(200)); 154 assertEquals(m_val, 0); 155 assertTrue(m_anim.isRunning()); 156 } 157 } 158 159 /*class AnimationSetTest 160 { 161 mixin UnitTest; 162 163 Sprite sprite; 164 Time duration; 165 166 ScaleAnimation scaleAnim; 167 TranslationAnimation translateAnim; 168 169 AnimationSet animSet; 170 171 this() 172 { 173 sprite = new Sprite(); 174 duration = seconds(2.0); 175 } 176 177 @Before 178 void setupAnimationSet() 179 { 180 181 sprite.scale = Vector2f(0, 0); 182 sprite.position = Vector2f(0, 0); 183 184 scaleAnim = new ScaleAnimation(sprite, duration, 185 sprite.scale, Vector2f(10, 10)); 186 187 translateAnim = new TranslationAnimation(sprite, duration, 188 sprite.position, Vector2f(100, 100)); 189 190 animSet = new AnimationSet(scaleAnim, translateAnim); 191 } 192 193 @Test 194 void testParallelAnimationSet() 195 { 196 animSet.setMode(AnimationSetMode.PARALLEL); 197 198 animSet.update(msecs(500)); 199 assertEquals(sprite.scale, Vector2f(2.5, 2.5)); 200 assertEquals(sprite.position, Vector2f(25, 25)); 201 202 animSet.update(seconds(1)); 203 assertEquals(sprite.scale, Vector2f(7.5, 7.5)); 204 assertEquals(sprite.position, Vector2f(75, 75)); 205 206 animSet.update(msecs(500)); 207 assertEquals(sprite.scale, Vector2f(10, 10)); 208 assertEquals(sprite.position, Vector2f(100, 100)); 209 assertFalse(scaleAnim.isRunning()); 210 assertFalse(translateAnim.isRunning()); 211 assertFalse(animSet.isRunning()); 212 } 213 214 @Test 215 void testSequentialAnimationSet() 216 { 217 animSet.setMode(AnimationSetMode.SEQUENTIAL); 218 219 animSet.update(msecs(500)); 220 assertEquals(sprite.scale, Vector2f(2.5, 2.5)); 221 222 animSet.update(seconds(1)); 223 assertEquals(sprite.scale, Vector2f(7.5, 7.5)); 224 225 animSet.update(msecs(500)); 226 assertEquals(sprite.scale, Vector2f(10, 10)); 227 assertFalse(scaleAnim.isRunning()); 228 229 //The translation animation should get run now... 230 animSet.update(msecs(500)); 231 assertEquals(sprite.position, Vector2f(25, 25)); 232 233 animSet.update(seconds(1)); 234 assertEquals(sprite.position, Vector2f(75, 75)); 235 236 animSet.update(msecs(500)); 237 assertEquals(sprite.position, Vector2f(100, 100)); 238 239 assertFalse(translateAnim.isRunning()); 240 assertFalse(animSet.isRunning()); 241 } 242 }*/