#if LV_BUILD_TEST
#include "../lvgl.h"
#include "unity/unity.h"
void setUp(void)
{
/* Function run before every test */
}
void tearDown(void)
{
/* Function run after every test */
lv_obj_clean(lv_screen_active());
}
void test_xml_widget_direct_create(void)
{
lv_obj_set_style_pad_all(lv_screen_active(), 16, 0);
lv_obj_t * slider;
/*Simple create*/
slider = lv_xml_create(lv_screen_active(), "lv_slider", NULL);
/*Adjust the returned widget*/
slider = lv_xml_create(lv_screen_active(), "lv_slider", NULL);
lv_obj_set_pos(slider, 10, 100);
lv_slider_set_value(slider, 40, LV_ANIM_OFF);
/*Use attributes*/
const char * attrs[] = {
"range_min", "-100",
"range_max", "100",
"mode", "symmetrical",
"value", "50",
NULL, NULL,
};
slider = lv_xml_create(lv_screen_active(), "lv_slider", attrs);
lv_obj_set_pos(slider, 10, 200);
TEST_ASSERT_EQUAL_SCREENSHOT("xml/widget_create_1.png");
}
void test_xml_widget_create_from_component(void)
{
lv_obj_set_style_pad_all(lv_screen_active(), 16, 0);
const char * red_slider_xml =
""
""
""
"";
lv_xml_component_register_from_data("red_slider", red_slider_xml);
lv_obj_t * slider;
/*Simple create*/
slider = lv_xml_create(lv_screen_active(), "red_slider", NULL);
/*Adjust the returned widget*/
slider = lv_xml_create(lv_screen_active(), "red_slider", NULL);
lv_obj_set_pos(slider, 10, 100);
lv_slider_set_value(slider, 40, LV_ANIM_OFF);
/*Use attributes*/
const char * attrs[] = {
"range_min", "-100",
"range_max", "100",
"mode", "symmetrical",
"value", "50",
NULL, NULL,
};
slider = lv_xml_create(lv_screen_active(), "red_slider", attrs);
lv_obj_set_pos(slider, 10, 200);
TEST_ASSERT_EQUAL_SCREENSHOT("xml/component_create_1.png");
}
void test_xml_nesting(void)
{
const char * red_button_xml =
""
""
""
"";
const char * card_xml =
""
""
""
""
""
""
""
"";
lv_xml_component_register_from_data("red_button", red_button_xml);
lv_xml_component_register_from_data("card", card_xml);
lv_obj_t * card;
card = lv_xml_create(lv_screen_active(), "card", NULL);
card = lv_xml_create(lv_screen_active(), "card", NULL);
lv_obj_set_y(card, 80);
/*Use attributes*/
const char * attrs[] = {
"y", "160",
NULL, NULL,
};
card = lv_xml_create(lv_screen_active(), "card", attrs);
TEST_ASSERT_EQUAL_SCREENSHOT("xml/nested_1.png");
}
/*Pass style and simple properties 3 level deep*/
void test_xml_component_params(void)
{
const char * h3_xml =
""
""
""
""
""
""
"";
const char * red_button_xml =
""
""
""
""
""
""
""
"
"
"";
const char * card_xml =
""
""
""
""
""
""
""
""
""
"
"
"";
lv_xml_component_register_from_data("h3", h3_xml);
lv_xml_component_register_from_data("red_button", red_button_xml);
lv_xml_component_register_from_data("card", card_xml);
lv_xml_create(lv_screen_active(), "card", NULL);
/*Use attributes*/
const char * attrs[] = {
"y", "100",
"action", "Ext. text",
NULL, NULL,
};
lv_xml_create(lv_screen_active(), "card", attrs);
TEST_ASSERT_EQUAL_SCREENSHOT("xml/params_1.png");
}
void test_xml_component_consts(void)
{
const char * h3_xml =
""
""
""
""
""
""
""
""
""
""
""
"";
lv_xml_component_register_from_data("h3", h3_xml);
lv_xml_create(lv_screen_active(), "h3", NULL);
TEST_ASSERT_EQUAL_SCREENSHOT("xml/consts_1.png");
}
void test_xml_component_styles(void)
{
const char * my_btn_xml =
""
""
""
""
""
""
"";
lv_xml_component_register_from_data("my_btn", my_btn_xml);
lv_xml_create(lv_screen_active(), "my_btn", NULL);
lv_obj_t * btn = lv_xml_create(lv_screen_active(), "my_btn", NULL);
lv_obj_set_pos(btn, 0, 100);
lv_obj_add_state(btn, LV_STATE_CHECKED);
lv_test_wait(300); /*Wait for the state transition animation*/
TEST_ASSERT_EQUAL_SCREENSHOT("xml/styles_1.png");
}
void test_xml_error_resilience_syntax_ok(void)
{
const char * my_btn_xml =
""
""
""
""
""
""
""
""
""
""
""
""
""
"";
lv_xml_component_register_from_data("my_btn", my_btn_xml);
lv_obj_t * btn = lv_xml_create(lv_screen_active(), "my_btn", NULL);
if(btn) lv_obj_set_pos(btn, 0, 100);
}
void test_xml_image_and_font(void)
{
const char * btn_xml =
""
""
""
""
""
""
""
""
""
""
"";
/*Monstserrat fonts are registered by LVGL */
LV_IMAGE_DECLARE(img_render_lvgl_logo_l8);
LV_IMAGE_DECLARE(img_render_lvgl_logo_rgb565);
lv_xml_register_image("test_img1", &img_render_lvgl_logo_l8);
lv_xml_register_image("test_img2", &img_render_lvgl_logo_rgb565);
lv_xml_component_register_from_data("btn", btn_xml);
lv_obj_t * btn;
btn = lv_xml_create(lv_screen_active(), "btn", NULL);
btn = lv_xml_create(lv_screen_active(), "btn", NULL);
lv_obj_set_pos(btn, 0, 100);
lv_obj_add_state(btn, LV_STATE_CHECKED);
TEST_ASSERT_EQUAL_SCREENSHOT("xml/image_and_font_1.png");
}
void test_xml_error_resilience_not_closed_tag(void)
{
const char * my_btn_xml =
""
""
""
"";
lv_xml_component_register_from_data("my_btn", my_btn_xml);
lv_obj_t * btn = lv_xml_create(lv_screen_active(), "my_btn", NULL);
if(btn) lv_obj_set_pos(btn, 0, 100);
}
void test_xml_error_resilience_string(void)
{
const char * my_btn_xml =
""
""
""
"";
lv_xml_component_register_from_data("my_btn", my_btn_xml);
lv_obj_t * btn = lv_xml_create(lv_screen_active(), "my_btn", NULL);
if(btn) lv_obj_set_pos(btn, 0, 100);
}
void test_xml_complex(void)
{
lv_xml_component_register_from_file("A:src/test_assets/xml/my_h3.xml");
lv_xml_component_register_from_file("A:src/test_assets/xml/my_card.xml");
lv_xml_component_register_from_file("A:src/test_assets/xml/my_button.xml");
lv_xml_component_register_from_file("A:src/test_assets/xml/view.xml");
lv_obj_t * obj = lv_xml_create(lv_screen_active(), "view", NULL);
lv_obj_set_pos(obj, 10, 10);
const char * my_button_attrs[] = {
"x", "10",
"y", "-10",
"align", "bottom_left",
"btn_text", "New button",
NULL, NULL,
};
lv_xml_create(lv_screen_active(), "my_button", my_button_attrs);
const char * slider_attrs[] = {
"x", "200",
"y", "-15",
"align", "bottom_left",
"value", "30",
NULL, NULL,
};
lv_obj_t * slider = lv_xml_create(lv_screen_active(), "lv_slider", slider_attrs);
lv_obj_set_width(slider, 100);
TEST_ASSERT_EQUAL_SCREENSHOT("xml/complex_1.png");
}
#endif