hunting/external/lvglBoard/lvgl/tests/src/test_cases/test_line.c
2024-02-05 11:05:49 -08:00

96 lines
3.0 KiB
C

#if LV_BUILD_TEST
#include "../lvgl.h"
#include "unity/unity.h"
static lv_obj_t * active_screen = NULL;
static lv_obj_t * line = NULL;
static const uint16_t default_point_num = 0U;
static const lv_coord_t initial_extra_draw_size = 5U;
static const lv_coord_t final_extra_draw_size = 10U;
void setUp(void)
{
active_screen = lv_scr_act();
line = lv_line_create(active_screen);
}
void tearDown(void)
{
lv_obj_clean(active_screen);
}
void test_line_should_have_valid_documented_default_values(void)
{
lv_line_t * line_ptr = (lv_line_t *) line;
TEST_ASSERT_EQUAL_UINT16(default_point_num, line_ptr->point_num);
TEST_ASSERT_NULL(line_ptr->point_array);
TEST_ASSERT_FALSE(lv_line_get_y_invert(line));
TEST_ASSERT_FALSE(lv_obj_has_flag(line, LV_OBJ_FLAG_CLICKABLE));
/* line doesn't have any points, so it's 0,0 in size */
TEST_ASSERT_EQUAL_UINT16(0U, lv_obj_get_self_width(line));
TEST_ASSERT_EQUAL_UINT16(0U, lv_obj_get_self_height(line));
}
void test_line_should_return_valid_y_invert(void)
{
lv_line_set_y_invert(line, true);
TEST_ASSERT_TRUE(lv_line_get_y_invert(line));
}
void test_line_size_should_be_updated_after_adding_points(void)
{
static lv_point_t points[] = { {5, 5} };
uint16_t point_cnt = (uint16_t) sizeof(points) / sizeof(lv_point_t);
lv_line_set_points(line, points, point_cnt);
lv_coord_t calculated_width = 0;
lv_coord_t calculated_height = 0;
/* Get the biggest coordinate on both axis */
uint16_t point_idx = 0;
for(point_idx = 0; point_idx < point_cnt; point_idx++) {
calculated_width = LV_MAX(points[point_idx].x, calculated_width);
calculated_height = LV_MAX(points[point_idx].y, calculated_height);
}
/* Add style line width */
lv_coord_t line_width = lv_obj_get_style_line_width(line, LV_PART_MAIN);
calculated_width += line_width;
calculated_height += line_width;
TEST_ASSERT_EQUAL_UINT16(calculated_width, lv_obj_get_self_width(line));
TEST_ASSERT_EQUAL_UINT16(calculated_height, lv_obj_get_self_height(line));
}
static void line_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_REFR_EXT_DRAW_SIZE) {
/* Set the new line extra draw size */
lv_event_set_ext_draw_size(e, initial_extra_draw_size);
}
}
void test_line_should_update_extra_draw_size_based_on_style(void)
{
/* Setup an event handler for line extra draw size event */
lv_obj_add_event_cb(line, line_event_cb, LV_EVENT_ALL, NULL);
/* Trigger the extra draw size event */
lv_obj_refresh_ext_draw_size(line);
TEST_ASSERT_EQUAL(initial_extra_draw_size, _lv_obj_get_ext_draw_size(line));
/* Update line width style, the event handler should set the extra draw size
* to the line width */
lv_obj_set_style_line_width(line, final_extra_draw_size, LV_PART_MAIN);
/* Trigger the extra draw size event */
lv_obj_refresh_ext_draw_size(line);
TEST_ASSERT_EQUAL(final_extra_draw_size, _lv_obj_get_ext_draw_size(line));
}
#endif