Skip to content


Browse files Browse the repository at this point in the history
tests add README
  • Loading branch information
kisvegabor committed Jun 23, 2021
1 parent 3672f87 commit b765643
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 6 deletions.
58 changes: 58 additions & 0 deletions tests/
@@ -0,0 +1,58 @@
# Tests for LVGL

The tests in the folder can be run locally and automatically by GitHub CI.

## Running locally

### Requirements (Linux)
1. Be sure GCC and Python3 is installed.
2. Install [gcovr]( with `pip install gcovr`
3. Install Ruby with `sudo apt-get install ruby-full`

### Run test
1. Enter `lvgl/tests/`
2. Run the tests with `./ [OPTIONS]`. The options are
- `report` Create a html page in the `report` folder with the coverage report.
- `test` Build and run only test. Without this option LVGL will be built with various configurations.
- `noclean` Do not clean the project before building. Useful while writing test to save some times.

For example:
- `./` Run all the test as they run in the CI.
- `./ report test noclean` Run only the test, should be sued when writing tests.

## Running automatically

GitHub's CI automatically runs these tests on pushes and pull requests to `master` and `releasev8.*` branches.

## Directory structure
- `src` Source files of the tests
- `test_cases` The written tests,
- `test_runners` Generated automatically from the files in `test_cases`.
- other miscellaneous files and folders
- `ref_imgs` - Reference images for screenshot compare
- `report` - Coverage report. Generated if the `report` flag was passed to `./`
- `unity` Source files of the test engine

## Add new tests

### Create new test file
New test needs to be added into the `src/test_cases` folder. The name of the files should look like `test_<name>.c`. The the basic skeleton of a test file copy `_test_template.c`.

### Asserts
See the list of asserts [here](

There are some custom, LVGL specific asserts:
- `TEST_ASSERT_EQUAL_SCREENSHOT("image1.png")` Render the active screen and compare its content with an image in the `ref_imgs` folder.
If the compare fails `lvgl/test_screenshot_error.h` is created with the content of the frame buffer as an image.
To see the that image `#include "test_screenshot_error.h"` and call `test_screenshot_error_show();`.
- `TEST_ASSERT_EQUAL_COLOR(color1, color2)` Compare two colors.

### Adding new reference images
The reference images can be taken by copy-pasting the test code in to LVGL simulator and saving the screen.
LVGL needs to
- 800x480 resolution
- 32 bit color depth
- use the default theme, with the default color (don't set a theme manually)
12 changes: 6 additions & 6 deletions tests/unity/unity_support.c
Expand Up @@ -117,9 +117,9 @@ bool lv_test_assert_img_eq(const char * fn_ref)
memcpy(&act_px, ptr_act, 3);
TEST_PRINTF("Diff in %s at (%d;%d), %x instead of %x)", fn_ref, x, y, act_px, ref_px);

FILE * f = fopen("../image_err.h", "w");
FILE * f = fopen("../test_screenshot_error.h", "w");

fprintf(f, "static const uint32_t img_data[] = {\n");
fprintf(f, "static const uint32_t test_screenshot_error_data[] = {\n");

i_buf = 0;
for (y = 0; y < 480; y++) {
Expand All @@ -134,17 +134,17 @@ bool lv_test_assert_img_eq(const char * fn_ref)
fprintf(f, "};\n\n");

fprintf(f, "static lv_img_dsc_t dsc = { \n"
fprintf(f, "static lv_img_dsc_t test_screenshot_error_dsc = { \n"
" .header.w = 800,\n"
" .header.h = 480,\n"
" .header.always_zero = 0,\n"
" .data_size = 800 * 480 * 4,\n"
" .data = img_data};\n\n"
"static inline void show_test_img_error(void)\n"
" .data = test_screenshot_error_data};\n\n"
"static inline void test_screenshot_error_show(void)\n"
" lv_obj_t * img = lv_img_create(lv_scr_act());\n"
" lv_img_set_src(img, &dsc);\n"
" lv_img_set_src(img, &test_screenshot_error_dsc);\n"

Expand Down

0 comments on commit b765643

Please sign in to comment.