#if LV_BUILD_TEST
#include "../lvgl.h"
#include "unity/unity.h"
#define LV_ARRAY_GET(array, index, type) ((type*)lv_array_at((array), (index)))
void setUp(void)
{
}
void tearDown(void)
{
}
void testAnimate(void)
{
const char * svg_anim0 = \
"";
lv_svg_node_t * svg_node_root = lv_svg_load_data(svg_anim0, lv_strlen(svg_anim0));
lv_svg_node_t * svg_node = LV_SVG_NODE_CHILD(svg_node_root, 0);
lv_svg_node_t * anim_node = LV_SVG_NODE_CHILD(svg_node, 0);
TEST_ASSERT_NOT_EQUAL(NULL, anim_node);
TEST_ASSERT_EQUAL(LV_SVG_TAG_ANIMATE, anim_node->type);
lv_svg_attr_type_t at = (LV_ARRAY_GET(&anim_node->attrs, 0, lv_svg_attr_t))->value.ival;
TEST_ASSERT_EQUAL(LV_SVG_ATTR_X, at);
float dur = (LV_ARRAY_GET(&anim_node->attrs, 1, lv_svg_attr_t))->value.fval;
TEST_ASSERT_EQUAL_FLOAT(dur, 9000.0f);
int ft = (LV_ARRAY_GET(&anim_node->attrs, 2, lv_svg_attr_t))->value.ival;
TEST_ASSERT_EQUAL(ft, LV_SVG_ANIM_FREEZE);
float fr = (LV_ARRAY_GET(&anim_node->attrs, 3, lv_svg_attr_t))->value.fval;
TEST_ASSERT_EQUAL_FLOAT(fr, 300.0f);
float to = (LV_ARRAY_GET(&anim_node->attrs, 4, lv_svg_attr_t))->value.fval;
TEST_ASSERT_EQUAL_FLOAT(to, 0.0f);
lv_svg_node_delete(svg_node_root);
}
void testSet(void)
{
const char * svg_anim0 = \
"";
lv_svg_node_t * svg_node_root = lv_svg_load_data(svg_anim0, lv_strlen(svg_anim0));
lv_svg_node_t * svg_node = LV_SVG_NODE_CHILD(svg_node_root, 0);
lv_svg_node_t * anim_node = LV_SVG_NODE_CHILD(svg_node, 0);
TEST_ASSERT_NOT_EQUAL(NULL, anim_node);
TEST_ASSERT_EQUAL(LV_SVG_TAG_SET, anim_node->type);
lv_svg_attr_type_t at = (LV_ARRAY_GET(&anim_node->attrs, 0, lv_svg_attr_t))->value.ival;
TEST_ASSERT_EQUAL(LV_SVG_ATTR_X, at);
float to = (LV_ARRAY_GET(&anim_node->attrs, 1, lv_svg_attr_t))->value.fval;
TEST_ASSERT_EQUAL_FLOAT(to, 500.0f);
lv_svg_node_delete(svg_node_root);
}
void testAnimateMotion(void)
{
const char * svg_anim0 = \
"";
lv_svg_node_t * svg_node_root = lv_svg_load_data(svg_anim0, lv_strlen(svg_anim0));
lv_svg_node_t * path_node = LV_SVG_NODE_CHILD(svg_node_root, 0);
TEST_ASSERT_NOT_EQUAL(NULL, path_node);
lv_svg_node_t * anim_node = LV_SVG_NODE_CHILD(svg_node_root, 1);
TEST_ASSERT_NOT_EQUAL(NULL, anim_node);
TEST_ASSERT_EQUAL(LV_SVG_TAG_ANIMATE_MOTION, anim_node->type);
lv_svg_node_t * mpath_node = LV_SVG_NODE_CHILD(anim_node, 0);
TEST_ASSERT_NOT_EQUAL(NULL, mpath_node);
TEST_ASSERT_EQUAL(LV_SVG_TAG_MPATH, mpath_node->type);
const char * xlink = (LV_ARRAY_GET(&mpath_node->attrs, 0, lv_svg_attr_t))->value.sval;
TEST_ASSERT_EQUAL_STRING(xlink, path_node->xml_id);
uint32_t rp = (LV_ARRAY_GET(&anim_node->attrs, 1, lv_svg_attr_t))->value.uval;
TEST_ASSERT_EQUAL(rp, 0);
float rt = (LV_ARRAY_GET(&anim_node->attrs, 2, lv_svg_attr_t))->value.fval;
TEST_ASSERT_EQUAL_FLOAT(rt, 0.0f);
lv_svg_node_delete(svg_node_root);
const char * svg_anim1 = \
"";
svg_node_root = lv_svg_load_data(svg_anim1, lv_strlen(svg_anim1));
path_node = LV_SVG_NODE_CHILD(svg_node_root, 0);
anim_node = LV_SVG_NODE_CHILD(path_node, 0);
TEST_ASSERT_NOT_EQUAL(NULL, anim_node);
TEST_ASSERT_EQUAL(LV_SVG_TAG_ANIMATE_MOTION, anim_node->type);
lv_svg_attr_values_list_t * lb = (LV_ARRAY_GET(&anim_node->attrs, 0, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(lb->length, 1);
float * fb = (float *)(&lb->data);
TEST_ASSERT_EQUAL_FLOAT(*fb, 500.0f);
float dr = (LV_ARRAY_GET(&anim_node->attrs, 1, lv_svg_attr_t))->value.fval;
TEST_ASSERT_EQUAL(dr, 3100.0f);
int cm = (LV_ARRAY_GET(&anim_node->attrs, 2, lv_svg_attr_t))->value.ival;
TEST_ASSERT_EQUAL(cm, LV_SVG_ANIM_CALC_MODE_LINEAR);
lv_svg_attr_values_list_t * l = (LV_ARRAY_GET(&anim_node->attrs, 3, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(l->length, 3);
float * pt = (float *)(&l->data);
TEST_ASSERT_EQUAL_FLOAT(pt[0], 0.5f);
TEST_ASSERT_EQUAL_FLOAT(pt[1], 0.8f);
TEST_ASSERT_EQUAL_FLOAT(pt[2], 1.0f);
lv_svg_attr_values_list_t * lp = (LV_ARRAY_GET(&anim_node->attrs, 4, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(lp->length, 2);
lv_svg_node_delete(svg_node_root);
const char * svg_anim2 = \
"";
svg_node_root = lv_svg_load_data(svg_anim2, lv_strlen(svg_anim2));
path_node = LV_SVG_NODE_CHILD(svg_node_root, 0);
anim_node = LV_SVG_NODE_CHILD(path_node, 0);
TEST_ASSERT_NOT_EQUAL(NULL, anim_node);
TEST_ASSERT_EQUAL(LV_SVG_TAG_ANIMATE_MOTION, anim_node->type);
lb = (LV_ARRAY_GET(&anim_node->attrs, 0, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(lb->length, 2);
fb = (float *)(&lb->data);
TEST_ASSERT_EQUAL_FLOAT(fb[0], 5000.0f);
TEST_ASSERT_EQUAL_FLOAT(fb[1], 2000.0f);
lb = (LV_ARRAY_GET(&anim_node->attrs, 1, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(lb->length, 2);
fb = (float *)(&lb->data);
TEST_ASSERT_EQUAL_FLOAT(fb[0], 8000.0f);
TEST_ASSERT_EQUAL_FLOAT(fb[1], 10000.0f);
lb = (LV_ARRAY_GET(&anim_node->attrs, 2, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(lb->length, 2);
lv_svg_point_t * ps = (lv_svg_point_t *)(&lb->data);
TEST_ASSERT_EQUAL_FLOAT(ps[0].x, 100.0f);
TEST_ASSERT_EQUAL_FLOAT(ps[0].y, 50.0f);
TEST_ASSERT_EQUAL_FLOAT(ps[1].x, 200.0f);
TEST_ASSERT_EQUAL_FLOAT(ps[1].y, 200.0f);
lb = (LV_ARRAY_GET(&anim_node->attrs, 3, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(lb->length, 2);
fb = (float *)(&lb->data);
TEST_ASSERT_EQUAL_FLOAT(fb[0], 100.0f);
TEST_ASSERT_EQUAL_FLOAT(fb[1], 200.0f);
l = (LV_ARRAY_GET(&anim_node->attrs, 4, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(l->length, 4);
ps = (lv_svg_point_t *)(&l->data);
TEST_ASSERT_EQUAL_FLOAT(ps[0].x, 0.0f);
TEST_ASSERT_EQUAL_FLOAT(ps[0].y, 0.0f);
TEST_ASSERT_EQUAL_FLOAT(ps[1].x, 1.5f);
TEST_ASSERT_EQUAL_FLOAT(ps[1].y, 1.0f);
TEST_ASSERT_EQUAL_FLOAT(ps[2].x, 0.5f);
TEST_ASSERT_EQUAL_FLOAT(ps[2].y, 0.5f);
TEST_ASSERT_EQUAL_FLOAT(ps[3].x, 2.0f);
TEST_ASSERT_EQUAL_FLOAT(ps[3].y, 1.5f);
lv_svg_node_delete(svg_node_root);
}
void testAnimateTransform(void)
{
const char * svg_anim0 = \
"";
lv_svg_node_t * svg_node_root = lv_svg_load_data(svg_anim0, lv_strlen(svg_anim0));
lv_svg_node_t * path_node = LV_SVG_NODE_CHILD(svg_node_root, 0);
TEST_ASSERT_NOT_EQUAL(NULL, path_node);
lv_svg_node_t * anim_node1 = LV_SVG_NODE_CHILD(path_node, 0);
TEST_ASSERT_NOT_EQUAL(NULL, anim_node1);
TEST_ASSERT_EQUAL(LV_SVG_TAG_ANIMATE_TRANSFORM, anim_node1->type);
lv_svg_node_t * anim_node2 = LV_SVG_NODE_CHILD(path_node, 1);
TEST_ASSERT_NOT_EQUAL(NULL, anim_node2);
TEST_ASSERT_EQUAL(LV_SVG_TAG_ANIMATE_TRANSFORM, anim_node2->type);
lv_svg_attr_type_t at = (LV_ARRAY_GET(&anim_node1->attrs, 0, lv_svg_attr_t))->value.ival;
TEST_ASSERT_EQUAL(LV_SVG_ATTR_TRANSFORM, at);
lv_svg_transform_type_t tt = (LV_ARRAY_GET(&anim_node1->attrs, 1, lv_svg_attr_t))->value.ival;
TEST_ASSERT_EQUAL(LV_SVG_TRANSFORM_TYPE_ROTATE, tt);
lv_svg_attr_values_list_t * l = (LV_ARRAY_GET(&anim_node1->attrs, 2, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(l->length, 1);
float * pt = (float *)(&l->data);
TEST_ASSERT_EQUAL_FLOAT(pt[0], 0.0f);
l = (LV_ARRAY_GET(&anim_node2->attrs, 5, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(l->length, 2);
lv_svg_attr_values_list_t * ll = (lv_svg_attr_values_list_t *)(&l->data);
TEST_ASSERT_EQUAL(ll->length, 1);
pt = (float *)(&ll->data);
TEST_ASSERT_EQUAL_FLOAT(pt[0], 0.5f);
ll = (lv_svg_attr_values_list_t *)((uint8_t *)(&l->data) + sizeof(uint32_t) + sizeof(float) * 4);
TEST_ASSERT_EQUAL(ll->length, 2);
pt = (float *)(&ll->data);
TEST_ASSERT_EQUAL_FLOAT(pt[0], 0.2f);
TEST_ASSERT_EQUAL_FLOAT(pt[1], 0.2f);
lv_svg_node_delete(svg_node_root);
}
void testAnimateColor(void)
{
const char * svg_anim0 = \
"";
lv_svg_node_t * svg_node_root = lv_svg_load_data(svg_anim0, lv_strlen(svg_anim0));
lv_svg_node_t * path_node = LV_SVG_NODE_CHILD(svg_node_root, 0);
TEST_ASSERT_NOT_EQUAL(NULL, path_node);
lv_svg_node_t * anim_node = LV_SVG_NODE_CHILD(path_node, 0);
TEST_ASSERT_NOT_EQUAL(NULL, anim_node);
TEST_ASSERT_EQUAL(LV_SVG_TAG_ANIMATE_COLOR, anim_node->type);
lv_svg_attr_type_t at = (LV_ARRAY_GET(&anim_node->attrs, 0, lv_svg_attr_t))->value.ival;
TEST_ASSERT_EQUAL(LV_SVG_ATTR_FILL, at);
uint32_t c = (LV_ARRAY_GET(&anim_node->attrs, 1, lv_svg_attr_t))->value.uval;
TEST_ASSERT_EQUAL(c, 0xFF0000);
c = (LV_ARRAY_GET(&anim_node->attrs, 2, lv_svg_attr_t))->value.uval;
TEST_ASSERT_EQUAL(c, 0xDDDDFF);
lv_svg_attr_values_list_t * l = (LV_ARRAY_GET(&anim_node->attrs, 9, lv_svg_attr_t))->value.val;
TEST_ASSERT_EQUAL(l->length, 2);
uint32_t * pc = (uint32_t *)(&l->data);
TEST_ASSERT_EQUAL(pc[0], 0x00FF00);
TEST_ASSERT_EQUAL(pc[1], 0x000000);
lv_svg_node_delete(svg_node_root);
}
#endif