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