1 #if LV_BUILD_TEST
2 #include "../lvgl.h"
3 #include "../../lvgl_private.h"
4 #include "lv_test_indev.h"
5 #include "unity/unity.h"
6
7 static lv_obj_t * active_screen = NULL;
8 static lv_obj_t * btnm;
9 static bool event_triggered = false;
10 lv_event_code_t exp_evt_code;
11
setUp(void)12 void setUp(void)
13 {
14 active_screen = lv_screen_active();
15 btnm = lv_buttonmatrix_create(active_screen);
16 TEST_ASSERT_NOT_NULL(btnm);
17 event_triggered = false;
18 exp_evt_code = 0;
19 }
20
tearDown(void)21 void tearDown(void)
22 {
23 lv_obj_clean(active_screen);
24 }
25
test_button_matrix_creation(void)26 void test_button_matrix_creation(void)
27 {
28 const char * const * map;
29
30 /* Verify the default map. */
31 map = lv_buttonmatrix_get_map(btnm);
32 TEST_ASSERT_EQUAL_STRING(map[0], "Btn1");
33 TEST_ASSERT_EQUAL_STRING(map[1], "Btn2");
34 TEST_ASSERT_EQUAL_STRING(map[2], "Btn3");
35 TEST_ASSERT_EQUAL_STRING(map[3], "\n");
36 TEST_ASSERT_EQUAL_STRING(map[4], "Btn4");
37 TEST_ASSERT_EQUAL_STRING(map[5], "Btn5");
38 }
39
test_button_matrix_set_map_works(void)40 void test_button_matrix_set_map_works(void)
41 {
42 const char * const * ret_map;
43 static const char * exp_map[] = {"A", "B", "\n", "C", "D", ""};
44
45 lv_buttonmatrix_set_map(btnm, exp_map);
46 /* Verify if the map was set correctly. */
47 ret_map = lv_buttonmatrix_get_map(btnm);
48 TEST_ASSERT_EQUAL_STRING(exp_map[0], ret_map[0]);
49 TEST_ASSERT_EQUAL_STRING(exp_map[1], ret_map[1]);
50 TEST_ASSERT_EQUAL_STRING(exp_map[2], ret_map[2]);
51 TEST_ASSERT_EQUAL_STRING(exp_map[3], ret_map[3]);
52 TEST_ASSERT_EQUAL_STRING(exp_map[4], ret_map[4]);
53 TEST_ASSERT_EQUAL_STRING(exp_map[5], ret_map[5]);
54
55 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/btnm_1.png");
56 }
57
test_button_matrix_render_2(void)58 void test_button_matrix_render_2(void)
59 {
60 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
61 lv_buttonmatrix_set_map(btnm, btn_map);
62 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
63 lv_buttonmatrix_set_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_CHECKED);
64 lv_buttonmatrix_set_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKED);
65 lv_obj_set_pos(btnm, 10, 10);
66
67 static const char * btn_map2[] = {"A", "\n", "B", "\n", "C", "\n", "D", ""};
68 btnm = lv_buttonmatrix_create(active_screen);
69 TEST_ASSERT_NOT_NULL(btnm);
70 lv_obj_set_width(btnm, 150);
71 lv_obj_set_height(btnm, 250);
72 lv_buttonmatrix_set_map(btnm, btn_map2);
73 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
74 lv_buttonmatrix_set_one_checked(btnm, true);
75 lv_buttonmatrix_set_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_CHECKED);
76 lv_buttonmatrix_set_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_CHECKED);
77 lv_obj_set_pos(btnm, 10, 160);
78
79 static const char * btn_map3[] = {"A", "B", "C", "\n", "D", "E", "F", ""};
80 btnm = lv_buttonmatrix_create(active_screen);
81 TEST_ASSERT_NOT_NULL(btnm);
82 lv_buttonmatrix_set_map(btnm, btn_map3);
83 lv_obj_set_width(btnm, 400);
84 lv_buttonmatrix_set_button_width(btnm, 0, 3);
85 lv_buttonmatrix_set_button_width(btnm, 1, 2);
86 lv_buttonmatrix_set_button_width(btnm, 2, 1);
87 lv_buttonmatrix_set_button_width(btnm, 3, 1);
88 lv_buttonmatrix_set_button_width(btnm, 4, 2);
89 lv_buttonmatrix_set_button_width(btnm, 5, 3);
90 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
91 lv_buttonmatrix_set_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_CHECKED);
92 lv_buttonmatrix_set_button_ctrl(btnm, 4, LV_BUTTONMATRIX_CTRL_CHECKED);
93 lv_obj_set_pos(btnm, 300, 10);
94
95 static const char * btn_map4[] = {"A", "B", "C", "D", "E", "F", "G", "\n",
96 "G", "F", "E", "D", "C", "B", "A", ""
97 };
98 btnm = lv_buttonmatrix_create(active_screen);
99 lv_buttonmatrix_set_map(btnm, btn_map4);
100 lv_obj_set_width(btnm, 600);
101 lv_obj_set_height(btnm, 150);
102 lv_buttonmatrix_set_button_width(btnm, 0, 1);
103 lv_buttonmatrix_set_button_width(btnm, 1, 2);
104 lv_buttonmatrix_set_button_width(btnm, 2, 3);
105 lv_buttonmatrix_set_button_width(btnm, 3, 4);
106 lv_buttonmatrix_set_button_width(btnm, 4, 5);
107 lv_buttonmatrix_set_button_width(btnm, 5, 6);
108 lv_buttonmatrix_set_button_width(btnm, 6, 7);
109
110 lv_buttonmatrix_set_button_width(btnm, 7, 7);
111 lv_buttonmatrix_set_button_width(btnm, 8, 6);
112 lv_buttonmatrix_set_button_width(btnm, 9, 5);
113 lv_buttonmatrix_set_button_width(btnm, 10, 4);
114 lv_buttonmatrix_set_button_width(btnm, 11, 3);
115 lv_buttonmatrix_set_button_width(btnm, 12, 2);
116 lv_buttonmatrix_set_button_width(btnm, 13, 1);
117
118 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
119 lv_buttonmatrix_set_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_CHECKED);
120 lv_buttonmatrix_set_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKED);
121 lv_buttonmatrix_set_button_ctrl(btnm, 5, LV_BUTTONMATRIX_CTRL_CHECKED);
122 lv_buttonmatrix_set_button_ctrl(btnm, 7, LV_BUTTONMATRIX_CTRL_CHECKED);
123 lv_buttonmatrix_set_button_ctrl(btnm, 9, LV_BUTTONMATRIX_CTRL_CHECKED);
124 lv_buttonmatrix_set_button_ctrl(btnm, 11, LV_BUTTONMATRIX_CTRL_CHECKED);
125 lv_obj_set_pos(btnm, 180, 160);
126
127 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/btnm_2.png");
128 }
129
test_button_matrix_set_ctrl_map_works(void)130 void test_button_matrix_set_ctrl_map_works(void)
131 {
132 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
133 lv_buttonmatrix_set_map(btnm, btn_map);
134
135 lv_buttonmatrix_ctrl_t ctrl_map[4];
136 ctrl_map[0] = 1 | LV_BUTTONMATRIX_CTRL_DISABLED;
137 ctrl_map[1] = 1 | LV_BUTTONMATRIX_CTRL_CHECKABLE | LV_BUTTONMATRIX_CTRL_CHECKED;
138 ctrl_map[2] = 1 | LV_BUTTONMATRIX_CTRL_HIDDEN;
139 ctrl_map[3] = 1 | LV_BUTTONMATRIX_CTRL_CHECKABLE;
140 lv_buttonmatrix_set_ctrl_map(btnm, ctrl_map);
141
142 /* Verify if the ctrl map was set correctly. */
143 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_DISABLED));
144 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 1,
145 LV_BUTTONMATRIX_CTRL_CHECKABLE | LV_BUTTONMATRIX_CTRL_CHECKED));
146 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_HIDDEN));
147 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKABLE));
148
149 /* Also checking randomly that no other flags are set. */
150 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_CHECKABLE));
151 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_DISABLED));
152 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKED));
153 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 4, LV_BUTTONMATRIX_CTRL_HIDDEN));
154 }
155
test_button_matrix_set_button_ctrl_works(void)156 void test_button_matrix_set_button_ctrl_works(void)
157 {
158 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
159 lv_buttonmatrix_set_map(btnm, btn_map);
160
161 /* Set btn control map using individual APIs. */
162 lv_buttonmatrix_set_button_ctrl(btnm, 0, 1 | LV_BUTTONMATRIX_CTRL_DISABLED);
163 lv_buttonmatrix_set_button_ctrl(btnm, 1, 1 | LV_BUTTONMATRIX_CTRL_CHECKABLE | LV_BUTTONMATRIX_CTRL_CHECKED);
164 lv_buttonmatrix_set_button_ctrl(btnm, 2, 1 | LV_BUTTONMATRIX_CTRL_HIDDEN);
165 lv_buttonmatrix_set_button_ctrl(btnm, 3, 1 | LV_BUTTONMATRIX_CTRL_CHECKABLE);
166
167 /* Verify if the ctrl map was set correctly. */
168 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_DISABLED));
169 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 1,
170 LV_BUTTONMATRIX_CTRL_CHECKABLE | LV_BUTTONMATRIX_CTRL_CHECKED));
171 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_HIDDEN));
172 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKABLE));
173
174 /* Also checking randomly that no other flags are set. */
175 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_CHECKABLE));
176 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_DISABLED));
177 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKED));
178 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 4, LV_BUTTONMATRIX_CTRL_HIDDEN));
179 }
180
test_button_matrix_clear_button_ctrl_works(void)181 void test_button_matrix_clear_button_ctrl_works(void)
182 {
183 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
184 lv_buttonmatrix_set_map(btnm, btn_map);
185
186 /* Set btn control map using individual APIs. */
187 lv_buttonmatrix_set_button_ctrl(btnm, 0, 1 | LV_BUTTONMATRIX_CTRL_DISABLED);
188 lv_buttonmatrix_set_button_ctrl(btnm, 1, 1 | LV_BUTTONMATRIX_CTRL_CHECKABLE | LV_BUTTONMATRIX_CTRL_CHECKED);
189 lv_buttonmatrix_set_button_ctrl(btnm, 2, 1 | LV_BUTTONMATRIX_CTRL_HIDDEN);
190 lv_buttonmatrix_set_button_ctrl(btnm, 3, 1 | LV_BUTTONMATRIX_CTRL_CHECKABLE);
191
192 lv_buttonmatrix_clear_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_DISABLED);
193 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_DISABLED));
194 lv_buttonmatrix_clear_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_CHECKED);
195 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_CHECKED));
196 lv_buttonmatrix_clear_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_HIDDEN);
197 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_HIDDEN));
198 lv_buttonmatrix_clear_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKABLE);
199 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKABLE));
200 }
201
test_button_matrix_set_selected_button_works(void)202 void test_button_matrix_set_selected_button_works(void)
203 {
204 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
205 lv_buttonmatrix_set_map(btnm, btn_map);
206
207 lv_buttonmatrix_set_selected_button(btnm, 2);
208 TEST_ASSERT_EQUAL_UINT16(2, lv_buttonmatrix_get_selected_button(btnm));
209
210 lv_buttonmatrix_set_selected_button(btnm, 0);
211 TEST_ASSERT_EQUAL_UINT16(0, lv_buttonmatrix_get_selected_button(btnm));
212
213 lv_buttonmatrix_set_selected_button(btnm, 3);
214 TEST_ASSERT_EQUAL_UINT16(3, lv_buttonmatrix_get_selected_button(btnm));
215
216 lv_buttonmatrix_set_selected_button(btnm, 1);
217 TEST_ASSERT_EQUAL_UINT16(1, lv_buttonmatrix_get_selected_button(btnm));
218 }
219
test_button_matrix_set_button_ctrl_all_works(void)220 void test_button_matrix_set_button_ctrl_all_works(void)
221 {
222 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
223 lv_buttonmatrix_set_map(btnm, btn_map);
224
225 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_HIDDEN);
226
227 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_HIDDEN));
228 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_HIDDEN));
229 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_HIDDEN));
230 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_HIDDEN));
231 }
232
test_button_matrix_clear_button_ctrl_all_works(void)233 void test_button_matrix_clear_button_ctrl_all_works(void)
234 {
235 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
236 lv_buttonmatrix_set_map(btnm, btn_map);
237
238 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_HIDDEN);
239 lv_buttonmatrix_clear_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_HIDDEN);
240
241 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_HIDDEN));
242 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_HIDDEN));
243 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_HIDDEN));
244 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_HIDDEN));
245 }
246
test_button_matrix_set_button_width_works(void)247 void test_button_matrix_set_button_width_works(void)
248 {
249 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
250 lv_buttonmatrix_set_map(btnm, btn_map);
251
252 lv_buttonmatrix_set_button_width(btnm, 1, 3);
253 lv_buttonmatrix_set_button_width(btnm, 2, 2);
254
255 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 1, 3));
256 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 2, 2));
257 }
258
test_button_matrix_set_one_checked_works(void)259 void test_button_matrix_set_one_checked_works(void)
260 {
261 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
262 lv_buttonmatrix_set_map(btnm, btn_map);
263
264 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
265 lv_buttonmatrix_set_one_checked(btnm, true);
266
267 lv_buttonmatrix_set_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_CHECKED);
268 lv_buttonmatrix_set_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_CHECKED);
269 lv_buttonmatrix_set_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_CHECKED);
270 lv_buttonmatrix_set_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKED);
271
272 TEST_ASSERT_TRUE(lv_buttonmatrix_get_one_checked(btnm));
273
274 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_CHECKED));
275 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_CHECKED));
276 TEST_ASSERT_FALSE(lv_buttonmatrix_has_button_ctrl(btnm, 2, LV_BUTTONMATRIX_CTRL_CHECKED));
277 TEST_ASSERT_TRUE(lv_buttonmatrix_has_button_ctrl(btnm, 3, LV_BUTTONMATRIX_CTRL_CHECKED));
278 }
279
test_button_matrix_get_button_text_works(void)280 void test_button_matrix_get_button_text_works(void)
281 {
282 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
283 lv_buttonmatrix_set_map(btnm, btn_map);
284
285 TEST_ASSERT_EQUAL_STRING("A", lv_buttonmatrix_get_button_text(btnm, 0));
286 TEST_ASSERT_EQUAL_STRING("B", lv_buttonmatrix_get_button_text(btnm, 1));
287 TEST_ASSERT_EQUAL_STRING("C", lv_buttonmatrix_get_button_text(btnm, 2));
288 TEST_ASSERT_EQUAL_STRING("D", lv_buttonmatrix_get_button_text(btnm, 3));
289 }
290
291 /* Common event handler for all the consecutive test cases. */
event_handler(lv_event_t * e)292 static void event_handler(lv_event_t * e)
293 {
294 lv_event_code_t code = lv_event_get_code(e);
295 if(code == exp_evt_code) {
296 event_triggered = true;
297 }
298 }
299
test_button_matrix_pressed_event_works(void)300 void test_button_matrix_pressed_event_works(void)
301 {
302 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
303 lv_buttonmatrix_set_map(btnm, btn_map);
304 lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_PRESSED, NULL);
305 /* Set expected event code before the event is raised. */
306 exp_evt_code = LV_EVENT_PRESSED;
307 /* Click button index 0. */
308 lv_test_mouse_click_at(10, 10);
309 TEST_ASSERT_TRUE(event_triggered);
310 }
311
test_button_matrix_release_event_works(void)312 void test_button_matrix_release_event_works(void)
313 {
314 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
315 lv_buttonmatrix_set_map(btnm, btn_map);
316 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
317 lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_RELEASED, NULL);
318 /* Set expected event code before the event is raised. */
319 exp_evt_code = LV_EVENT_RELEASED;
320
321 /* Click button index 0. */
322 lv_test_mouse_click_at(65, 35);
323 TEST_ASSERT_TRUE(event_triggered);
324 event_triggered = false;
325 /* This will increase test coverage by unchecking the
326 same button. */
327 lv_buttonmatrix_set_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_POPOVER);
328 /* Click button index 0. */
329 lv_test_mouse_click_at(65, 35);
330 TEST_ASSERT_TRUE(event_triggered);
331 }
332
test_button_matrix_key_event_works(void)333 void test_button_matrix_key_event_works(void)
334 {
335 uint32_t keyCode;
336 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
337 lv_buttonmatrix_set_map(btnm, btn_map);
338 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
339 lv_obj_update_layout(btnm); /*The force calculating the button areas*/
340 lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_KEY, NULL);
341 /* Set expected event code before the event is raised. */
342 exp_evt_code = LV_EVENT_KEY;
343
344 lv_buttonmatrix_t * btnmObj = (lv_buttonmatrix_t *)btnm;
345 /* Select the first button. */
346 lv_buttonmatrix_set_selected_button(btnm, 0);
347 keyCode = LV_KEY_RIGHT;
348 lv_obj_send_event(btnm, LV_EVENT_KEY, &keyCode);
349 TEST_ASSERT_TRUE(event_triggered);
350 uint16_t btnId = lv_buttonmatrix_get_selected_button(btnm);
351 TEST_ASSERT_EQUAL_INT(1, btnId);
352
353 event_triggered = false;
354 keyCode = LV_KEY_LEFT;
355 lv_obj_send_event(btnm, LV_EVENT_KEY, &keyCode);
356 TEST_ASSERT_TRUE(event_triggered);
357 btnId = lv_buttonmatrix_get_selected_button(btnm);
358 TEST_ASSERT_EQUAL_INT(0, btnId);
359
360 event_triggered = false;
361 keyCode = LV_KEY_DOWN;
362 lv_obj_send_event(btnm, LV_EVENT_KEY, &keyCode);
363 TEST_ASSERT_TRUE(event_triggered);
364 btnId = lv_buttonmatrix_get_selected_button(btnm);
365 TEST_ASSERT_EQUAL_INT(2, btnId);
366
367 event_triggered = false;
368 keyCode = LV_KEY_UP;
369 lv_obj_send_event(btnm, LV_EVENT_KEY, &keyCode);
370 TEST_ASSERT_TRUE(event_triggered);
371 btnId = lv_buttonmatrix_get_selected_button(btnm);
372 TEST_ASSERT_EQUAL_INT(0, btnId);
373
374 /* Added this code to increase code coverage. */
375 btnmObj->btn_id_sel = LV_BUTTONMATRIX_BUTTON_NONE;
376 lv_buttonmatrix_set_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_HIDDEN);
377 keyCode = LV_KEY_DOWN;
378 lv_obj_send_event(btnm, LV_EVENT_KEY, &keyCode);
379 TEST_ASSERT_TRUE(event_triggered);
380 event_triggered = false;
381 }
382
test_button_matrix_pressing_event_works(void)383 void test_button_matrix_pressing_event_works(void)
384 {
385 lv_buttonmatrix_t * btnmObj = (lv_buttonmatrix_t *)btnm;
386 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
387 lv_buttonmatrix_set_map(btnm, btn_map);
388 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
389 lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_PRESSING, NULL);
390 /* Set expected event code before the event is raised. */
391 exp_evt_code = LV_EVENT_PRESSING;
392 /* Select a button before raising a simulated event.
393 * This is done to increase code coverage. */
394 btnmObj->btn_id_sel = 3;
395 /* Send a dummy lv_indev_t object as param to avoid crashing during build. */
396 lv_obj_send_event(btnm, LV_EVENT_PRESSING, lv_test_mouse_indev);
397 TEST_ASSERT_TRUE(event_triggered);
398 }
399
test_button_matrix_long_press_repeat_event_works(void)400 void test_button_matrix_long_press_repeat_event_works(void)
401 {
402 lv_buttonmatrix_t * btnmObj = (lv_buttonmatrix_t *)btnm;
403 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
404
405 lv_buttonmatrix_set_map(btnm, btn_map);
406 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
407 lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_LONG_PRESSED_REPEAT, NULL);
408 /* Set expected event code before the event is raised. */
409 exp_evt_code = LV_EVENT_LONG_PRESSED_REPEAT;
410 /* Select a button before raising a simulated event.
411 * This is done to increase code coverage. */
412 btnmObj->btn_id_sel = 0;
413 lv_obj_send_event(btnm, LV_EVENT_LONG_PRESSED_REPEAT, NULL);
414 TEST_ASSERT_TRUE(event_triggered);
415 }
416
test_button_matrix_press_lost_event_works(void)417 void test_button_matrix_press_lost_event_works(void)
418 {
419 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
420
421 lv_buttonmatrix_set_map(btnm, btn_map);
422 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
423 lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_PRESS_LOST, NULL);
424 /* Set expected event code before the event is raised. */
425 exp_evt_code = LV_EVENT_PRESS_LOST;
426 lv_obj_send_event(btnm, LV_EVENT_PRESS_LOST, NULL);
427 TEST_ASSERT_TRUE(event_triggered);
428 }
429
test_button_matrix_defocused_event_works(void)430 void test_button_matrix_defocused_event_works(void)
431 {
432 lv_buttonmatrix_t * btnmObj = (lv_buttonmatrix_t *)btnm;
433 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
434
435 lv_buttonmatrix_set_map(btnm, btn_map);
436 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
437 lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_DEFOCUSED, NULL);
438 /* Set expected event code before the event is raised. */
439 exp_evt_code = LV_EVENT_DEFOCUSED;
440 /* Select a button before raising a simulated event.
441 * This is done to increase code coverage. */
442 btnmObj->btn_id_sel = 0;
443 lv_obj_send_event(btnm, LV_EVENT_DEFOCUSED, NULL);
444 TEST_ASSERT_TRUE(event_triggered);
445 }
446
test_button_matrix_focused_event_works(void)447 void test_button_matrix_focused_event_works(void)
448 {
449 static const char * btn_map[] = {"A", "B", "\n", "C", "D", ""};
450
451 lv_buttonmatrix_set_map(btnm, btn_map);
452 lv_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
453 lv_obj_add_event_cb(btnm, event_handler, LV_EVENT_FOCUSED, NULL);
454 /* Set expected event code before the event is raised. */
455 exp_evt_code = LV_EVENT_FOCUSED;
456 lv_obj_send_event(btnm, LV_EVENT_FOCUSED, NULL);
457 TEST_ASSERT_TRUE(event_triggered);
458 }
459
460 #endif
461