From 513d6314451ce82f08bbb877a4206096e9ddc500 Mon Sep 17 00:00:00 2001 From: Mahesh Murty <46624548+mmurty@users.noreply.github.com> Date: Fri, 9 Sep 2022 15:01:15 +0530 Subject: [PATCH] test(btn, btnmatrix): add unit tests (#3642) --- tests/ref_imgs/btnm_1.png | Bin 0 -> 9771 bytes tests/ref_imgs/btnm_2.png | Bin 0 -> 21661 bytes tests/src/test_cases/test_btn.c | 28 ++ tests/src/test_cases/test_btnmatrix.c | 463 ++++++++++++++++++++++++++ 4 files changed, 491 insertions(+) create mode 100644 tests/ref_imgs/btnm_1.png create mode 100644 tests/ref_imgs/btnm_2.png create mode 100644 tests/src/test_cases/test_btn.c create mode 100644 tests/src/test_cases/test_btnmatrix.c diff --git a/tests/ref_imgs/btnm_1.png b/tests/ref_imgs/btnm_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c96d5a810c4dcbade0552b7f1dccae284b6bcaed GIT binary patch literal 9771 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 D>rOJ# literal 0 HcmV?d00001 diff --git a/tests/ref_imgs/btnm_2.png b/tests/ref_imgs/btnm_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b99f63ec1389ea84aab86baacc998ebf72d790e2 GIT binary patch literal 21661 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 literal 0 HcmV?d00001 diff --git a/tests/src/test_cases/test_btn.c b/tests/src/test_cases/test_btn.c new file mode 100644 index 000000000..a8b4233c1 --- /dev/null +++ b/tests/src/test_cases/test_btn.c @@ -0,0 +1,28 @@ +#if LV_BUILD_TEST +#include "../lvgl.h" + +#include "unity/unity.h" + +static lv_obj_t * active_screen = NULL; + +void setUp(void) +{ + active_screen = lv_scr_act(); +} + +void tearDown(void) +{ + lv_obj_clean(active_screen); +} + +void test_btn_creation(void) +{ + lv_obj_t * btn; + btn = lv_btn_create(active_screen); + TEST_ASSERT_NOT_NULL(btn); + /* These flags are set in the object's constructor. */ + TEST_ASSERT_TRUE(lv_obj_has_flag(btn, LV_OBJ_FLAG_SCROLL_ON_FOCUS)); + TEST_ASSERT_FALSE(lv_obj_has_flag(btn, LV_OBJ_FLAG_SCROLLABLE)); +} + +#endif diff --git a/tests/src/test_cases/test_btnmatrix.c b/tests/src/test_cases/test_btnmatrix.c new file mode 100644 index 000000000..f0f8b85d6 --- /dev/null +++ b/tests/src/test_cases/test_btnmatrix.c @@ -0,0 +1,463 @@ +#if LV_BUILD_TEST +#include "../lvgl.h" +#include "lv_test_indev.h" +#include "unity/unity.h" + +static lv_obj_t * active_screen = NULL; +static lv_obj_t * btnm; +static bool event_triggered = false; +lv_event_code_t exp_evt_code; + +void setUp(void) +{ + active_screen = lv_scr_act(); + btnm = lv_btnmatrix_create(active_screen); + TEST_ASSERT_NOT_NULL(btnm); + event_triggered = false; + exp_evt_code = 0; +} + +void tearDown(void) +{ + lv_obj_clean(active_screen); +} + +void test_btn_matrix_creation(void) +{ + const char ** map; + + /* Verify the default map. */ + map = lv_btnmatrix_get_map(btnm); + TEST_ASSERT_EQUAL_STRING(map[0], "Btn1"); + TEST_ASSERT_EQUAL_STRING(map[1], "Btn2"); + TEST_ASSERT_EQUAL_STRING(map[2], "Btn3"); + TEST_ASSERT_EQUAL_STRING(map[3], "\n"); + TEST_ASSERT_EQUAL_STRING(map[4], "Btn4"); + TEST_ASSERT_EQUAL_STRING(map[5], "Btn5"); +} + +void test_btn_matrix_set_map_works(void) +{ + const char ** ret_map; + static const char * exp_map[] = {"A", "B", "\n", "C", "D", ""}; + + lv_btnmatrix_set_map(btnm, exp_map); + /* Verify if the map was set correctly. */ + ret_map = lv_btnmatrix_get_map(btnm); + TEST_ASSERT_EQUAL_STRING(exp_map[0], ret_map[0]); + TEST_ASSERT_EQUAL_STRING(exp_map[1], ret_map[1]); + TEST_ASSERT_EQUAL_STRING(exp_map[2], ret_map[2]); + TEST_ASSERT_EQUAL_STRING(exp_map[3], ret_map[3]); + TEST_ASSERT_EQUAL_STRING(exp_map[4], ret_map[4]); + TEST_ASSERT_EQUAL_STRING(exp_map[5], ret_map[5]); + + TEST_ASSERT_EQUAL_SCREENSHOT("btnm_1.png"); +} + +void test_btn_matrix_render_2(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKED); + lv_obj_set_pos(btnm, 10, 10); + + static const char * btn_map2[] = {"A", "\n", "B", "\n", "C", "\n", "D", ""}; + btnm = lv_btnmatrix_create(active_screen); + TEST_ASSERT_NOT_NULL(btnm); + lv_obj_set_width(btnm, 150); + lv_obj_set_height(btnm, 250); + lv_btnmatrix_set_map(btnm, btn_map2); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_one_checked(btnm, true); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); + lv_obj_set_pos(btnm, 10, 160); + + static const char * btn_map3[] = {"A", "B", "C", "\n", "D", "E", "F", ""}; + btnm = lv_btnmatrix_create(active_screen); + TEST_ASSERT_NOT_NULL(btnm); + lv_btnmatrix_set_map(btnm, btn_map3); + lv_obj_set_width(btnm, 400); + lv_btnmatrix_set_btn_width(btnm, 0, 3); + lv_btnmatrix_set_btn_width(btnm, 1, 2); + lv_btnmatrix_set_btn_width(btnm, 2, 1); + lv_btnmatrix_set_btn_width(btnm, 3, 1); + lv_btnmatrix_set_btn_width(btnm, 4, 2); + lv_btnmatrix_set_btn_width(btnm, 5, 3); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 4, LV_BTNMATRIX_CTRL_CHECKED); + lv_obj_set_pos(btnm, 300, 10); + + static const char * btn_map4[] = {"A", "B", "C", "D", "E", "F", "G", "\n", + "G", "F", "E", "D", "C", "B", "A", "" + }; + btnm = lv_btnmatrix_create(active_screen); + lv_btnmatrix_set_map(btnm, btn_map4); + lv_obj_set_width(btnm, 600); + lv_obj_set_height(btnm, 150); + lv_btnmatrix_set_btn_width(btnm, 0, 1); + lv_btnmatrix_set_btn_width(btnm, 1, 2); + lv_btnmatrix_set_btn_width(btnm, 2, 3); + lv_btnmatrix_set_btn_width(btnm, 3, 4); + lv_btnmatrix_set_btn_width(btnm, 4, 5); + lv_btnmatrix_set_btn_width(btnm, 5, 6); + lv_btnmatrix_set_btn_width(btnm, 6, 7); + + lv_btnmatrix_set_btn_width(btnm, 7, 7); + lv_btnmatrix_set_btn_width(btnm, 8, 6); + lv_btnmatrix_set_btn_width(btnm, 9, 5); + lv_btnmatrix_set_btn_width(btnm, 10, 4); + lv_btnmatrix_set_btn_width(btnm, 11, 3); + lv_btnmatrix_set_btn_width(btnm, 12, 2); + lv_btnmatrix_set_btn_width(btnm, 13, 1); + + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 5, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 7, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 9, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 11, LV_BTNMATRIX_CTRL_CHECKED); + lv_obj_set_pos(btnm, 180, 160); + + TEST_ASSERT_EQUAL_SCREENSHOT("btnm_2.png"); +} + +void test_btn_matrix_set_ctrl_map_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + lv_btnmatrix_ctrl_t ctrl_map[4]; + ctrl_map[0] = 1 | LV_BTNMATRIX_CTRL_DISABLED; + ctrl_map[1] = 1 | LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED; + ctrl_map[2] = 1 | LV_BTNMATRIX_CTRL_HIDDEN; + ctrl_map[3] = 1 | LV_BTNMATRIX_CTRL_CHECKABLE; + lv_btnmatrix_set_ctrl_map(btnm, ctrl_map); + + /* Verify if the ctrl map was set correctly. */ + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_DISABLED)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 1, + LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_HIDDEN)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE)); + + /* Also checking randomly that no other flags are set. */ + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_DISABLED)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKED)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 4, LV_BTNMATRIX_CTRL_HIDDEN)); +} + +void test_btn_matrix_set_btn_ctrl_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + /* Set btn control map using individual APIs. */ + lv_btnmatrix_set_btn_ctrl(btnm, 0, 1 | LV_BTNMATRIX_CTRL_DISABLED); + lv_btnmatrix_set_btn_ctrl(btnm, 1, 1 | LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 2, 1 | LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(btnm, 3, 1 | LV_BTNMATRIX_CTRL_CHECKABLE); + + /* Verify if the ctrl map was set correctly. */ + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_DISABLED)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 1, + LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_HIDDEN)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE)); + + /* Also checking randomly that no other flags are set. */ + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_DISABLED)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKED)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 4, LV_BTNMATRIX_CTRL_HIDDEN)); +} + +void test_btn_matrix_clear_btn_ctrl_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + /* Set btn control map using individual APIs. */ + lv_btnmatrix_set_btn_ctrl(btnm, 0, 1 | LV_BTNMATRIX_CTRL_DISABLED); + lv_btnmatrix_set_btn_ctrl(btnm, 1, 1 | LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 2, 1 | LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(btnm, 3, 1 | LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_clear_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_DISABLED); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_DISABLED)); + lv_btnmatrix_clear_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED)); + lv_btnmatrix_clear_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_HIDDEN); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_HIDDEN)); + lv_btnmatrix_clear_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE)); +} + +void test_btn_matrix_set_selected_btn_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + lv_btnmatrix_set_selected_btn(btnm, 2); + TEST_ASSERT_EQUAL_UINT16(2, lv_btnmatrix_get_selected_btn(btnm)); + + lv_btnmatrix_set_selected_btn(btnm, 0); + TEST_ASSERT_EQUAL_UINT16(0, lv_btnmatrix_get_selected_btn(btnm)); + + lv_btnmatrix_set_selected_btn(btnm, 3); + TEST_ASSERT_EQUAL_UINT16(3, lv_btnmatrix_get_selected_btn(btnm)); + + lv_btnmatrix_set_selected_btn(btnm, 1); + TEST_ASSERT_EQUAL_UINT16(1, lv_btnmatrix_get_selected_btn(btnm)); +} + +void test_btn_matrix_set_btn_ctrl_all_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_HIDDEN); + + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_HIDDEN)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_HIDDEN)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_HIDDEN)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_HIDDEN)); +} + +void test_btn_matrix_clear_btn_ctrl_all_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_clear_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_HIDDEN); + + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_HIDDEN)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_HIDDEN)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_HIDDEN)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_HIDDEN)); +} + +void test_btn_matrix_set_btn_width_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + lv_btnmatrix_set_btn_width(btnm, 1, 3); + lv_btnmatrix_set_btn_width(btnm, 2, 2); + + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 1, 3)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 2, 2)); +} + +void test_btn_matrix_set_one_checked_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_one_checked(btnm, true); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKED); + + TEST_ASSERT_TRUE(lv_btnmatrix_get_one_checked(btnm)); + + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKED)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED)); + TEST_ASSERT_FALSE(lv_btnmatrix_has_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED)); + TEST_ASSERT_TRUE(lv_btnmatrix_has_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKED)); +} + +void test_btn_matrix_get_btn_text_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + + const char * lv_btnmatrix_get_btn_text(const lv_obj_t * obj, uint16_t btn_id); + + TEST_ASSERT_EQUAL_STRING("A", lv_btnmatrix_get_btn_text(btnm, 0)); + TEST_ASSERT_EQUAL_STRING("B", lv_btnmatrix_get_btn_text(btnm, 1)); + TEST_ASSERT_EQUAL_STRING("C", lv_btnmatrix_get_btn_text(btnm, 2)); + TEST_ASSERT_EQUAL_STRING("D", lv_btnmatrix_get_btn_text(btnm, 3)); +} + +/* Common event handler for all the consecutive test cases. */ +static void event_handler(lv_event_t * e) +{ + lv_event_code_t code = lv_event_get_code(e); + if(code == exp_evt_code) { + event_triggered = true; + } +} + +void test_btn_matrix_pressed_event_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_PRESSED, NULL); + /* Set expected event code before the event is raised. */ + exp_evt_code = LV_EVENT_PRESSED; + /* Click button index 0. */ + lv_test_mouse_click_at(10, 10); + TEST_ASSERT_TRUE(event_triggered); +} + +void test_btn_matrix_release_event_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_RELEASED, NULL); + /* Set expected event code before the event is raised. */ + exp_evt_code = LV_EVENT_RELEASED; + + /* Click button index 0. */ + lv_test_mouse_click_at(65, 35); + TEST_ASSERT_TRUE(event_triggered); + event_triggered = false; + /* This will increase test coverage by unchecking the + same button. */ + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_POPOVER); + /* Click button index 0. */ + lv_test_mouse_click_at(65, 35); + TEST_ASSERT_TRUE(event_triggered); +} + +void test_btn_matrix_key_event_works(void) +{ + uint32_t keyCode; + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_obj_update_layout(btnm); /*The force calculating the button areas*/ + lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_KEY, NULL); + /* Set expected event code before the event is raised. */ + exp_evt_code = LV_EVENT_KEY; + + lv_btnmatrix_t * btnmObj = (lv_btnmatrix_t *)btnm; + /* Select the first button. */ + lv_btnmatrix_set_selected_btn(btnm, 0); + keyCode = LV_KEY_RIGHT; + lv_event_send(btnm, LV_EVENT_KEY, &keyCode); + TEST_ASSERT_TRUE(event_triggered); + uint16_t btnId = lv_btnmatrix_get_selected_btn(btnm); + TEST_ASSERT_EQUAL_INT(1, btnId); + + event_triggered = false; + keyCode = LV_KEY_LEFT; + lv_event_send(btnm, LV_EVENT_KEY, &keyCode); + TEST_ASSERT_TRUE(event_triggered); + btnId = lv_btnmatrix_get_selected_btn(btnm); + TEST_ASSERT_EQUAL_INT(0, btnId); + + event_triggered = false; + keyCode = LV_KEY_DOWN; + lv_event_send(btnm, LV_EVENT_KEY, &keyCode); + TEST_ASSERT_TRUE(event_triggered); + btnId = lv_btnmatrix_get_selected_btn(btnm); + TEST_ASSERT_EQUAL_INT(2, btnId); + + event_triggered = false; + keyCode = LV_KEY_UP; + lv_event_send(btnm, LV_EVENT_KEY, &keyCode); + TEST_ASSERT_TRUE(event_triggered); + btnId = lv_btnmatrix_get_selected_btn(btnm); + TEST_ASSERT_EQUAL_INT(0, btnId); + + /* Added this code to increase code coverage. */ + btnmObj->btn_id_sel = LV_BTNMATRIX_BTN_NONE; + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_HIDDEN); + keyCode = LV_KEY_DOWN; + lv_event_send(btnm, LV_EVENT_KEY, &keyCode); + TEST_ASSERT_TRUE(event_triggered); + event_triggered = false; +} + +void test_btn_matrix_pressing_event_works(void) +{ + lv_btnmatrix_t * btnmObj = (lv_btnmatrix_t *)btnm; + lv_indev_t dummyIndev = {0}; + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + lv_btnmatrix_set_map(btnm, btn_map); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_PRESSING, NULL); + /* Set expected event code before the event is raised. */ + exp_evt_code = LV_EVENT_PRESSING; + /* Select a button before raising a simulated event. + * This is done to increase code coverage. */ + btnmObj->btn_id_sel = 3; + /* Send a dummy lv_indev_t object as param to avoid crashing during build. */ + lv_event_send(btnm, LV_EVENT_PRESSING, &dummyIndev); + TEST_ASSERT_TRUE(event_triggered); +} + +void test_btn_matrix_long_press_repeat_event_works(void) +{ + lv_btnmatrix_t * btnmObj = (lv_btnmatrix_t *)btnm; + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + + lv_btnmatrix_set_map(btnm, btn_map); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_LONG_PRESSED_REPEAT, NULL); + /* Set expected event code before the event is raised. */ + exp_evt_code = LV_EVENT_LONG_PRESSED_REPEAT; + /* Select a button before raising a simulated event. + * This is done to increase code coverage. */ + btnmObj->btn_id_sel = 0; + lv_event_send(btnm, LV_EVENT_LONG_PRESSED_REPEAT, NULL); + TEST_ASSERT_TRUE(event_triggered); +} + +void test_btn_matrix_press_lost_event_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + + lv_btnmatrix_set_map(btnm, btn_map); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_PRESS_LOST, NULL); + /* Set expected event code before the event is raised. */ + exp_evt_code = LV_EVENT_PRESS_LOST; + lv_event_send(btnm, LV_EVENT_PRESS_LOST, NULL); + TEST_ASSERT_TRUE(event_triggered); +} + +void test_btn_matrix_defocused_event_works(void) +{ + lv_btnmatrix_t * btnmObj = (lv_btnmatrix_t *)btnm; + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + + lv_btnmatrix_set_map(btnm, btn_map); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_DEFOCUSED, NULL); + /* Set expected event code before the event is raised. */ + exp_evt_code = LV_EVENT_DEFOCUSED; + /* Select a button before raising a simulated event. + * This is done to increase code coverage. */ + btnmObj->btn_id_sel = 0; + lv_event_send(btnm, LV_EVENT_DEFOCUSED, NULL); + TEST_ASSERT_TRUE(event_triggered); +} + +void test_btn_matrix_focused_event_works(void) +{ + static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""}; + + lv_btnmatrix_set_map(btnm, btn_map); + lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_FOCUSED, NULL); + /* Set expected event code before the event is raised. */ + exp_evt_code = LV_EVENT_FOCUSED; + lv_event_send(btnm, LV_EVENT_FOCUSED, NULL); + TEST_ASSERT_TRUE(event_triggered); +} + + +#endif