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 }*/