1 #if LV_BUILD_TEST
2
3 #include "../lvgl.h"
4 #include "../../lvgl_private.h"
5
6 #include "unity/unity.h"
7 #include "lv_test_helpers.h"
8
9 static lv_anim_timeline_t * anim_timeline;
10
11 static uint32_t anim1_start_called;
12 static uint32_t anim2_start_called;
13 static uint32_t anim1_completed_called;
14 static uint32_t anim2_completed_called;
15
setUp(void)16 void setUp(void)
17 {
18 /* Function run before every test */
19 anim_timeline = NULL;
20 }
21
tearDown(void)22 void tearDown(void)
23 {
24 /* Function run after every test */
25 if(anim_timeline) lv_anim_timeline_delete(anim_timeline);
26 lv_obj_clean(lv_screen_active());
27 }
28
test_anim_timeline_progress_1(void)29 void test_anim_timeline_progress_1(void)
30 {
31 lv_obj_t * obj = lv_obj_create(lv_screen_active());
32 lv_obj_set_size(obj, 100, 100);
33 lv_obj_set_pos(obj, 30, 40);
34
35 lv_anim_t a1;
36 lv_anim_init(&a1);
37 lv_anim_set_exec_cb(&a1, (lv_anim_exec_xcb_t)lv_obj_set_x);
38 lv_anim_set_var(&a1, obj);
39 lv_anim_set_values(&a1, 0, 700);
40 lv_anim_set_duration(&a1, 1000);
41
42 anim_timeline = lv_anim_timeline_create();
43 TEST_ASSERT_NOT_NULL(anim_timeline);
44
45 lv_anim_timeline_add(anim_timeline, 0, &a1);
46
47 lv_anim_timeline_set_progress(anim_timeline, 0);
48 lv_refr_now(NULL);
49 TEST_ASSERT_EQUAL(0, lv_obj_get_x(obj));
50
51 lv_anim_timeline_set_progress(anim_timeline, 65535);
52 lv_refr_now(NULL);
53 TEST_ASSERT_EQUAL(700, lv_obj_get_x(obj));
54
55 lv_anim_timeline_set_progress(anim_timeline, 10000);
56 lv_refr_now(NULL);
57 TEST_ASSERT_EQUAL(105, lv_obj_get_x(obj));
58
59 lv_anim_timeline_set_progress(anim_timeline, 20000);
60 lv_refr_now(NULL);
61 TEST_ASSERT_EQUAL(213, lv_obj_get_x(obj));
62
63 lv_anim_timeline_set_progress(anim_timeline, 30000);
64 lv_refr_now(NULL);
65 TEST_ASSERT_EQUAL(319, lv_obj_get_x(obj));
66
67 lv_anim_timeline_set_progress(anim_timeline, 40000);
68 lv_refr_now(NULL);
69 TEST_ASSERT_EQUAL(426, lv_obj_get_x(obj));
70
71 lv_anim_timeline_set_progress(anim_timeline, 50000);
72 lv_refr_now(NULL);
73 TEST_ASSERT_EQUAL(533, lv_obj_get_x(obj));
74
75 lv_anim_timeline_set_progress(anim_timeline, 60000);
76 lv_refr_now(NULL);
77 TEST_ASSERT_EQUAL(639, lv_obj_get_x(obj));
78
79 lv_anim_timeline_set_progress(anim_timeline, 32768);
80 lv_refr_now(NULL);
81 TEST_ASSERT_EQUAL(350, lv_obj_get_x(obj));
82
83 lv_anim_timeline_set_progress(anim_timeline, 65535);
84 lv_refr_now(NULL);
85 TEST_ASSERT_EQUAL(700, lv_obj_get_x(obj));
86
87 }
88
test_anim_timeline_progress_2(void)89 void test_anim_timeline_progress_2(void)
90 {
91 lv_obj_t * obj = lv_obj_create(lv_screen_active());
92 lv_obj_set_size(obj, 100, 100);
93 lv_anim_t a1;
94 lv_anim_init(&a1);
95 lv_anim_set_exec_cb(&a1, (lv_anim_exec_xcb_t)lv_obj_set_x);
96 lv_anim_set_var(&a1, obj);
97 lv_anim_set_values(&a1, 0, 700);
98 lv_anim_set_duration(&a1, 1000);
99
100 lv_anim_t a2;
101 lv_anim_init(&a2);
102 lv_anim_set_exec_cb(&a2, (lv_anim_exec_xcb_t)lv_obj_set_y);
103 lv_anim_set_var(&a2, obj);
104 lv_anim_set_values(&a2, 0, 300);
105 lv_anim_set_duration(&a2, 1000);
106
107 /*
108 * |------X------|
109 * |------Y------|
110 * 0 500 1000 1500 ms
111 * 0 21845 43690 65535 progress
112 */
113
114 anim_timeline = lv_anim_timeline_create();
115 lv_anim_timeline_add(anim_timeline, 0, &a1);
116 lv_anim_timeline_add(anim_timeline, 500, &a2);
117
118 lv_anim_timeline_set_progress(anim_timeline, 0);
119 lv_refr_now(NULL);
120 TEST_ASSERT_EQUAL(0, lv_obj_get_x(obj));
121
122 lv_anim_timeline_set_progress(anim_timeline, 65535);
123 lv_refr_now(NULL);
124 TEST_ASSERT_EQUAL(700, lv_obj_get_x(obj));
125 TEST_ASSERT_EQUAL(300, lv_obj_get_y(obj));
126
127 lv_anim_timeline_set_progress(anim_timeline, 10000);
128 lv_refr_now(NULL);
129 TEST_ASSERT_EQUAL(159, lv_obj_get_x(obj));
130 TEST_ASSERT_EQUAL(0, lv_obj_get_y(obj));
131
132 lv_anim_timeline_set_progress(anim_timeline, 21845);
133 lv_refr_now(NULL);
134 TEST_ASSERT_EQUAL(350, lv_obj_get_x(obj));
135 TEST_ASSERT_EQUAL(0, lv_obj_get_y(obj));
136
137 lv_anim_timeline_set_progress(anim_timeline, 32768);
138 lv_refr_now(NULL);
139 TEST_ASSERT_EQUAL(525, lv_obj_get_x(obj));
140 TEST_ASSERT_EQUAL(75, lv_obj_get_y(obj));
141
142 lv_anim_timeline_set_progress(anim_timeline, 43690);
143 lv_refr_now(NULL);
144 TEST_ASSERT_EQUAL(700, lv_obj_get_x(obj));
145 TEST_ASSERT_EQUAL(150, lv_obj_get_y(obj));
146
147 lv_anim_timeline_set_progress(anim_timeline, 65535);
148 lv_refr_now(NULL);
149 TEST_ASSERT_EQUAL(700, lv_obj_get_x(obj));
150 TEST_ASSERT_EQUAL(300, lv_obj_get_y(obj));
151 }
152
test_anim_timeline_start(void)153 void test_anim_timeline_start(void)
154 {
155 lv_obj_t * obj = lv_obj_create(lv_screen_active());
156 lv_obj_set_size(obj, 100, 100);
157
158 lv_obj_set_pos(obj, 70, 70);
159
160 /*
161 * |------1------|
162 * |-----Y-----|
163 * |--------Z--------|
164 * 0 200 1000 1500 2000 2500 3500 ms
165 * ? 50 100 200 400 700 value (px)
166 */
167
168 anim_timeline = lv_anim_timeline_create();
169
170 lv_anim_t a1;
171 lv_anim_init(&a1);
172 lv_anim_set_exec_cb(&a1, (lv_anim_exec_xcb_t)lv_obj_set_x);
173 lv_anim_set_var(&a1, obj);
174 lv_anim_set_values(&a1, 50, 100);
175 lv_anim_set_duration(&a1, 800);
176 lv_anim_set_early_apply(&a1, false);
177 lv_anim_timeline_add(anim_timeline, 200, &a1);
178
179 lv_anim_set_values(&a1, 200, 300);
180 lv_anim_set_duration(&a1, 1000);
181 lv_anim_timeline_add(anim_timeline, 1500, &a1);
182
183 /*Overlap with the previous*/
184 lv_anim_set_values(&a1, 400, 700);
185 lv_anim_set_duration(&a1, 1500);
186 lv_anim_timeline_add(anim_timeline, 2000, &a1);
187
188 lv_anim_timeline_start(anim_timeline);
189
190 /*As doesn't start at the beginning keep the original value*/
191 lv_refr_now(NULL);
192 TEST_ASSERT_EQUAL(70, lv_obj_get_x(obj));
193
194 lv_test_wait(199);
195 TEST_ASSERT_EQUAL(70, lv_obj_get_x(obj));
196
197 lv_test_wait(1); /*200*/
198 TEST_ASSERT_EQUAL(50, lv_obj_get_x(obj));
199
200 lv_test_wait(400); /*600*/
201 TEST_ASSERT_EQUAL(75, lv_obj_get_x(obj));
202
203 lv_test_wait(400); /*1000*/
204 TEST_ASSERT_EQUAL(100, lv_obj_get_x(obj));
205
206 /*There is a gap*/
207 lv_test_wait(100); /*1100*/
208 TEST_ASSERT_EQUAL(100, lv_obj_get_x(obj));
209
210 /*Should change it*/
211 lv_obj_set_x(obj, 10);
212
213 lv_test_wait(100); /*1200*/
214 TEST_ASSERT_EQUAL(100, lv_obj_get_x(obj));
215
216 lv_test_wait(300); /*1500*/
217 TEST_ASSERT_EQUAL(200, lv_obj_get_x(obj));
218
219 lv_test_wait(499); /*1999*/
220 TEST_ASSERT_EQUAL(249, lv_obj_get_x(obj));
221
222 lv_test_wait(1); /*2000*/
223 TEST_ASSERT_EQUAL(400, lv_obj_get_x(obj));
224
225 lv_test_wait(500); /*2500*/
226 TEST_ASSERT_EQUAL(499, lv_obj_get_x(obj));
227
228 lv_test_wait(500); /*3000*/
229 TEST_ASSERT_EQUAL(599, lv_obj_get_x(obj));
230
231 lv_test_wait(500); /*3500*/
232 TEST_ASSERT_EQUAL(700, lv_obj_get_x(obj));
233
234 lv_test_wait(500); /*3500*/
235 TEST_ASSERT_EQUAL(700, lv_obj_get_x(obj));
236
237 /*Nothing should change it*/
238 lv_obj_set_x(obj, 20);
239
240 lv_test_wait(100); /*3600*/
241 TEST_ASSERT_EQUAL(20, lv_obj_get_x(obj));
242 }
243
test_anim_timeline_reverse(void)244 void test_anim_timeline_reverse(void)
245 {
246 lv_obj_t * obj = lv_obj_create(lv_screen_active());
247 lv_obj_set_size(obj, 100, 100);
248
249 lv_obj_set_pos(obj, 70, 70);
250
251 /* Reverse this:
252 * |------1------|
253 * |-----Y-----|
254 * |--------Z--------|
255 * 0 200 1000 1500 2000 2500 3500 ms
256 * ? 50 100 200 300 700 value (px)
257 */
258
259 anim_timeline = lv_anim_timeline_create();
260 lv_anim_timeline_set_reverse(anim_timeline, true);
261
262 lv_anim_t a1;
263 lv_anim_init(&a1);
264 lv_anim_set_exec_cb(&a1, (lv_anim_exec_xcb_t)lv_obj_set_x);
265 lv_anim_set_var(&a1, obj);
266 lv_anim_set_values(&a1, 50, 100);
267 lv_anim_set_duration(&a1, 800);
268 lv_anim_set_early_apply(&a1, false);
269 lv_anim_timeline_add(anim_timeline, 200, &a1);
270
271 lv_anim_set_values(&a1, 200, 300);
272 lv_anim_set_duration(&a1, 1000);
273 lv_anim_timeline_add(anim_timeline, 1500, &a1);
274
275 /*Overlap with the previous*/
276 lv_anim_set_values(&a1, 400, 700);
277 lv_anim_set_duration(&a1, 1500);
278 lv_anim_timeline_add(anim_timeline, 2000, &a1);
279
280 lv_anim_timeline_set_progress(anim_timeline, LV_ANIM_TIMELINE_PROGRESS_MAX);
281 lv_anim_timeline_start(anim_timeline); /*0 (3500)*/
282
283 lv_refr_now(NULL);
284 TEST_ASSERT_EQUAL(700, lv_obj_get_x(obj));
285
286 lv_test_wait(999); /*999 (2501)*/
287 TEST_ASSERT_EQUAL(500, lv_obj_get_x(obj));
288
289 lv_test_wait(201); /*1200 (2300)*/
290 TEST_ASSERT_EQUAL(459, lv_obj_get_x(obj));
291
292 lv_test_wait(300); /*1500 (2000)*/
293 TEST_ASSERT_EQUAL(400, lv_obj_get_x(obj));
294
295 lv_test_wait(500); /*2000 (1500)*/
296 TEST_ASSERT_EQUAL(200, lv_obj_get_x(obj));
297
298 /*There is a gap*/
299 lv_test_wait(100); /*2100 (1400)*/
300 TEST_ASSERT_EQUAL(100, lv_obj_get_x(obj));
301
302 /*Should change it*/
303 lv_obj_set_x(obj, 10);
304
305 lv_test_wait(100); /*2200 (1300)*/
306 TEST_ASSERT_EQUAL(100, lv_obj_get_x(obj));
307
308 lv_test_wait(300); /*2500 (1000)*/
309 TEST_ASSERT_EQUAL(100, lv_obj_get_x(obj));
310
311 lv_test_wait(400); /*2900 (600)*/
312 TEST_ASSERT_EQUAL(75, lv_obj_get_x(obj));
313
314 lv_test_wait(400); /*3300 (200)*/
315 TEST_ASSERT_EQUAL(50, lv_obj_get_x(obj));
316
317 /*There is a gap*/
318 lv_test_wait(100); /*3400 (100)*/
319 TEST_ASSERT_EQUAL(50, lv_obj_get_x(obj));
320
321 /*Nothing should change it*/
322 lv_obj_set_x(obj, 20);
323 lv_test_wait(100);
324 TEST_ASSERT_EQUAL(20, lv_obj_get_x(obj));
325
326 lv_test_wait(1000);
327 TEST_ASSERT_EQUAL(20, lv_obj_get_x(obj));
328 }
329
test_anim_timeline_repeat(void)330 void test_anim_timeline_repeat(void)
331 {
332 lv_obj_t * obj = lv_obj_create(lv_screen_active());
333 lv_obj_set_size(obj, 100, 100);
334 lv_obj_set_pos(obj, 30, 40);
335
336 lv_anim_t a1;
337 lv_anim_init(&a1);
338 lv_anim_set_exec_cb(&a1, (lv_anim_exec_xcb_t)lv_obj_set_x);
339 lv_anim_set_var(&a1, obj);
340 lv_anim_set_values(&a1, 0, 1000);
341 lv_anim_set_duration(&a1, 1000);
342
343 anim_timeline = lv_anim_timeline_create();
344 TEST_ASSERT_NOT_NULL(anim_timeline);
345
346 lv_anim_timeline_add(anim_timeline, 0, &a1);
347 lv_anim_timeline_set_repeat_count(anim_timeline, 3);
348 lv_anim_timeline_set_repeat_delay(anim_timeline, 1);
349 lv_anim_timeline_start(anim_timeline);
350
351 lv_refr_now(NULL);
352
353 TEST_ASSERT_EQUAL(1, lv_anim_timeline_get_repeat_delay(anim_timeline));
354 TEST_ASSERT_EQUAL(1000, lv_anim_timeline_get_playtime(anim_timeline));
355
356 lv_test_wait(100);
357 TEST_ASSERT_EQUAL(99, lv_obj_get_x(obj));
358
359 lv_test_wait(500);
360 TEST_ASSERT_EQUAL(599, lv_obj_get_x(obj));
361
362 lv_test_wait(400);
363 TEST_ASSERT_EQUAL(1000, lv_obj_get_x(obj));
364
365 lv_test_wait(1);
366 TEST_ASSERT_EQUAL(0, lv_obj_get_x(obj));
367
368 lv_test_wait(500);
369 TEST_ASSERT_EQUAL(500, lv_obj_get_x(obj));
370
371 lv_test_wait(500);
372 TEST_ASSERT_EQUAL(1000, lv_obj_get_x(obj));
373
374 lv_test_wait(701);
375 TEST_ASSERT_EQUAL(699, lv_obj_get_x(obj));
376
377 lv_test_wait(1000);
378 TEST_ASSERT_EQUAL(1000, lv_obj_get_x(obj));
379
380 lv_test_wait(1000);
381 TEST_ASSERT_EQUAL(1000, lv_obj_get_x(obj));
382
383 }
384
385
test_anim_timeline_delay(void)386 void test_anim_timeline_delay(void)
387 {
388
389 lv_obj_t * obj = lv_obj_create(lv_screen_active());
390 lv_obj_set_size(obj, 100, 100);
391 lv_obj_set_pos(obj, 30, 40);
392
393 lv_anim_t a1;
394 lv_anim_init(&a1);
395 lv_anim_set_exec_cb(&a1, (lv_anim_exec_xcb_t)lv_obj_set_x);
396 lv_anim_set_var(&a1, obj);
397 lv_anim_set_values(&a1, 0, 1000);
398 lv_anim_set_duration(&a1, 1000);
399
400 anim_timeline = lv_anim_timeline_create();
401 TEST_ASSERT_NOT_NULL(anim_timeline);
402
403 lv_anim_timeline_add(anim_timeline, 0, &a1);
404 lv_anim_timeline_set_repeat_count(anim_timeline, 3);
405 lv_anim_timeline_set_repeat_delay(anim_timeline, 1000);
406 lv_anim_timeline_start(anim_timeline);
407
408 lv_refr_now(NULL);
409
410 TEST_ASSERT_EQUAL(1000, lv_anim_timeline_get_repeat_delay(anim_timeline));
411 TEST_ASSERT_EQUAL(1000, lv_anim_timeline_get_playtime(anim_timeline));
412
413 lv_test_wait(100);
414 TEST_ASSERT_EQUAL(99, lv_obj_get_x(obj));
415
416 lv_test_wait(500);
417 TEST_ASSERT_EQUAL(599, lv_obj_get_x(obj));
418
419 lv_test_wait(400);
420 TEST_ASSERT_EQUAL(1000, lv_obj_get_x(obj));
421
422 lv_test_wait(1000);
423 TEST_ASSERT_EQUAL(0, lv_obj_get_x(obj));
424
425 lv_test_wait(500);
426 TEST_ASSERT_EQUAL(500, lv_obj_get_x(obj));
427
428 lv_test_wait(500);
429 TEST_ASSERT_EQUAL(1000, lv_obj_get_x(obj));
430
431 lv_test_wait(1700);
432 TEST_ASSERT_EQUAL(699, lv_obj_get_x(obj));
433
434 lv_test_wait(1000);
435 TEST_ASSERT_EQUAL(1000, lv_obj_get_x(obj));
436
437 lv_test_wait(1000);
438 TEST_ASSERT_EQUAL(1000, lv_obj_get_x(obj));
439
440 }
441
anim1_exec_cb(void * var,int32_t v)442 void anim1_exec_cb(void * var, int32_t v)
443 {
444 LV_UNUSED(var);
445 LV_UNUSED(v);
446 }
anim1_start(lv_anim_t * a)447 void anim1_start(lv_anim_t * a)
448 {
449 LV_UNUSED(a);
450 anim1_start_called++;
451 }
anim1_completed(lv_anim_t * a)452 void anim1_completed(lv_anim_t * a)
453 {
454 LV_UNUSED(a);
455 anim1_completed_called++;
456 }
457
anim2_exec_cb(void * var,int32_t v)458 void anim2_exec_cb(void * var, int32_t v)
459 {
460 LV_UNUSED(var);
461 LV_UNUSED(v);
462 }
anim2_start(lv_anim_t * a)463 void anim2_start(lv_anim_t * a)
464 {
465 LV_UNUSED(a);
466 anim2_start_called++;
467 }
anim2_completed(lv_anim_t * a)468 void anim2_completed(lv_anim_t * a)
469 {
470 LV_UNUSED(a);
471 anim2_completed_called++;
472 }
473
test_anim_timeline_with_anim_start_cb_and_completed_cb(void)474 void test_anim_timeline_with_anim_start_cb_and_completed_cb(void)
475 {
476 lv_anim_t anim1;
477 lv_anim_t anim2;
478
479 lv_anim_init(&anim1);
480 lv_anim_set_values(&anim1, 0, 1024);
481 lv_anim_set_duration(&anim1, 300);
482 lv_anim_set_exec_cb(&anim1, anim1_exec_cb);
483 lv_anim_set_start_cb(&anim1, anim1_start);
484 lv_anim_set_completed_cb(&anim1, anim1_completed);
485 anim1_start_called = 0;
486 anim1_completed_called = 0;
487
488 lv_memcpy(&anim2, &anim1, sizeof(anim1));
489 lv_anim_set_duration(&anim2, 300);
490 lv_anim_set_path_cb(&anim2, lv_anim_path_overshoot);
491 lv_anim_set_exec_cb(&anim2, anim2_exec_cb);
492 lv_anim_set_start_cb(&anim2, anim2_start);
493 lv_anim_set_completed_cb(&anim2, anim2_completed);
494 anim2_start_called = 0;
495 anim2_completed_called = 0;
496
497 anim_timeline = lv_anim_timeline_create();
498 lv_anim_timeline_add(anim_timeline, 0, &anim1);
499 lv_anim_timeline_add(anim_timeline, 200, &anim2);
500 lv_anim_timeline_set_progress(anim_timeline, 0);
501 lv_anim_timeline_start(anim_timeline);
502
503 lv_refr_now(NULL);
504
505 /* |----- Reverse ------|
506 * |-----anim1-----| |--anim1 rvs--|
507 * |----anim2----| |--anim2 rvs--|
508 *
509 * 0 200 300 500 600 800 900 1100
510 */
511
512 lv_test_wait(20); /*Wait 20 ms*/
513 TEST_ASSERT_EQUAL(1, anim1_start_called);
514 TEST_ASSERT_EQUAL(0, anim1_completed_called);
515 TEST_ASSERT_EQUAL(0, anim2_start_called);
516 TEST_ASSERT_EQUAL(0, anim2_completed_called);
517
518 lv_test_wait(200); /*Now we are at 220ms */
519 TEST_ASSERT_EQUAL(1, anim1_start_called);
520 TEST_ASSERT_EQUAL(0, anim1_completed_called);
521 TEST_ASSERT_EQUAL(1, anim2_start_called);
522 TEST_ASSERT_EQUAL(0, anim2_completed_called);
523
524 lv_test_wait(100); /*Now we are at 320ms */
525 TEST_ASSERT_EQUAL(1, anim1_start_called);
526 TEST_ASSERT_EQUAL(1, anim1_completed_called);
527 TEST_ASSERT_EQUAL(1, anim2_start_called);
528 TEST_ASSERT_EQUAL(0, anim2_completed_called);
529
530 lv_test_wait(200); /*Now we are at 520ms */
531 TEST_ASSERT_EQUAL(1, anim1_start_called);
532 TEST_ASSERT_EQUAL(1, anim1_completed_called);
533 TEST_ASSERT_EQUAL(1, anim2_start_called);
534 TEST_ASSERT_EQUAL(1, anim2_completed_called);
535
536 lv_test_wait(80); /*Now we are at 600ms */
537 anim1_start_called = 0;
538 anim1_completed_called = 0;
539 anim2_start_called = 0;
540 anim2_completed_called = 0;
541
542 lv_anim_timeline_set_reverse(anim_timeline, true);
543 lv_anim_timeline_set_progress(anim_timeline, LV_ANIM_TIMELINE_PROGRESS_MAX);
544 lv_anim_timeline_start(anim_timeline);
545
546 lv_test_wait(20); /*Now we are at 620ms */
547 TEST_ASSERT_EQUAL(0, anim1_start_called);
548 TEST_ASSERT_EQUAL(0, anim1_completed_called);
549 TEST_ASSERT_EQUAL(1, anim2_start_called);
550 TEST_ASSERT_EQUAL(0, anim2_completed_called);
551
552 lv_test_wait(200); /*Now we are at 820ms */
553 TEST_ASSERT_EQUAL(1, anim1_start_called);
554 TEST_ASSERT_EQUAL(0, anim1_completed_called);
555 TEST_ASSERT_EQUAL(1, anim2_start_called);
556 TEST_ASSERT_EQUAL(0, anim2_completed_called);
557
558 lv_test_wait(100); /*Now we are at 920ms */
559 TEST_ASSERT_EQUAL(1, anim1_start_called);
560 TEST_ASSERT_EQUAL(0, anim1_completed_called);
561 TEST_ASSERT_EQUAL(1, anim2_start_called);
562 TEST_ASSERT_EQUAL(1, anim2_completed_called);
563
564 lv_test_wait(200); /*Now we are at 1120ms */
565 TEST_ASSERT_EQUAL(1, anim1_start_called);
566 TEST_ASSERT_EQUAL(1, anim1_completed_called);
567 TEST_ASSERT_EQUAL(1, anim2_start_called);
568 TEST_ASSERT_EQUAL(1, anim2_completed_called);
569 }
570
test_anim_timeline_without_exec_cb_but_anim_start_cb_and_completed_cb(void)571 void test_anim_timeline_without_exec_cb_but_anim_start_cb_and_completed_cb(void)
572 {
573 lv_anim_t anim1;
574
575 lv_anim_init(&anim1);
576 lv_anim_set_values(&anim1, 0, 1024);
577 lv_anim_set_duration(&anim1, 300);
578 lv_anim_set_exec_cb(&anim1, anim1_exec_cb);
579 lv_anim_set_start_cb(&anim1, anim1_start);
580 lv_anim_set_completed_cb(&anim1, anim1_completed);
581 anim1_start_called = 0;
582 anim1_completed_called = 0;
583
584 anim_timeline = lv_anim_timeline_create();
585 lv_anim_timeline_add(anim_timeline, 200, &anim1);
586 lv_anim_timeline_set_progress(anim_timeline, 0);
587 lv_anim_timeline_start(anim_timeline);
588
589 lv_refr_now(NULL);
590
591 /*
592 * |----anim1----|
593 *
594 * 0 200 300 500
595 */
596
597 lv_test_wait(20); /*Wait 20 ms*/
598 TEST_ASSERT_EQUAL(0, anim1_start_called);
599 TEST_ASSERT_EQUAL(0, anim1_completed_called);
600
601 lv_test_wait(200); /*Now we are at 220ms */
602 TEST_ASSERT_EQUAL(1, anim1_start_called);
603 TEST_ASSERT_EQUAL(0, anim1_completed_called);
604
605 lv_test_wait(300); /*Now we are at 520ms */
606 TEST_ASSERT_EQUAL(1, anim1_start_called);
607 TEST_ASSERT_EQUAL(1, anim1_completed_called);
608 }
609
610 #endif
611