#if LV_BUILD_TEST #include "../lvgl.h" #include "lv_test_helpers.h" #include #include "unity/unity.h" static lv_layer_t layer; static lv_obj_t * canvas; static lv_draw_buf_t * canvas_buf; void setUp(void) { canvas = lv_canvas_create(lv_scr_act()); canvas_buf = lv_draw_buf_create(480, 480, LV_COLOR_FORMAT_ARGB8888, 0); TEST_ASSERT_NOT_NULL(canvas_buf); lv_canvas_set_draw_buf(canvas, canvas_buf); lv_canvas_fill_bg(canvas, lv_color_make(0xff, 0xff, 0xff), 255); lv_canvas_init_layer(canvas, &layer); } void tearDown(void) { lv_image_cache_drop(canvas_buf); lv_draw_buf_destroy(canvas_buf); lv_obj_del(canvas); } #if LV_USE_VECTOR_GRAPHIC && LV_USE_SVG #define SNAPSHOT_NAME(n) (#n) static void draw_snapshot(const char * name) { LV_UNUSED(name); #ifndef NON_AMD64_BUILD char fn_buf[64]; lv_snprintf(fn_buf, sizeof(fn_buf), "draw/svg_draw_%s.lp64.png", name); TEST_ASSERT_EQUAL_SCREENSHOT(fn_buf); #else char fn_buf[64]; lv_snprintf(fn_buf, sizeof(fn_buf), "draw/svg_draw_%s.lp32.png", name); TEST_ASSERT_EQUAL_SCREENSHOT(fn_buf); #endif } static void draw_svg(lv_svg_node_t * svg) { lv_image_cache_drop(canvas_buf); lv_canvas_set_draw_buf(canvas, canvas_buf); lv_canvas_fill_bg(canvas, lv_color_make(0xff, 0xff, 0xff), 255); lv_draw_svg(&layer, svg); lv_canvas_finish_layer(canvas, &layer); } void test_draw_group(void) { const char * svg_group_1 = \ "" "" "" "" ""; lv_svg_node_t * svg = lv_svg_load_data(svg_group_1, lv_strlen(svg_group_1)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_group_1)); lv_svg_node_delete(svg); const char * svg_group_2 = \ "" "" "" ""; svg = lv_svg_load_data(svg_group_2, lv_strlen(svg_group_2)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_group_2)); lv_svg_node_delete(svg); const char * svg_group_3 = \ "" "" "" "" ""; svg = lv_svg_load_data(svg_group_3, lv_strlen(svg_group_3)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_group_3)); lv_svg_node_delete(svg); const char * svg_group_4 = \ "" "" "" "" "" "" "" "" "" ""; svg = lv_svg_load_data(svg_group_4, lv_strlen(svg_group_4)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_group_4)); lv_svg_node_delete(svg); } static void load_image(const char * image_url, lv_draw_image_dsc_t * img_dsc) { if(strcmp(image_url, "cogwheel.bin") == 0) { LV_IMAGE_DECLARE(test_image_cogwheel_argb8888); img_dsc->header = test_image_cogwheel_argb8888.header; img_dsc->src = &test_image_cogwheel_argb8888; } } static const char * get_font_path(const char * font_family) { LV_UNUSED(font_family); #ifndef TEST_FONT_PATH return "./src/test_files/fonts/noto/NotoSansSC-Regular.ttf"; #else return TEST_FONT_PATH; #endif } const lv_svg_render_hal_t hal = { .load_image = load_image, .get_font_path = get_font_path, }; void test_draw_shapes(void) { lv_svg_render_init(&hal); const char * svg_shapes_1 = \ "" "" "" ""; lv_svg_node_t * svg = lv_svg_load_data(svg_shapes_1, lv_strlen(svg_shapes_1)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_1)); lv_svg_node_delete(svg); const char * svg_shapes_2 = \ "" "" ""; svg = lv_svg_load_data(svg_shapes_2, lv_strlen(svg_shapes_2)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_2)); lv_svg_node_delete(svg); const char * svg_shapes_3 = \ "" "" "" "" "" "" ""; svg = lv_svg_load_data(svg_shapes_3, lv_strlen(svg_shapes_3)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_3)); lv_svg_node_delete(svg); const char * svg_shapes_4 = \ "" "" "" "" "" "" "A" ""; svg = lv_svg_load_data(svg_shapes_4, lv_strlen(svg_shapes_4)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_4)); lv_svg_node_delete(svg); const char * svg_shapes_5 = \ "" "" "" "" "" ""; svg = lv_svg_load_data(svg_shapes_5, lv_strlen(svg_shapes_5)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_5)); lv_svg_node_delete(svg); const char * svg_shapes_6 = \ "" "" "" "" "" ""; svg = lv_svg_load_data(svg_shapes_6, lv_strlen(svg_shapes_6)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_6)); lv_svg_node_delete(svg); const char * svg_shapes_7 = \ "" "" "" "" "" ""; svg = lv_svg_load_data(svg_shapes_7, lv_strlen(svg_shapes_7)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_7)); lv_svg_node_delete(svg); const char * svg_shapes_8 = \ "" "" "" "" "" "" "" "" "" ""; svg = lv_svg_load_data(svg_shapes_8, lv_strlen(svg_shapes_8)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_8)); lv_svg_node_delete(svg); const char * svg_shapes_9 = \ "" "" "" "" "" ""; svg = lv_svg_load_data(svg_shapes_9, lv_strlen(svg_shapes_9)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_9)); lv_svg_node_delete(svg); const char * svg_shapes_10 = \ "" "" "" "" ""; svg = lv_svg_load_data(svg_shapes_10, lv_strlen(svg_shapes_10)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_10)); lv_svg_node_delete(svg); const char * svg_shapes_11 = \ "" "" "" "" "" "" "" "" ""; svg = lv_svg_load_data(svg_shapes_11, lv_strlen(svg_shapes_11)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_shapes_11)); lv_svg_node_delete(svg); } void test_draw_image(void) { lv_svg_render_init(&hal); const char * svg_image_0 = \ "" "" ""; lv_svg_node_t * svg = lv_svg_load_data(svg_image_0, lv_strlen(svg_image_0)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_0)); lv_svg_node_delete(svg); const char * svg_image_1 = \ "" "" ""; svg = lv_svg_load_data(svg_image_1, lv_strlen(svg_image_1)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_1)); lv_svg_node_delete(svg); const char * svg_image_2 = \ "" "" ""; svg = lv_svg_load_data(svg_image_2, lv_strlen(svg_image_2)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_2)); lv_svg_node_delete(svg); const char * svg_image_3 = \ "" "" ""; svg = lv_svg_load_data(svg_image_3, lv_strlen(svg_image_3)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_3)); lv_svg_node_delete(svg); const char * svg_image_4 = \ "" "" ""; svg = lv_svg_load_data(svg_image_4, lv_strlen(svg_image_4)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_4)); lv_svg_node_delete(svg); const char * svg_image_5 = \ "" "" ""; svg = lv_svg_load_data(svg_image_5, lv_strlen(svg_image_5)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_5)); lv_svg_node_delete(svg); const char * svg_image_6 = \ "" "" ""; svg = lv_svg_load_data(svg_image_6, lv_strlen(svg_image_6)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_6)); lv_svg_node_delete(svg); const char * svg_image_7 = \ "" "" ""; svg = lv_svg_load_data(svg_image_7, lv_strlen(svg_image_7)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_7)); lv_svg_node_delete(svg); const char * svg_image_8 = \ "" "" ""; svg = lv_svg_load_data(svg_image_8, lv_strlen(svg_image_8)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_8)); lv_svg_node_delete(svg); const char * svg_image_9 = \ "" "" ""; svg = lv_svg_load_data(svg_image_9, lv_strlen(svg_image_9)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_9)); lv_svg_node_delete(svg); const char * svg_image_10 = \ "" "" ""; svg = lv_svg_load_data(svg_image_10, lv_strlen(svg_image_10)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_10)); lv_svg_node_delete(svg); const char * svg_image_11 = \ "" "" ""; svg = lv_svg_load_data(svg_image_11, lv_strlen(svg_image_11)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_11)); lv_svg_node_delete(svg); const char * svg_image_12 = \ "" "" ""; svg = lv_svg_load_data(svg_image_12, lv_strlen(svg_image_12)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_image_12)); lv_svg_node_delete(svg); } void test_draw_text(void) { lv_svg_render_init(&hal); const char * svg_text_1 = \ "" "hello all world" ""; lv_svg_node_t * svg = lv_svg_load_data(svg_text_1, lv_strlen(svg_text_1)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_text_1)); lv_svg_node_delete(svg); const char * svg_text_2 = \ "" "" "" "" "" "hello all world" ""; svg = lv_svg_load_data(svg_text_2, lv_strlen(svg_text_2)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_text_2)); lv_svg_node_delete(svg); } void test_draw_complex(void) { lv_svg_render_init(&hal); const char * svg_com_1 = \ "" "'use' with a 'transform' attribute" "" "" "" "" ""; lv_svg_node_t * svg = lv_svg_load_data(svg_com_1, lv_strlen(svg_com_1)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_com_1)); lv_svg_node_delete(svg); const char * svg_com_2 = \ "" "" "" "" "" "" ""; svg = lv_svg_load_data(svg_com_2, lv_strlen(svg_com_2)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_com_2)); lv_svg_node_delete(svg); const char * svg_com_3 = \ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "M100,200 C100,100 250,100 250,200" "S400,300 400,200" ""; svg = lv_svg_load_data(svg_com_3, lv_strlen(svg_com_3)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_com_3)); lv_svg_node_delete(svg); const char * svg_com_4 = \ "" "" "Example rect02 - rounded rectangles" "" "" "" "" "" ""; svg = lv_svg_load_data(svg_com_4, lv_strlen(svg_com_4)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_com_4)); lv_svg_node_delete(svg); const char * svg_com_5 = \ "" "" "" "" "" ""; svg = lv_svg_load_data(svg_com_5, lv_strlen(svg_com_5)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_com_5)); lv_svg_node_delete(svg); const char * svg_com_6 = \ "" "" "" "" "" "" "" "" ""; svg = lv_svg_load_data(svg_com_6, lv_strlen(svg_com_6)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_com_6)); lv_svg_node_delete(svg); const char * svg_com_7 = \ "" "" "" ""; svg = lv_svg_load_data(svg_com_7, lv_strlen(svg_com_7)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_com_7)); lv_svg_node_delete(svg); const char * svg_com_8 = \ "" "داستان SVG Tiny 1.2 طولا ني است." ""; svg = lv_svg_load_data(svg_com_8, lv_strlen(svg_com_8)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_com_8)); lv_svg_node_delete(svg); } void test_draw_svg(void) { const char * svg_viewport_1 = \ ""; lv_svg_node_t * svg = lv_svg_load_data(svg_viewport_1, lv_strlen(svg_viewport_1)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_viewport_1)); lv_svg_node_delete(svg); const char * svg_viewport_2 = \ ""; svg = lv_svg_load_data(svg_viewport_2, lv_strlen(svg_viewport_2)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_viewport_2)); lv_svg_node_delete(svg); const char * svg_viewport_3 = \ "" "" "" "" "Stretch to fit" ""; svg = lv_svg_load_data(svg_viewport_3, lv_strlen(svg_viewport_3)); TEST_ASSERT_NOT_EQUAL(NULL, svg); draw_svg(svg); draw_snapshot(SNAPSHOT_NAME(svg_viewport_3)); lv_svg_node_delete(svg); } #else void test_draw_svg(void) { ; } #endif #endif