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 
8 void setUp(void);
9 void tearDown(void);
10 void test_tabview_create_successful_dir_top(void);
11 void test_tabview_create_successful_dir_bottom(void);
12 void test_tabview_create_successful_dir_left(void);
13 void test_tabview_create_successful_dir_right(void);
14 void test_tabview_add_one_tab_empty(void);
15 void test_tabview_add_one_tab_empty_hor(void);
16 void test_tabview_add_one_tab_no_scroll(void);
17 void test_tabview_add_one_tab_with_scroll(void);
18 void test_tabview_add_several_tabs_no_scroll(void);
19 void test_tabview_rename_tab(void);
20 void test_tabview_add_several_tabs_hor(void);
21 void test_tabview_get_content(void);
22 void test_tabview_get_tab_bar(void);
23 void test_tabview_set_act_non_existent(void);
24 void test_tabview_tab2_selected_event(void);
25 void test_tabview_update_on_external_scroll(void);
26 
27 static lv_obj_t * active_screen = NULL;
28 static lv_obj_t * tabview = NULL;
29 
setUp(void)30 void setUp(void)
31 {
32     active_screen = lv_screen_active();
33 }
34 
tearDown(void)35 void tearDown(void)
36 {
37     lv_obj_clean(active_screen);
38 }
39 
test_tabview_create_successful_dir_top(void)40 void test_tabview_create_successful_dir_top(void)
41 {
42     tabview = lv_tabview_create(active_screen);
43     lv_tabview_set_tab_bar_size(tabview, 50);
44 
45     TEST_ASSERT_NOT_NULL(tabview);
46 
47     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_01.png");
48 }
49 
test_tabview_create_successful_dir_bottom(void)50 void test_tabview_create_successful_dir_bottom(void)
51 {
52     tabview = lv_tabview_create(active_screen);
53     lv_tabview_set_tab_bar_position(tabview, LV_DIR_BOTTOM);
54     lv_tabview_set_tab_bar_size(tabview, 50);
55 
56     TEST_ASSERT_NOT_NULL(tabview);
57 
58     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_02.png");
59 }
60 
test_tabview_create_successful_dir_left(void)61 void test_tabview_create_successful_dir_left(void)
62 {
63     tabview = lv_tabview_create(active_screen);
64     lv_tabview_set_tab_bar_position(tabview, LV_DIR_LEFT);
65     lv_tabview_set_tab_bar_size(tabview, 50);
66 
67     TEST_ASSERT_NOT_NULL(tabview);
68 
69     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_03.png");
70 }
71 
test_tabview_create_successful_dir_right(void)72 void test_tabview_create_successful_dir_right(void)
73 {
74     tabview = lv_tabview_create(active_screen);
75     lv_tabview_set_tab_bar_position(tabview, LV_DIR_RIGHT);
76     lv_tabview_set_tab_bar_size(tabview, 50);
77 
78     TEST_ASSERT_NOT_NULL(tabview);
79 
80     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_04.png");
81 }
82 
test_tabview_add_one_tab_empty(void)83 void test_tabview_add_one_tab_empty(void)
84 {
85     tabview = lv_tabview_create(active_screen);
86     lv_tabview_set_tab_bar_position(tabview, LV_DIR_TOP);
87     lv_tabview_set_tab_bar_size(tabview, 50);
88 
89     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
90 
91     TEST_ASSERT_NOT_NULL(tab1);
92 }
93 
test_tabview_add_one_tab_empty_hor(void)94 void test_tabview_add_one_tab_empty_hor(void)
95 {
96     tabview = lv_tabview_create(active_screen);
97     lv_tabview_set_tab_bar_position(tabview, LV_DIR_LEFT);
98     lv_tabview_set_tab_bar_size(tabview, 50);
99 
100     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
101 
102     TEST_ASSERT_NOT_NULL(tab1);
103 }
104 
test_tabview_add_one_tab_no_scroll(void)105 void test_tabview_add_one_tab_no_scroll(void)
106 {
107     tabview = lv_tabview_create(active_screen);
108     lv_tabview_set_tab_bar_position(tabview, LV_DIR_TOP);
109     lv_tabview_set_tab_bar_size(tabview, 50);
110 
111     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
112 
113     lv_obj_t * label = lv_label_create(tab1);
114     const char * content = "Content of the first tab\n";
115     lv_label_set_text(label, content);
116 
117     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_05.png");
118 }
119 
test_tabview_add_one_tab_with_scroll(void)120 void test_tabview_add_one_tab_with_scroll(void)
121 {
122     tabview = lv_tabview_create(active_screen);
123     lv_tabview_set_tab_bar_position(tabview, LV_DIR_TOP);
124     lv_tabview_set_tab_bar_size(tabview, 50);
125 
126     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
127 
128     lv_obj_t * label = lv_label_create(tab1);
129     lv_label_set_text(label, "Content of the first tab\n"
130                       "If the content\n"
131                       "of a tab\n"
132                       "becomes too\n"
133                       "longer\n"
134                       "than the\n"
135                       "container\n"
136                       "then it\n"
137                       "automatically\n"
138                       "becomes\n"
139                       "scrollable.\n"
140                       "\n"
141                       "\n"
142                       "\n"
143                       "Can you see it?");
144 
145     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_06.png");
146 }
147 
test_tabview_add_several_tabs_no_scroll(void)148 void test_tabview_add_several_tabs_no_scroll(void)
149 {
150     tabview = lv_tabview_create(active_screen);
151     lv_tabview_set_tab_bar_position(tabview, LV_DIR_TOP);
152     lv_tabview_set_tab_bar_size(tabview, 50);
153 
154     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
155     lv_obj_t * tab2 = lv_tabview_add_tab(tabview, "Tab 2");
156     lv_obj_t * tab3 = lv_tabview_add_tab(tabview, "Tab 3");
157 
158     lv_obj_t * label1 = lv_label_create(tab1);
159     lv_label_set_text(label1, "Content of the first tab\n");
160 
161     /*avoid compiler error: unused variable*/
162     LV_UNUSED(tab2);
163     LV_UNUSED(tab3);
164 
165     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_07.png");
166 }
167 
test_tabview_rename_tab(void)168 void test_tabview_rename_tab(void)
169 {
170     tabview = lv_tabview_create(active_screen);
171     lv_tabview_set_tab_bar_position(tabview, LV_DIR_TOP);
172     lv_tabview_set_tab_bar_size(tabview, 50);
173 
174     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
175     lv_obj_t * tab2 = lv_tabview_add_tab(tabview, "Tab 2");
176     lv_obj_t * tab3 = lv_tabview_add_tab(tabview, "Tab 3");
177 
178     /*avoid compiler error: unused variable*/
179     LV_UNUSED(tab1);
180     LV_UNUSED(tab2);
181     LV_UNUSED(tab3);
182 
183     /*rename 2nd tab (0-based index)*/
184     lv_tabview_rename_tab(tabview, 1, "2nd Tab");
185 
186     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_08.png");
187 }
188 
test_tabview_add_several_tabs_hor(void)189 void test_tabview_add_several_tabs_hor(void)
190 {
191     tabview = lv_tabview_create(active_screen);
192     lv_tabview_set_tab_bar_position(tabview, LV_DIR_TOP);
193     lv_tabview_set_tab_bar_size(tabview, 50);
194 
195     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
196     lv_obj_t * tab2 = lv_tabview_add_tab(tabview, "Tab 2");
197     lv_obj_t * tab3 = lv_tabview_add_tab(tabview, "Tab 3");
198 
199     lv_obj_t * label1 = lv_label_create(tab1);
200     lv_label_set_text(label1, "Content of the first tab\n");
201 
202     /*avoid compiler error: unused variable*/
203     LV_UNUSED(tab2);
204     LV_UNUSED(tab3);
205 
206     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_09.png");
207 }
208 
test_tabview_get_content(void)209 void test_tabview_get_content(void)
210 {
211     tabview = lv_tabview_create(active_screen);
212 
213     lv_obj_t * content = lv_tabview_get_content(tabview);
214 
215     TEST_ASSERT_NOT_NULL(content);
216 }
217 
test_tabview_get_tab_bar(void)218 void test_tabview_get_tab_bar(void)
219 {
220     tabview = lv_tabview_create(active_screen);
221 
222     lv_obj_t * tab_bar = lv_tabview_get_tab_bar(tabview);
223 
224     TEST_ASSERT_NOT_NULL(tab_bar);
225 }
226 
test_tabview_set_act_non_existent(void)227 void test_tabview_set_act_non_existent(void)
228 {
229     tabview = lv_tabview_create(active_screen);
230 
231     lv_tabview_set_active(tabview, 1, LV_ANIM_ON);
232 
233     TEST_ASSERT_EQUAL_SCREENSHOT("widgets/tabview_10.png");
234 }
235 
test_tabview_tab2_selected_event(void)236 void test_tabview_tab2_selected_event(void)
237 {
238     tabview = lv_tabview_create(active_screen);
239     lv_tabview_set_tab_bar_position(tabview, LV_DIR_TOP);
240     lv_tabview_set_tab_bar_size(tabview, 50);
241 
242     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
243     lv_obj_t * tab2 = lv_tabview_add_tab(tabview, "Tab 2");
244 
245     /*avoid compiler error: unused variable*/
246     LV_UNUSED(tab1);
247     LV_UNUSED(tab2);
248 
249     lv_tabview_set_active(tabview, 1, LV_ANIM_OFF);
250 
251     TEST_ASSERT_EQUAL_UINT16(1, lv_tabview_get_tab_active(tabview));
252 }
253 
test_tabview_update_on_external_scroll(void)254 void test_tabview_update_on_external_scroll(void)
255 {
256     tabview = lv_tabview_create(active_screen);
257     lv_tabview_set_tab_bar_position(tabview, LV_DIR_TOP);
258     lv_tabview_set_tab_bar_size(tabview, 50);
259 
260     lv_obj_t * tab1 = lv_tabview_add_tab(tabview, "Tab 1");
261     lv_obj_t * tab2 = lv_tabview_add_tab(tabview, "Tab 2");
262     lv_obj_t * tab3 = lv_tabview_add_tab(tabview, "Tab 3");
263     lv_obj_t * tab4 = lv_tabview_add_tab(tabview, "Tab 4");
264 
265     /*avoid compiler error: unused variable*/
266     LV_UNUSED(tab1);
267     LV_UNUSED(tab2);
268     LV_UNUSED(tab4);
269 
270     lv_obj_t * cont = lv_obj_create(tab3);
271     lv_obj_set_size(cont, 200, 300);
272     lv_obj_set_pos(cont, 1000, 200);
273 
274     lv_obj_t * label1 = lv_label_create(cont);
275     lv_obj_set_pos(label1, 400, 400);
276     lv_label_set_text(label1, "Label1");
277 
278     lv_obj_t * label2 = lv_label_create(cont);
279     lv_obj_set_pos(label2, 600, 600);
280     lv_label_set_text(label1, "Label2");
281 
282     lv_obj_scroll_to_view_recursive(label1, LV_ANIM_OFF);
283 
284     TEST_ASSERT_TRUE(lv_obj_is_visible(label1));
285     TEST_ASSERT_FALSE(lv_obj_is_visible(label2));
286     TEST_ASSERT_EQUAL_UINT16(2, lv_tabview_get_tab_active(tabview));
287 }
288 
289 #endif
290