lvgl/tests
Chris Mumford 53986b4b0e
test Refactor unit test scripts. (#2473)
* Refactor unit test scripts.

Does the following:

1. Remove as many dependencies on the operating system shell as possible.
   For example, use of shutil.rmtree(...) instead of os.system('rm -r ...').
   This brings this script a bit closer to being able to run on Windows.
2. Switch from os.system() to subprocess.check_call().
   * This is a bit more secure as check_call() directly invokes the subprocess
     without evaluation the arguments on a command-line.
   * Removes the need to evaluate the return code as check_call() does this.
   * Can directly set environment variables (e.g. env=cmd_env) instead of
     including with subprocess invocation (e.g. BIN=test.bin).
3. Minor cleanup to main.py sys.argv parsing.
4. PEP8 formatting.

* Ignore FileNotFoundError for rmtree('report').

* Back to os.system for gcovr.

* Removed unused shutil import.
2021-08-25 15:37:59 +02:00
..
ref_imgs feat(obj) place the scrollbar to the left with RTL base dir. 2021-08-19 12:51:29 +02:00
src perf(draw) reimplement rectangle drawing algorithms 2021-08-02 15:45:14 +02:00
unity tests add README 2021-06-23 15:51:12 +02:00
.gitignore test cleant up report folder 2021-06-18 14:15:53 +02:00
build.py test Refactor unit test scripts. (#2473) 2021-08-25 15:37:59 +02:00
config.yml feat(test) first experiement with Unity test engine 2021-06-18 14:13:41 +02:00
defines.py test Refactor unit test scripts. (#2473) 2021-08-25 15:37:59 +02:00
main.py test Refactor unit test scripts. (#2473) 2021-08-25 15:37:59 +02:00
Makefile Revert "fix(tests) remove src/test_runners when cleaning" 2021-08-03 10:25:20 -04:00
README.md tests add README 2021-06-23 15:51:12 +02:00
test.py test fix CI build error 2021-06-23 23:04:12 +02:00

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 ./main.py [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:

  • ./main.py Run all the test as they run in the CI.
  • ./main.py report test noclean Run only the test, should be sued when writing tests.

Running automatically

TODO

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 ./main.py
  • 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
  • LV_USE_PERF_MONITOR and LV_USE_MEM_MONITOR disabled
  • use the default theme, with the default color (don't set a theme manually)