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