1 #if LV_BUILD_TEST
2 #include "../lvgl.h"
3 #include "../../lvgl_private.h"
4
5 #include "unity/unity.h"
6 #include "lv_test_indev.h"
7 #include <string.h>
8
setUp(void)9 void setUp(void)
10 {
11 /* Function run before every test */
12 }
13
tearDown(void)14 void tearDown(void)
15 {
16 /* Function run after every test */
17 lv_obj_clean(lv_screen_active());
18 }
test_dropdown_create_delete(void)19 void test_dropdown_create_delete(void)
20 {
21 lv_dropdown_create(lv_screen_active());
22 TEST_ASSERT_EQUAL(2, lv_obj_get_child_count(lv_screen_active()));
23
24 lv_obj_t * dd2 = lv_dropdown_create(lv_screen_active());
25 lv_obj_set_pos(dd2, 200, 0);
26 TEST_ASSERT_EQUAL(4, lv_obj_get_child_count(lv_screen_active()));
27 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd2));
28 lv_dropdown_open(dd2);
29 TEST_ASSERT_EQUAL(4, lv_obj_get_child_count(lv_screen_active()));
30 TEST_ASSERT_TRUE(lv_dropdown_is_open(dd2));
31 lv_dropdown_open(dd2); /*Try to open again*/
32 TEST_ASSERT_EQUAL(4, lv_obj_get_child_count(lv_screen_active()));
33
34 lv_obj_t * dd3 = lv_dropdown_create(lv_screen_active());
35 lv_obj_set_pos(dd3, 400, 0);
36 TEST_ASSERT_EQUAL(6, lv_obj_get_child_count(lv_screen_active()));
37 lv_dropdown_open(dd3);
38 TEST_ASSERT_EQUAL(6, lv_obj_get_child_count(lv_screen_active()));
39 lv_dropdown_close(dd3);
40 TEST_ASSERT_EQUAL(6, lv_obj_get_child_count(lv_screen_active()));
41 lv_dropdown_close(dd3); /*Try to close again*/
42 TEST_ASSERT_EQUAL(6, lv_obj_get_child_count(lv_screen_active()));
43
44 lv_obj_delete(dd2);
45 TEST_ASSERT_EQUAL(4, lv_obj_get_child_count(lv_screen_active()));
46
47 lv_obj_clean(lv_screen_active());
48 TEST_ASSERT_EQUAL(0, lv_obj_get_child_count(lv_screen_active()));
49
50 }
51
test_dropdown_set_options(void)52 void test_dropdown_set_options(void)
53 {
54
55 lv_mem_monitor_t m1;
56 lv_mem_monitor(&m1);
57
58 lv_obj_t * dd1 = lv_dropdown_create(lv_screen_active());
59 TEST_ASSERT_EQUAL_STRING("Option 1\nOption 2\nOption 3", lv_dropdown_get_options(dd1));
60 TEST_ASSERT_EQUAL(3, lv_dropdown_get_option_count(dd1));
61
62 lv_dropdown_set_options(dd1, "a1\nb2\nc3\nd4\ne5\nf6");
63 TEST_ASSERT_EQUAL_STRING("a1\nb2\nc3\nd4\ne5\nf6", lv_dropdown_get_options(dd1));
64 TEST_ASSERT_EQUAL(6, lv_dropdown_get_option_count(dd1));
65
66 lv_obj_set_width(dd1, 200);
67 lv_dropdown_open(dd1);
68 lv_obj_update_layout(dd1);
69 TEST_ASSERT_EQUAL(200, lv_obj_get_width(lv_dropdown_get_list(dd1)));
70
71 lv_dropdown_close(dd1);
72
73 lv_dropdown_add_option(dd1, "x0", 0);
74 TEST_ASSERT_EQUAL_STRING("x0\na1\nb2\nc3\nd4\ne5\nf6", lv_dropdown_get_options(dd1));
75 TEST_ASSERT_EQUAL(7, lv_dropdown_get_option_count(dd1));
76
77 lv_dropdown_add_option(dd1, "y0", 3);
78 TEST_ASSERT_EQUAL_STRING("x0\na1\nb2\ny0\nc3\nd4\ne5\nf6", lv_dropdown_get_options(dd1));
79 TEST_ASSERT_EQUAL(8, lv_dropdown_get_option_count(dd1));
80
81 lv_dropdown_add_option(dd1, "z0", LV_DROPDOWN_POS_LAST);
82 TEST_ASSERT_EQUAL_STRING("x0\na1\nb2\ny0\nc3\nd4\ne5\nf6\nz0", lv_dropdown_get_options(dd1));
83 TEST_ASSERT_EQUAL(9, lv_dropdown_get_option_count(dd1));
84
85 lv_dropdown_clear_options(dd1);
86 TEST_ASSERT_EQUAL_STRING("", lv_dropdown_get_options(dd1));
87 TEST_ASSERT_EQUAL(0, lv_dropdown_get_option_count(dd1));
88
89 lv_dropdown_set_options(dd1, "o1\no2"); /*Just to add some content before lv_dropdown_set_options_static*/
90
91 lv_dropdown_set_options_static(dd1, "a1\nb2\nc3\nd4\ne5\nf6");
92 TEST_ASSERT_EQUAL_STRING("a1\nb2\nc3\nd4\ne5\nf6", lv_dropdown_get_options(dd1));
93 TEST_ASSERT_EQUAL(6, lv_dropdown_get_option_count(dd1));
94
95 lv_dropdown_add_option(dd1, "x0", 0);
96 TEST_ASSERT_EQUAL_STRING("x0\na1\nb2\nc3\nd4\ne5\nf6", lv_dropdown_get_options(dd1));
97 TEST_ASSERT_EQUAL(7, lv_dropdown_get_option_count(dd1));
98
99 lv_dropdown_add_option(dd1, "y0", 3);
100 TEST_ASSERT_EQUAL_STRING("x0\na1\nb2\ny0\nc3\nd4\ne5\nf6", lv_dropdown_get_options(dd1));
101 TEST_ASSERT_EQUAL(8, lv_dropdown_get_option_count(dd1));
102
103 lv_dropdown_add_option(dd1, "z0", LV_DROPDOWN_POS_LAST);
104 TEST_ASSERT_EQUAL_STRING("x0\na1\nb2\ny0\nc3\nd4\ne5\nf6\nz0", lv_dropdown_get_options(dd1));
105 TEST_ASSERT_EQUAL(9, lv_dropdown_get_option_count(dd1));
106
107 lv_dropdown_clear_options(dd1);
108 TEST_ASSERT_EQUAL_STRING("", lv_dropdown_get_options(dd1));
109 TEST_ASSERT_EQUAL(0, lv_dropdown_get_option_count(dd1));
110
111 lv_obj_delete(dd1);
112
113 lv_mem_monitor_t m2;
114 lv_mem_monitor(&m2);
115 TEST_ASSERT_UINT_WITHIN(48, m1.free_size, m2.free_size);
116 }
117
test_dropdown_select(void)118 void test_dropdown_select(void)
119 {
120 lv_obj_t * dd1 = lv_dropdown_create(lv_screen_active());
121 lv_dropdown_set_selected(dd1, 2, LV_ANIM_OFF);
122
123 TEST_ASSERT_EQUAL(2, lv_dropdown_get_selected(dd1));
124
125 char buf[32];
126 memset(buf, 0x00, sizeof(buf));
127 lv_dropdown_get_selected_str(dd1, buf, sizeof(buf));
128 TEST_ASSERT_EQUAL_STRING("Option 3", buf);
129
130 memset(buf, 0x00, sizeof(buf));
131 lv_dropdown_get_selected_str(dd1, buf, 4);
132 TEST_ASSERT_EQUAL_STRING("Opt", buf);
133
134 /*Out of range*/
135 lv_dropdown_set_selected(dd1, 3, LV_ANIM_OFF);
136 TEST_ASSERT_EQUAL(2, lv_dropdown_get_selected(dd1));
137 }
138
test_dropdown_click(void)139 void test_dropdown_click(void)
140 {
141 lv_obj_clean(lv_screen_active());
142 lv_obj_t * dd1 = lv_dropdown_create(lv_screen_active());
143 lv_obj_update_layout(dd1);
144
145 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
146 lv_test_mouse_click_at(dd1->coords.x1 + 5, dd1->coords.y1 + 5);
147 TEST_ASSERT_TRUE(lv_dropdown_is_open(dd1));
148
149 lv_obj_t * list = lv_dropdown_get_list(dd1);
150 TEST_ASSERT_EQUAL(0, lv_dropdown_get_selected(dd1));
151 lv_test_mouse_click_at(list->coords.x1 + 5, list->coords.y2 - 25);
152 TEST_ASSERT_EQUAL(2, lv_dropdown_get_selected(dd1));
153 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
154 }
155
156 static uint32_t event_cnt;
dd_event(lv_event_t * e)157 static void dd_event(lv_event_t * e)
158 {
159 LV_UNUSED(e);
160 event_cnt++;
161 }
162
test_dropdown_keypad(void)163 void test_dropdown_keypad(void)
164 {
165 lv_obj_clean(lv_screen_active());
166
167 lv_group_t * g = lv_group_create();
168 lv_indev_set_group(lv_test_keypad_indev, g);
169
170 lv_obj_t * dd1 = lv_dropdown_create(lv_screen_active());
171 lv_obj_set_pos(dd1, 20, 20);
172 lv_dropdown_set_options(dd1, "1\n2\n3\n4\n5\n6\n7\n8");
173 lv_group_add_obj(g, dd1);
174 lv_obj_add_event_cb(dd1, dd_event, LV_EVENT_VALUE_CHANGED, NULL);
175
176 lv_obj_t * dd2 = lv_dropdown_create(lv_screen_active());
177 lv_obj_set_pos(dd2, 300, 20);
178 lv_group_add_obj(g, dd2);
179
180 event_cnt = 0;
181
182 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
183 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd2));
184 lv_test_key_hit(LV_KEY_ENTER);
185 TEST_ASSERT_TRUE(lv_dropdown_is_open(dd1));
186 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd2));
187
188 lv_test_key_hit(LV_KEY_DOWN);
189 lv_test_key_hit(LV_KEY_RIGHT); /*Same as down*/
190 lv_test_key_hit(LV_KEY_ENTER);
191 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
192 TEST_ASSERT_EQUAL(2, lv_dropdown_get_selected(dd1));
193 TEST_ASSERT_EQUAL(1, event_cnt);
194
195 lv_test_key_hit(LV_KEY_DOWN); /*Open the list too*/
196 TEST_ASSERT_NOT_NULL(lv_dropdown_get_list(dd1));
197 lv_test_key_hit(LV_KEY_DOWN);
198 lv_test_key_hit(LV_KEY_ENTER);
199 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
200 TEST_ASSERT_EQUAL(3, lv_dropdown_get_selected(dd1));
201 TEST_ASSERT_EQUAL(2, event_cnt);
202
203 lv_test_key_hit(LV_KEY_RIGHT); /*Open the list too*/
204 TEST_ASSERT_NOT_NULL(lv_dropdown_get_list(dd1));
205 lv_test_key_hit(LV_KEY_RIGHT);
206 lv_test_key_hit(LV_KEY_ENTER);
207 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
208 TEST_ASSERT_EQUAL(4, lv_dropdown_get_selected(dd1));
209 TEST_ASSERT_EQUAL(3, event_cnt);
210
211 lv_test_key_hit(LV_KEY_LEFT); /*Open the list too*/
212 TEST_ASSERT_TRUE(lv_dropdown_is_open(dd1));
213 lv_test_key_hit(LV_KEY_LEFT);
214 lv_test_key_hit(LV_KEY_ENTER);
215 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
216 TEST_ASSERT_EQUAL(3, lv_dropdown_get_selected(dd1));
217 TEST_ASSERT_EQUAL(4, event_cnt);
218
219 lv_test_key_hit(LV_KEY_UP); /*Open the list too*/
220 TEST_ASSERT_NOT_NULL(lv_dropdown_get_list(dd1));
221 lv_test_key_hit(LV_KEY_UP);
222 lv_test_key_hit(LV_KEY_ENTER);
223 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
224 TEST_ASSERT_EQUAL(2, lv_dropdown_get_selected(dd1));
225 TEST_ASSERT_EQUAL(5, event_cnt);
226
227 lv_test_key_hit(LV_KEY_UP);
228 lv_test_key_hit(LV_KEY_UP);
229 lv_test_key_hit(LV_KEY_UP);
230 lv_test_key_hit(LV_KEY_UP);
231 lv_test_key_hit(LV_KEY_ENTER);
232 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
233 TEST_ASSERT_EQUAL(0, lv_dropdown_get_selected(dd1));
234 TEST_ASSERT_EQUAL(6, event_cnt);
235
236 lv_test_key_hit(LV_KEY_DOWN);
237 lv_test_key_hit(LV_KEY_DOWN);
238 lv_test_key_hit(LV_KEY_DOWN);
239 lv_test_key_hit(LV_KEY_DOWN);
240 lv_test_key_hit(LV_KEY_DOWN);
241 lv_test_key_hit(LV_KEY_DOWN);
242 lv_test_key_hit(LV_KEY_DOWN);
243 lv_test_key_hit(LV_KEY_DOWN);
244 lv_test_key_hit(LV_KEY_DOWN);
245 lv_test_key_hit(LV_KEY_ENTER);
246 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
247 TEST_ASSERT_EQUAL(7, lv_dropdown_get_selected(dd1));
248 TEST_ASSERT_EQUAL(7, event_cnt);
249
250 lv_test_key_hit(LV_KEY_ENTER);
251 TEST_ASSERT_TRUE(lv_dropdown_is_open(dd1));
252
253 lv_test_key_hit(LV_KEY_NEXT);
254 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
255 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd2));
256
257 lv_test_key_hit(LV_KEY_ENTER);
258 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
259 TEST_ASSERT_NOT_NULL(lv_dropdown_get_list(dd2));
260
261 lv_indev_set_group(lv_test_keypad_indev, NULL);
262 lv_group_delete(g);
263 }
264
test_dropdown_encoder(void)265 void test_dropdown_encoder(void)
266 {
267 lv_obj_clean(lv_screen_active());
268
269 lv_group_t * g = lv_group_create();
270 lv_indev_set_group(lv_test_encoder_indev, g);
271
272 lv_obj_t * dd1 = lv_dropdown_create(lv_screen_active());
273 lv_obj_set_pos(dd1, 20, 20);
274 lv_dropdown_set_options(dd1, "1\n2\n3\n4\n5\n6\n7\n8");
275 lv_group_add_obj(g, dd1);
276 lv_obj_add_event_cb(dd1, dd_event, LV_EVENT_VALUE_CHANGED, NULL);
277
278 lv_obj_t * dd2 = lv_dropdown_create(lv_screen_active());
279 lv_obj_set_pos(dd2, 300, 20);
280 lv_group_add_obj(g, dd2);
281
282 event_cnt = 0;
283
284 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
285 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd2));
286 lv_test_encoder_click();
287 TEST_ASSERT_TRUE(lv_dropdown_is_open(dd1));
288 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd2));
289
290 lv_test_encoder_turn(5);
291 lv_test_encoder_click();
292 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
293 TEST_ASSERT_EQUAL(5, lv_dropdown_get_selected(dd1));
294 TEST_ASSERT_EQUAL(1, event_cnt);
295
296 lv_test_encoder_click();
297 lv_test_encoder_turn(-1);
298 lv_test_encoder_click();
299 TEST_ASSERT_EQUAL(4, lv_dropdown_get_selected(dd1));
300 TEST_ASSERT_EQUAL(2, event_cnt);
301
302 lv_test_encoder_click();
303 lv_test_encoder_turn(2);
304 lv_test_encoder_press();
305 lv_test_indev_wait(1000); //Long press
306 lv_test_encoder_release();
307 lv_test_indev_wait(50);
308 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
309 TEST_ASSERT_EQUAL(4, lv_dropdown_get_selected(dd1));
310 TEST_ASSERT_EQUAL(2, event_cnt);
311
312 lv_test_encoder_turn(1);
313 lv_test_encoder_click();
314 TEST_ASSERT_FALSE(lv_dropdown_is_open(dd1));
315 TEST_ASSERT_TRUE(lv_dropdown_is_open(dd2));
316
317 lv_indev_set_group(lv_test_encoder_indev, NULL);
318 lv_group_delete(g);
319 }
320
test_dropdown_render_1(void)321 void test_dropdown_render_1(void)
322 {
323 lv_obj_clean(lv_screen_active());
324
325 lv_obj_t * dd1 = lv_dropdown_create(lv_screen_active());
326 lv_obj_set_pos(dd1, 10, 10);
327 lv_dropdown_set_selected(dd1, 1, LV_ANIM_OFF);
328
329 lv_obj_t * dd2 = lv_dropdown_create(lv_screen_active());
330 lv_obj_set_pos(dd2, 200, 10);
331 lv_obj_set_width(dd2, 200);
332 lv_dropdown_set_selected(dd2, 2, LV_ANIM_OFF);
333 lv_dropdown_open(dd2);
334 TEST_ASSERT_TRUE(lv_dropdown_get_selected_highlight(dd2));
335 lv_dropdown_set_selected_highlight(dd2, false);
336 TEST_ASSERT_FALSE(lv_dropdown_get_selected_highlight(dd2));
337
338 lv_obj_t * dd3 = lv_dropdown_create(lv_screen_active());
339 lv_obj_set_style_pad_hor(dd3, 5, 0);
340 lv_obj_set_style_pad_ver(dd3, 20, 0);
341 lv_obj_set_pos(dd3, 500, 150);
342 TEST_ASSERT_EQUAL_PTR(NULL, lv_dropdown_get_text(dd3));
343 lv_dropdown_set_text(dd3, "A text");
344 TEST_ASSERT_EQUAL_STRING("A text", lv_dropdown_get_text(dd3));
345
346 lv_dropdown_set_selected(dd3, 2, LV_ANIM_OFF);
347
348 TEST_ASSERT_EQUAL(LV_DIR_BOTTOM, lv_dropdown_get_dir(dd3));
349 lv_dropdown_set_dir(dd3, LV_DIR_LEFT);
350 TEST_ASSERT_EQUAL(LV_DIR_LEFT, lv_dropdown_get_dir(dd3));
351
352 TEST_ASSERT_EQUAL_STRING(LV_SYMBOL_DOWN, lv_dropdown_get_symbol(dd3));
353 lv_dropdown_set_symbol(dd3, LV_SYMBOL_LEFT);
354 TEST_ASSERT_EQUAL_STRING(LV_SYMBOL_LEFT, lv_dropdown_get_symbol(dd3));
355
356 lv_dropdown_set_options(dd3, "a0\na1\na2\na3\na4\na5\na6\na7\na8\na9\na10\na11\na12\na13\na14\na15\na16");
357 lv_dropdown_open(dd3);
358 lv_obj_t * list = lv_dropdown_get_list(dd3);
359 lv_obj_set_style_text_line_space(list, 5, 0);
360 lv_obj_set_style_bg_color(list, lv_color_hex3(0xf00), LV_PART_SELECTED | LV_STATE_CHECKED);
361 lv_dropdown_set_selected(dd3, 3, LV_ANIM_OFF);
362
363 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/dropdown_1.png");
364 }
365
test_dropdown_render_2(void)366 void test_dropdown_render_2(void)
367 {
368 lv_obj_clean(lv_screen_active());
369 LV_IMAGE_DECLARE(test_image_caret_down);
370 lv_obj_t * dd1 = lv_dropdown_create(lv_screen_active());
371 lv_dropdown_set_text(dd1, "Short");
372 lv_dropdown_set_options(dd1, "1\n2");
373 lv_dropdown_set_symbol(dd1, &test_image_caret_down);
374 lv_dropdown_open(dd1);
375
376 lv_obj_t * dd2 = lv_dropdown_create(lv_screen_active());
377 lv_dropdown_set_text(dd2, "Go Up");
378 lv_dropdown_set_options(dd2, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15");
379 lv_dropdown_set_symbol(dd2, NULL);
380 lv_obj_align(dd2, LV_ALIGN_LEFT_MID, 150, 50);
381 lv_dropdown_open(dd2);
382
383 lv_obj_t * dd3 = lv_dropdown_create(lv_screen_active());
384 lv_obj_set_height(dd3, 70);
385 lv_dropdown_set_text(dd3, "Limit Down");
386 lv_dropdown_set_options(dd3, "1aaaaaaaaaaaaaaaa\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15");
387 lv_obj_align(dd3, LV_ALIGN_LEFT_MID, 300, -10);
388 lv_dropdown_open(dd3);
389
390 lv_obj_t * dd4 = lv_dropdown_create(lv_screen_active());
391 lv_dropdown_set_text(dd4, "Limit Top");
392 lv_dropdown_set_options(dd4, "1aaaaaaaaaaaaaaaa\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15");
393 lv_obj_align(dd4, LV_ALIGN_LEFT_MID, 450, 10);
394 lv_dropdown_set_dir(dd4, LV_DIR_TOP);
395 lv_dropdown_set_symbol(dd4, LV_SYMBOL_UP);
396 lv_dropdown_open(dd4);
397
398 lv_obj_t * dd5 = lv_dropdown_create(lv_screen_active());
399 lv_dropdown_set_text(dd5, "Go Down");
400 lv_dropdown_set_options(dd5, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15");
401 lv_dropdown_set_dir(dd5, LV_DIR_TOP);
402 lv_dropdown_set_symbol(dd5, LV_SYMBOL_UP);
403 lv_obj_align(dd5, LV_ALIGN_LEFT_MID, 650, -200);
404 lv_dropdown_open(dd5);
405
406 lv_obj_t * dd6 = lv_dropdown_create(lv_screen_active());
407 lv_dropdown_set_text(dd6, "Right");
408 lv_dropdown_set_options(dd6, "1aaa\n2aa\n3aa");
409 lv_dropdown_set_dir(dd6, LV_DIR_RIGHT);
410 lv_dropdown_set_symbol(dd6, LV_SYMBOL_RIGHT);
411 lv_obj_align(dd6, LV_ALIGN_BOTTOM_LEFT, 20, -20);
412 lv_dropdown_open(dd6);
413 lv_obj_set_style_text_align(lv_dropdown_get_list(dd6), LV_TEXT_ALIGN_RIGHT, 0);
414
415 lv_obj_t * dd7 = lv_dropdown_create(lv_screen_active());
416 lv_dropdown_set_text(dd7, "Left");
417 lv_dropdown_set_options(dd7, "1aaa\n2\n3");
418 lv_dropdown_set_dir(dd7, LV_DIR_LEFT);
419 lv_dropdown_set_symbol(dd7, LV_SYMBOL_LEFT);
420 lv_obj_align(dd7, LV_ALIGN_BOTTOM_RIGHT, -20, -20);
421 lv_dropdown_open(dd7);
422
423 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/dropdown_2.png");
424 }
425
426 /* See #2893 */
test_dropdown_should_list_on_top(void)427 void test_dropdown_should_list_on_top(void)
428 {
429 lv_obj_t * cont1 = lv_obj_create(lv_screen_active());
430 lv_obj_set_size(cont1, 200, 100);
431
432 lv_obj_t * dd = lv_dropdown_create(cont1);
433
434 lv_obj_t * cont2 = lv_obj_create(lv_screen_active());
435 lv_obj_set_size(cont2, 200, 100);
436 lv_obj_set_pos(cont2, 0, 100);
437
438 lv_dropdown_open(dd);
439 lv_obj_t * list = lv_dropdown_get_list(dd);
440 TEST_ASSERT_EQUAL_PTR(lv_screen_active(), lv_obj_get_parent(list));
441 TEST_ASSERT_EQUAL_INT(2, lv_obj_get_index(list));
442 }
443
444 /* See #4191 */
test_dropdown_get_options_should_check_lengths(void)445 void test_dropdown_get_options_should_check_lengths(void)
446 {
447 lv_obj_t * dd = lv_dropdown_create(lv_screen_active());
448 lv_dropdown_set_options(dd, "abc\nab");
449 TEST_ASSERT_EQUAL_INT(1, lv_dropdown_get_option_index(dd, "ab"));
450
451 lv_dropdown_set_options(dd, "Option 1\nOption 2\nOption 3\nOption");
452 TEST_ASSERT_EQUAL_INT(3, lv_dropdown_get_option_index(dd, "Option"));
453 TEST_ASSERT_EQUAL_INT(-1, lv_dropdown_get_option_index(dd, "Option "));
454 }
455
test_dropdown_properties(void)456 void test_dropdown_properties(void)
457 {
458 #if LV_USE_OBJ_PROPERTY
459 lv_obj_t * obj = lv_dropdown_create(lv_screen_active());
460 lv_property_t prop = { };
461
462 prop.id = LV_PROPERTY_DROPDOWN_TEXT;
463 prop.ptr = "Hello";
464 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
465 TEST_ASSERT_EQUAL_STRING("Hello", lv_dropdown_get_text(obj));
466 TEST_ASSERT_EQUAL_STRING("Hello", lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_TEXT).ptr);
467
468 prop.id = LV_PROPERTY_DROPDOWN_OPTIONS;
469 prop.ptr = "Option 1\nOption 2";
470 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
471 TEST_ASSERT_EQUAL_STRING("Option 1\nOption 2", lv_dropdown_get_options(obj));
472 TEST_ASSERT_EQUAL_STRING("Option 1\nOption 2", lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_OPTIONS).ptr);
473
474 TEST_ASSERT_EQUAL(2, lv_dropdown_get_option_count(obj));
475 TEST_ASSERT_EQUAL(2, lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_OPTION_COUNT).num);
476
477 prop.id = LV_PROPERTY_DROPDOWN_SELECTED;
478 prop.arg1.num = 1;
479 prop.arg2.enable = LV_ANIM_OFF;
480 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
481 TEST_ASSERT_EQUAL_INT(1, lv_dropdown_get_selected(obj));
482 TEST_ASSERT_EQUAL_INT(1, lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_SELECTED).num);
483
484 prop.id = LV_PROPERTY_DROPDOWN_DIR;
485 prop.num = LV_DIR_LEFT;
486 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
487 TEST_ASSERT_EQUAL_INT(LV_DIR_LEFT, lv_dropdown_get_dir(obj));
488 TEST_ASSERT_EQUAL_INT(LV_DIR_LEFT, lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_DIR).num);
489
490 prop.id = LV_PROPERTY_DROPDOWN_SYMBOL;
491 prop.ptr = LV_SYMBOL_DOWN;
492 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
493 TEST_ASSERT_EQUAL_STRING(LV_SYMBOL_DOWN, lv_dropdown_get_symbol(obj));
494 TEST_ASSERT_EQUAL_STRING(LV_SYMBOL_DOWN, lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_SYMBOL).ptr);
495
496 prop.id = LV_PROPERTY_DROPDOWN_SELECTED_HIGHLIGHT;
497 prop.num = true;
498 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
499 TEST_ASSERT_TRUE(lv_dropdown_get_selected_highlight(obj));
500 TEST_ASSERT_TRUE(lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_SELECTED_HIGHLIGHT).num);
501
502 lv_dropdown_open(obj);
503 TEST_ASSERT_TRUE(lv_dropdown_is_open(obj));
504 TEST_ASSERT_TRUE(lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_IS_OPEN).enable);
505 lv_dropdown_close(obj);
506 TEST_ASSERT_FALSE(lv_dropdown_is_open(obj));
507 TEST_ASSERT_FALSE(lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_IS_OPEN).enable);
508 #endif
509 }
510
511
512 #endif
513