diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index eb40232e2..f97ea0407 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -14,4 +14,5 @@ jobs: steps: - uses: actions/checkout@v2 - name: Run tests + run: apt-get install libpng-dev run: cd tests; python ./build.py diff --git a/lvgl.h b/lvgl.h index 0cc2f8fae..fb18d9ff2 100644 --- a/lvgl.h +++ b/lvgl.h @@ -82,6 +82,8 @@ extern "C" { #include "src/lv_api_map.h" +//#define LV_BUILD_TEST 1 + /********************* * DEFINES *********************/ diff --git a/src/lv_widgets/lv_img.c b/src/lv_widgets/lv_img.c index 911db34ea..dc95c4985 100644 --- a/src/lv_widgets/lv_img.c +++ b/src/lv_widgets/lv_img.c @@ -580,6 +580,9 @@ static lv_design_res_t lv_img_design(lv_obj_t * img, const lv_area_t * clip_area /*Non true color format might have "holes"*/ if(ext->cf != LV_IMG_CF_TRUE_COLOR && ext->cf != LV_IMG_CF_RAW) return LV_DESIGN_RES_NOT_COVER; + /*With not LV_OPA_COVER images acn't cover an area */ + if(lv_obj_get_style_image_opa(img, LV_IMG_PART_MAIN) != LV_OPA_COVER) return LV_DESIGN_RES_NOT_COVER; + int32_t angle_final = lv_obj_get_style_transform_angle(img, LV_IMG_PART_MAIN); angle_final += ext->angle; @@ -602,8 +605,6 @@ static lv_design_res_t lv_img_design(lv_obj_t * img, const lv_area_t * clip_area if(_lv_area_is_in(clip_area, &a, 0) == false) return LV_DESIGN_RES_NOT_COVER; } - if(lv_obj_get_style_image_opa(img, LV_IMG_PART_MAIN) != LV_OPA_COVER) return LV_DESIGN_RES_NOT_COVER; - return LV_DESIGN_RES_COVER; } else if(mode == LV_DESIGN_DRAW_MAIN) { diff --git a/tests/Makefile b/tests/Makefile index 429862de6..70a44c1a6 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -31,6 +31,7 @@ CSRCS += lv_test_core/lv_test_core.c CSRCS += lv_test_core/lv_test_obj.c CSRCS += lv_test_core/lv_test_style.c CSRCS += lv_test_core/lv_test_font_loader.c +CSRCS += lv_test_widgets/lv_test_label.c CSRCS += lv_test_fonts/font_1.c CSRCS += lv_test_fonts/font_2.c CSRCS += lv_test_fonts/font_3.c diff --git a/tests/build.py b/tests/build.py index 73a06148f..96e5bb2b8 100755 --- a/tests/build.py +++ b/tests/build.py @@ -291,8 +291,8 @@ advanced_features = { "LV_MEM_CUSTOM":1, "LV_HOR_RES_MAX":800, "LV_VER_RES_MAX":480, - "LV_COLOR_DEPTH":16, - "LV_COLOR_16_SWAP":1, + "LV_COLOR_DEPTH":32, + "LV_COLOR_16_SWAP":0, "LV_COLOR_SCREEN_TRANSP":1, "LV_USE_GROUP":1, "LV_USE_ANIMATION":1, @@ -302,9 +302,6 @@ advanced_features = { "LV_USE_IMG_TRANSFORM":1, "LV_USE_API_EXTENSION_V6":1, "LV_USE_USER_DATA":1, - "LV_USE_USER_DATA_FREE":1, - "LV_USER_DATA_FREE_INCLUDE":"\\\"\\\"", - "LV_USER_DATA_FREE": "\\\"free\\\"", "LV_IMG_CACHE_DEF_SIZE":32, "LV_USE_LOG":1, "LV_USE_THEME_MATERIAL":1, @@ -378,7 +375,8 @@ advanced_features = { build("Minimal monochrome", minimal_monochrome) build("All objects, minimal features", all_obj_minimal_features) -build("All objects, all features", all_obj_all_features) +build("All objects, all common features", all_obj_all_features) +build("All objects, with advanced features", advanced_features) diff --git a/tests/lv_test_assert.c b/tests/lv_test_assert.c index c4edc0d37..ce0d7a5ff 100644 --- a/tests/lv_test_assert.c +++ b/tests/lv_test_assert.c @@ -28,7 +28,8 @@ /********************* * DEFINES *********************/ -#define REF_IMGS_PATH "lvgl/tests/lv_test_ref_imgs/" +//#define REF_IMGS_PATH "lvgl/tests/lv_test_ref_imgs/" +#define REF_IMGS_PATH "lv_test_ref_imgs/" /********************** * TYPEDEFS @@ -177,6 +178,16 @@ void lv_test_assert_color_eq(lv_color_t c_ref, lv_color_t c_act, const char * s) void lv_test_assert_img_eq(const char * fn_ref, const char * s) { +#if LV_COLOR_DEPTH != 32 + lv_test_print(" SKIP: Can't compare '%s' because LV_COLOR_DEPTH != 32", fn_ref); + return; +#endif + +#if LV_HOR_RES_MAX != 800 || LV_VER_RES_MAX != 480 + lv_test_print(" SKIP: Can't compare '%s' because the resolution needs to be 800x480 (LV_HOR_RES_MAX, LV_VER_RES_MAX)", fn_ref); + return; +#endif + char fn_ref_full[512]; sprintf(fn_ref_full, "%s%s", REF_IMGS_PATH, fn_ref); @@ -185,16 +196,23 @@ void lv_test_assert_img_eq(const char * fn_ref, const char * s) uint8_t * screen_buf; lv_disp_t * disp = lv_disp_get_default(); + lv_obj_invalidate(lv_disp_get_scr_act(disp)); lv_refr_now(disp); - screen_buf = disp->driver.buffer->buf1; + + extern lv_color_t test_fb[]; + + screen_buf = (uint8_t *)test_fb; + + uint8_t * ptr_act = NULL; + const png_byte* ptr_ref = NULL; bool err = false; int x, y, i_buf = 0; for (y=0; yrow_pointers[y]); free(p->row_pointers); } -// + //static void process_file(png_img_t * p) //{ // if (png_get_color_type(p->png_ptr, p->info_ptr) == PNG_COLOR_TYPE_RGB) diff --git a/tests/lv_test_core/lv_test_font_loader.c b/tests/lv_test_core/lv_test_font_loader.c index ea0fc2753..3b3f6321a 100644 --- a/tests/lv_test_core/lv_test_font_loader.c +++ b/tests/lv_test_core/lv_test_font_loader.c @@ -7,12 +7,12 @@ * INCLUDES *********************/ -#include "../lv_test_assert.h" +#include "lvgl/lvgl.h" #if LV_BUILD_TEST -#include "../lvgl.h" -#include "../src/lv_font/lv_font_fmt_txt.h" -#include "../src/lv_font/lv_font.h" -#include "../src/lv_font/lv_font_loader.h" +#include "../lv_test_assert.h" +#include "lvgl/src/lv_font/lv_font_fmt_txt.h" +#include "lvgl/src/lv_font/lv_font.h" +#include "lvgl/src/lv_font/lv_font_loader.h" #include "lv_test_font_loader.h" @@ -28,7 +28,7 @@ * STATIC PROTOTYPES **********************/ -#if LV_USE_FILESYSTEM +#if LV_USE_FILESYSTEM && LV_FONT_FMT_TXT_LARGE == 0 static int compare_fonts(lv_font_t * f1, lv_font_t * f2); #endif @@ -50,7 +50,7 @@ extern lv_font_t font_3; void lv_test_font_loader(void) { -#if LV_USE_FILESYSTEM +#if LV_USE_FILESYSTEM && LV_FONT_FMT_TXT_LARGE == 0 lv_font_t * font_1_bin = lv_font_load("f:font_1.fnt"); lv_font_t * font_2_bin = lv_font_load("f:font_2.fnt"); lv_font_t * font_3_bin = lv_font_load("f:font_3.fnt"); @@ -62,10 +62,12 @@ void lv_test_font_loader(void) lv_font_free(font_1_bin); lv_font_free(font_2_bin); lv_font_free(font_3_bin); +#else + lv_test_print("SKIP: font load test because it requires LV_USE_FILESYSTEM 1 and LV_FONT_FMT_TXT_LARGE 0"); #endif } -#if LV_USE_FILESYSTEM +#if LV_USE_FILESYSTEM && LV_FONT_FMT_TXT_LARGE == 0 static int compare_fonts(lv_font_t * f1, lv_font_t * f2) { lv_test_assert_true(f1 != NULL && f2 != NULL, "font not null"); diff --git a/tests/lv_test_main.c b/tests/lv_test_main.c index 13d8f14eb..f1fd224cc 100644 --- a/tests/lv_test_main.c +++ b/tests/lv_test_main.c @@ -3,12 +3,15 @@ #include #include #include "lv_test_core/lv_test_core.h" +#include "lv_test_widgets/lv_test_label.h" #if LV_BUILD_TEST static void hal_init(void); static void dummy_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p); +lv_color_t test_fb[LV_HOR_RES_MAX * LV_VER_RES_MAX]; + int main(void) { printf("Call lv_init...\n"); @@ -17,6 +20,7 @@ int main(void) hal_init(); lv_test_core(); + lv_test_label(); printf("Exit with success!\n"); return 0; @@ -85,7 +89,7 @@ static void hal_init(void) static lv_disp_buf_t disp_buf; lv_color_t * disp_buf1 = (lv_color_t *)malloc(LV_HOR_RES * LV_VER_RES * sizeof(lv_color_t)); - lv_disp_buf_init(&disp_buf, disp_buf1, NULL, LV_HOR_RES* LV_VER_RES); + lv_disp_buf_init(&disp_buf, disp_buf1, NULL, LV_HOR_RES * LV_VER_RES); lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); @@ -109,11 +113,15 @@ static void hal_init(void) lv_fs_drv_register(&drv); /*Finally register the drive*/ #endif } +#include static void dummy_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { LV_UNUSED(area); LV_UNUSED(color_p); + + memcpy(test_fb, color_p, lv_area_get_size(area) * sizeof(lv_color_t)); + lv_disp_flush_ready(disp_drv); } diff --git a/tests/lv_test_objx/lv_test_cont.c b/tests/lv_test_objx/lv_test_cont.c deleted file mode 100644 index 5afc75a67..000000000 --- a/tests/lv_test_objx/lv_test_cont.c +++ /dev/null @@ -1,80 +0,0 @@ -/** - * @file lv_test_cont.c - * - */ - -/********************* - * INCLUDES - *********************/ -#include "../../lvgl.h" -#include "../lv_test_assert.h" - -#if LV_BUILD_TEST - - -/********************* - * DEFINES - *********************/ - -/********************** - * TYPEDEFS - **********************/ - -/********************** - * STATIC PROTOTYPES - **********************/ -static void create_copy(void); - -/********************** - * STATIC VARIABLES - **********************/ - -/********************** - * MACROS - **********************/ - -/********************** - * GLOBAL FUNCTIONS - **********************/ - -void lv_test_cont(void) -{ - lv_test_print(""); - lv_test_print("==================="); - lv_test_print("Start lv_cont tests"); - lv_test_print("==================="); - - create_copy(); -} - - -/********************** - * STATIC FUNCTIONS - **********************/ - -static void create_copy(void) -{ - lv_test_print(""); - lv_test_print("Create and copy a container"); - lv_test_print("---------------------------"); - - lv_test_print("Create a container"); - lv_test_assert_int_eq(0, lv_obj_count_children(lv_scr_act()), "Screen's children count before creation"); - - lv_obj_t * obj = lv_cont_create(lv_scr_act(), NULL); - lv_test_assert_int_eq(1, lv_obj_count_children(lv_scr_act()), "Screen's children count after creation"); - - lv_test_print("Test the default values"); - lv_test_assert_int_eq(LV_FIT_NONE, lv_cont_get_fit_left(obj), "Default left fit"); - lv_test_assert_int_eq(LV_FIT_NONE, lv_cont_get_fit_right(obj), "Default right fit"); - lv_test_assert_int_eq(LV_FIT_NONE, lv_cont_get_fit_top(obj), "Default top fit"); - lv_test_assert_int_eq(LV_FIT_NONE, lv_cont_get_fit_bottom(obj), "Default bottom fit"); - lv_test_assert_int_eq(LV_LAYOUT_OFF, lv_cont_get_layout(obj), "Default layout"); - - lv_test_print("Delete the container"); - lv_obj_del(obj); - obj = NULL; - lv_test_assert_int_eq(0, lv_obj_count_children(lv_scr_act()), "Screen's children count after delete"); - -} -#endif diff --git a/tests/lv_test_ref_imgs/lv_test_img32_label_1.png b/tests/lv_test_ref_imgs/lv_test_img32_label_1.png new file mode 100644 index 000000000..29c84d082 Binary files /dev/null and b/tests/lv_test_ref_imgs/lv_test_img32_label_1.png differ diff --git a/tests/lv_test_ref_imgs/lv_test_obj_1_1.png b/tests/lv_test_ref_imgs/lv_test_obj_1_1.png deleted file mode 100644 index 40f187369..000000000 Binary files a/tests/lv_test_ref_imgs/lv_test_obj_1_1.png and /dev/null differ diff --git a/tests/lv_test_widgets/lv_test_label.c b/tests/lv_test_widgets/lv_test_label.c new file mode 100644 index 000000000..3d0435a2e --- /dev/null +++ b/tests/lv_test_widgets/lv_test_label.c @@ -0,0 +1,70 @@ +/** + * @file lv_test_label.c + * + */ + +/********************* + * INCLUDES + *********************/ +#include "../../lvgl.h" +#include "../lv_test_assert.h" +#include "lv_test_label.h" + +#if LV_BUILD_TEST + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +static void create_copy(void); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void lv_test_label(void) +{ + lv_test_print(""); + lv_test_print("==================="); + lv_test_print("Start lv_label tests"); + lv_test_print("==================="); + +#if LV_USE_LABEL + create_copy(); +#else + lv_test_print("Skip label test: LV_USE_LABEL == 0"); +#endif +} + + +/********************** + * STATIC FUNCTIONS + **********************/ + +static void create_copy(void) +{ + lv_test_print(""); + lv_test_print("Create a label"); + lv_test_print("---------------------------"); + + lv_label_create(lv_scr_act(), NULL); +#if LV_COLOR_DEPTH == 32 + lv_test_assert_img_eq("lv_test_img32_label_1.png", "Create a label and leave the default settings"); +#endif +} +#endif diff --git a/tests/lv_test_objx/lv_test_cont.h b/tests/lv_test_widgets/lv_test_label.h similarity index 82% rename from tests/lv_test_objx/lv_test_cont.h rename to tests/lv_test_widgets/lv_test_label.h index 08bbd8b59..36aac4e5e 100644 --- a/tests/lv_test_objx/lv_test_cont.h +++ b/tests/lv_test_widgets/lv_test_label.h @@ -1,10 +1,10 @@ /** - * @file lv_test_obj.h + * @file lv_test_label.h * */ -#ifndef LV_TEST_CONT_H -#define LV_TEST_CONT_H +#ifndef LV_TEST_LABEL_H +#define LV_TEST_LABEL_H #ifdef __cplusplus extern "C" { @@ -25,7 +25,7 @@ extern "C" { /********************** * GLOBAL PROTOTYPES **********************/ -void lv_test_cont(void); +void lv_test_label(void); /********************** * MACROS