From 3bb649db7f57d36e7889918bbc04e1f7d4b78b28 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 8 Nov 2023 22:28:14 +0100 Subject: [PATCH] test: add binding test reference related to #4645 --- tests/ref_imgs/binding.png | Bin 0 -> 36662 bytes tests/src/test_cases/test_bindings.c | 261 +++++++++++++++++++ tests/src/test_cases/widgets/test_dropdown.c | 1 - 3 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 tests/ref_imgs/binding.png create mode 100644 tests/src/test_cases/test_bindings.c diff --git a/tests/ref_imgs/binding.png b/tests/ref_imgs/binding.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5162f9486ef6068f909f9aa3462cf094209e75 GIT binary patch literal 36662 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"T42L(mUeoJZ~U1LW2^*^ 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 literal 0 HcmV?d00001 diff --git a/tests/src/test_cases/test_bindings.c b/tests/src/test_cases/test_bindings.c new file mode 100644 index 0000000000..274b164a2e --- /dev/null +++ b/tests/src/test_cases/test_bindings.c @@ -0,0 +1,261 @@ +#if LV_BUILD_TEST || 1 +#include "../lvgl.h" + +#include "unity/unity.h" +#include "lv_test_indev.h" + +static void create_ui(void); +static void chart_type_observer_cb(lv_subject_t * subject, lv_observer_t * observer); +static void buttonmatrix_event_cb(lv_event_t * e); +static lv_obj_t * list_button_create(lv_obj_t * parent); +static void opa_anim_cb(void * var, int32_t v); +static void draw_to_canvas(lv_obj_t * canvas); + +void setUp(void) +{ + /* Function run before every test */ +} + +void tearDown(void) +{ + /* Function run after every test */ +} + +void test_binding(void) +{ + create_ui(); + + /*Wait for the animation*/ + lv_test_indev_wait(500); + + TEST_ASSERT_EQUAL_SCREENSHOT("binding.png"); +} + + + +static void create_ui(void) +{ + /*Create a colors*/ + lv_color_t c1 = lv_color_hex(0xff0000); + lv_color_t c2 = lv_palette_darken(LV_PALETTE_BLUE, 2); + lv_color_t c3 = lv_color_mix(c1, c2, LV_OPA_60); + + /*Create a style*/ + static lv_style_t style_big_font; + lv_style_init(&style_big_font); + + /*Use a built-in font*/ + lv_style_set_text_font(&style_big_font, &lv_font_montserrat_24); + + /*Get the active screen*/ + lv_obj_t * scr = lv_screen_active(); + + /*Declare static array of integers, and test grid setting options*/ + static lv_coord_t gird_cols[] = {300, LV_GRID_FR(3), LV_GRID_FR(2), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t gird_rows[] = {100, LV_GRID_FR(1), LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; + lv_obj_set_grid_dsc_array(scr, gird_cols, gird_rows); + + static lv_subject_t chart_type_subject; + lv_subject_init_int(&chart_type_subject, 0); + + /*Create a widget*/ + lv_obj_t * dropdown = lv_dropdown_create(scr); + + /*Pass a string as argument*/ + lv_dropdown_set_options(dropdown, "Lines\nBars"); + + /*Use grid align options*/ + lv_obj_set_grid_cell(dropdown, LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); + + /*Bind to a subject*/ + lv_dropdown_bind_value(dropdown, &chart_type_subject); + + /*Create a chart with an external array of points*/ + lv_obj_t * chart = lv_chart_create(lv_screen_active()); + lv_obj_set_grid_cell(chart, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 1, 1); + + lv_chart_series_t * series = lv_chart_add_series(chart, c3, LV_CHART_AXIS_PRIMARY_X); + + static int32_t chart_y_array[10] = {10, 25, 50, 40, 30, 35, 60, 65, 70, 75}; + lv_chart_set_ext_y_array(chart, series, chart_y_array); + + /*Add custom observer callback*/ + lv_subject_add_observer_obj(&chart_type_subject, chart_type_observer_cb, chart, NULL); + + /*Manually set the subject's value*/ + lv_subject_set_int(&chart_type_subject, 1); + + lv_obj_t * label = lv_label_create(scr); + lv_obj_set_grid_cell(label, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_CENTER, 0, 1); + + /*Apply styles on main part and default state*/ + lv_obj_set_style_bg_opa(label, LV_OPA_70, 0); + lv_obj_set_style_bg_color(label, c1, 0); + lv_obj_set_style_text_color(label, c2, 0); + lv_obj_add_style(label, &style_big_font, 0); + + + /*Declare an array of strings*/ + static const char * btnmatrix_options[] = { + "First", "Second", "\n", + "Third", "" + }; + + static const lv_buttonmatrix_ctrl_t btnmatrix_ctrl[] = { + LV_BUTTONMATRIX_CTRL_DISABLED, 2 | LV_BUTTONMATRIX_CTRL_CHECKED, + 1, + }; + + lv_obj_t * btnmatrix = lv_buttonmatrix_create(scr); + lv_obj_set_grid_cell(btnmatrix, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); + /*Pass string and enum arrays*/ + lv_buttonmatrix_set_map(btnmatrix, btnmatrix_options); + lv_buttonmatrix_set_ctrl_map(btnmatrix, btnmatrix_ctrl); + /*Add style to non main part and non default state*/ + lv_obj_add_style(btnmatrix, &style_big_font, LV_PART_ITEMS | LV_STATE_CHECKED); + + lv_buttonmatrix_set_selected_button(btnmatrix, 1); + lv_obj_add_event(btnmatrix, buttonmatrix_event_cb, LV_EVENT_VALUE_CHANGED, label); + lv_obj_send_event(btnmatrix, LV_EVENT_VALUE_CHANGED, NULL); + + /*Create a base object*/ + lv_obj_t * cont = lv_obj_create(scr); + /*Span 2 rows*/ + lv_obj_set_grid_cell(cont, LV_GRID_ALIGN_STRETCH, 2, 1, LV_GRID_ALIGN_STRETCH, 0, 2); + + /*Apply flex layout*/ + lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN); + + /*For loop*/ + uint32_t i; + for(i = 0; i < 10; i++) { + /*Call a function implemented in the binding which returns a widget*/ + lv_obj_t * btn = list_button_create(cont); + + if(i == 0) { + /*Start an animation*/ + lv_anim_t a; + lv_anim_init(&a); + lv_anim_set_var(&a, btn); + lv_anim_set_values(&a, LV_OPA_COVER, LV_OPA_50); + lv_anim_set_exec_cb(&a, opa_anim_cb); /*Pass a callback*/ + lv_anim_set_time(&a, 300); + lv_anim_set_path_cb(&a, lv_anim_path_ease_out); + lv_anim_start(&a); + } + if(i == 1) { + /*Use flags*/ + lv_obj_add_flag(btn, LV_OBJ_FLAG_HIDDEN); + } + if(i == 2) { + lv_obj_t * btn_label = lv_obj_get_child(btn, 0); + lv_label_set_text(btn_label, "A multi-line text with a ° symbol"); + lv_obj_set_width(btn_label, lv_pct(100)); + } + } + + /*Large byte array*/ + static uint8_t canvas_buf[400 * 100 * 2]; + + lv_obj_t * canvas = lv_canvas_create(scr); + lv_obj_set_grid_cell(canvas, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_START, 2, 1); + /*Test RGB565 rendering*/ + lv_canvas_set_buffer(canvas, canvas_buf, 400, 100, LV_COLOR_FORMAT_RGB565); + lv_canvas_fill_bg(canvas, c2, LV_OPA_COVER); + draw_to_canvas(canvas); + + LV_IMG_DECLARE(test_img_lvgl_logo_jpg); + lv_obj_t * img; + img = lv_image_create(scr); + lv_image_set_src(img, &test_img_lvgl_logo_jpg); + lv_obj_align(img, LV_ALIGN_BOTTOM_RIGHT, -20, -20); + lv_obj_add_flag(img, LV_OBJ_FLAG_IGNORE_LAYOUT); + + img = lv_image_create(scr); + lv_image_set_src(img, "A:src/test_assets/test_img_lvgl_logo.png"); + lv_obj_set_pos(img, 500, 420); + lv_obj_add_flag(img, LV_OBJ_FLAG_IGNORE_LAYOUT); + lv_image_set_rotation(img, 200); + lv_image_set_scale_x(img, 400); +} + +static void chart_type_observer_cb(lv_subject_t * subject, lv_observer_t * observer) +{ + int32_t v = lv_subject_get_int(subject); + lv_obj_t * chart = lv_observer_get_target(observer); + lv_chart_set_type(chart, v == 0 ? LV_CHART_TYPE_LINE : LV_CHART_TYPE_BAR); +} + +static void buttonmatrix_event_cb(lv_event_t * e) +{ + lv_obj_t * label = lv_event_get_user_data(e); + lv_obj_t * buttonmatrix = lv_event_get_target(e); + + uint32_t idx = lv_buttonmatrix_get_selected_button(buttonmatrix); + const char * text = lv_buttonmatrix_get_button_text(buttonmatrix, idx); + lv_label_set_text(label, text); +} + +static lv_obj_t * list_button_create(lv_obj_t * parent) +{ + lv_obj_t * btn = lv_button_create(parent); + lv_obj_set_size(btn, lv_pct(100), LV_SIZE_CONTENT); + + /*Get an integer*/ + uint32_t idx = lv_obj_get_index(btn); + + /*Formatted string for label*/ + lv_obj_t * label = lv_label_create(btn); + lv_label_set_text_fmt(label, LV_SYMBOL_FILE " Item %d", idx); + + return btn; +} + +static void opa_anim_cb(void * var, int32_t v) +{ + lv_obj_set_style_opa(var, v, 0); +} + + +static void draw_to_canvas(lv_obj_t * canvas) +{ + lv_layer_t layer; + lv_canvas_init_layer(canvas, &layer); + + /*Use draw descriptors*/ + LV_IMAGE_DECLARE(test_img_lvgl_logo_png); + lv_draw_image_dsc_t image_draw_dsc; + lv_draw_image_dsc_init(&image_draw_dsc); + image_draw_dsc.src = &test_img_lvgl_logo_png; + + lv_area_t coords = {10, 10, 10 + test_img_lvgl_logo_png.header.w - 1, 10 + test_img_lvgl_logo_png.header.h - 1}; + lv_draw_image(&layer, &image_draw_dsc, &coords); + + /*Reuse the draw descriptor*/ + lv_area_move(&coords, 40, 40); + image_draw_dsc.opa = LV_OPA_50; + lv_draw_image(&layer, &image_draw_dsc, &coords); + + lv_draw_line_dsc_t line_draw_dsc; + lv_draw_line_dsc_init(&line_draw_dsc); + line_draw_dsc.color = lv_color_hex3(0xCA8); + line_draw_dsc.width = 8; + line_draw_dsc.round_end = 1; + line_draw_dsc.round_start = 1; + line_draw_dsc.p1_x = 150; + line_draw_dsc.p1_y = 30; + line_draw_dsc.p2_x = 350; + line_draw_dsc.p2_y = 55; + lv_draw_line(&layer, &line_draw_dsc); + + lv_canvas_finish_layer(canvas, &layer); + + lv_color_t c = lv_color_hex(0xff0000); + uint32_t i; + for(i = 0; i < 50; i++) { + lv_canvas_set_px(canvas, 100 + i * 2, 10, c, LV_OPA_COVER); + } +} + + +#endif diff --git a/tests/src/test_cases/widgets/test_dropdown.c b/tests/src/test_cases/widgets/test_dropdown.c index 427d0c2556..bfb0c3333c 100644 --- a/tests/src/test_cases/widgets/test_dropdown.c +++ b/tests/src/test_cases/widgets/test_dropdown.c @@ -360,7 +360,6 @@ void test_dropdown_render_1(void) lv_obj_set_style_bg_color(list, lv_color_hex3(0xf00), LV_PART_SELECTED | LV_STATE_CHECKED); lv_dropdown_set_selected(dd3, 3); - TEST_ASSERT_EQUAL_SCREENSHOT("widgets/dropdown_1.png"); }