1 #if LV_BUILD_TEST
2 #include "../lvgl.h"
3 #include "../../lvgl_private.h"
4
5 #include "unity/unity.h"
6 #include <string.h>
7
8 static const char * long_text =
9 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras malesuada ultrices magna in rutrum.";
10 static const char * long_text_multiline =
11 "Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit.\nCras malesuada ultrices magna in rutrum.\n";
12 static const char * empty_text = "";
13
14 static lv_obj_t * active_screen = NULL;
15 static lv_obj_t * label;
16 static lv_obj_t * long_label;
17 static lv_obj_t * long_label_multiline;
18 static lv_obj_t * empty_label;
19
setUp(void)20 void setUp(void)
21 {
22 active_screen = lv_screen_active();
23 label = lv_label_create(active_screen);
24 long_label = lv_label_create(active_screen);
25 long_label_multiline = lv_label_create(active_screen);
26 empty_label = lv_label_create(active_screen);
27
28 lv_label_set_text(long_label, long_text);
29 lv_label_set_text(long_label_multiline, long_text_multiline);
30 lv_label_set_text(empty_label, empty_text);
31 }
32
tearDown(void)33 void tearDown(void)
34 {
35 lv_obj_clean(lv_screen_active());
36 }
37
test_label_creation(void)38 void test_label_creation(void)
39 {
40 TEST_ASSERT_EQUAL_STRING(lv_label_get_text(label), LV_LABEL_DEFAULT_TEXT);
41 TEST_ASSERT_EQUAL(lv_label_get_long_mode(label), LV_LABEL_LONG_MODE_WRAP);
42 }
43
test_label_set_text(void)44 void test_label_set_text(void)
45 {
46 const char * new_text = "Hello world";
47
48 /* Refresh with the current text. */
49 lv_label_set_text(label, NULL);
50 TEST_ASSERT_EQUAL_STRING(lv_label_get_text(label), LV_LABEL_DEFAULT_TEXT);
51
52 /* '\0' terminated character string to set new text. */
53 lv_label_set_text(label, new_text);
54 TEST_ASSERT_EQUAL_STRING(lv_label_get_text(label), new_text);
55 }
56
test_label_get_letter_pos_align_left(void)57 void test_label_get_letter_pos_align_left(void)
58 {
59 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_LEFT, LV_STYLE_STATE_CMP_SAME);
60 lv_point_t first_letter_point;
61 lv_point_t last_letter_point;
62 const lv_point_t expected_first_letter_point = {
63 .x = 0,
64 .y = 0
65 };
66 const lv_point_t expected_last_letter_point = {
67 .x = 29,
68 .y = 0
69 };
70
71 const uint32_t first_letter_idx = 0;
72 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label_multiline)) - 1; /* char index starts at 0 */
73
74 lv_label_get_letter_pos(label, first_letter_idx, &first_letter_point);
75
76 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
77 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
78
79 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
80
81 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
82 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
83 }
84
test_label_get_letter_pos_align_left_on_empty_text(void)85 void test_label_get_letter_pos_align_left_on_empty_text(void)
86 {
87 lv_obj_set_style_text_align(empty_label, LV_TEXT_ALIGN_LEFT, LV_STYLE_STATE_CMP_SAME);
88 lv_point_t first_letter_point;
89 lv_point_t last_letter_point;
90 const lv_point_t expected_first_letter_point = {
91 .x = 0,
92 .y = 0
93 };
94 const lv_point_t expected_last_letter_point = {
95 .x = 0,
96 .y = 0
97 };
98
99 const uint32_t first_letter_idx = 0;
100 const uint32_t last_letter_idx = strlen(lv_label_get_text(empty_label)) - 1;
101
102 lv_label_get_letter_pos(empty_label, first_letter_idx, &first_letter_point);
103
104 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
105 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
106
107 lv_label_get_letter_pos(empty_label, last_letter_idx, &last_letter_point);
108
109 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
110 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
111 }
112
test_label_long_text_multiline_get_letter_pos_align_left(void)113 void test_label_long_text_multiline_get_letter_pos_align_left(void)
114 {
115 lv_obj_set_style_text_align(long_label_multiline, LV_TEXT_ALIGN_LEFT, LV_STYLE_STATE_CMP_SAME);
116 lv_point_t first_letter_point;
117 lv_point_t last_letter_point;
118 lv_point_t last_letter_after_new_line_point;
119 const lv_point_t expected_first_letter_point = {
120 .x = 0,
121 .y = 0
122 };
123 const lv_point_t expected_last_letter_point = {
124 .x = 305,
125 .y = 32
126 };
127 const lv_point_t expected_last_letter_after_new_line_point = {
128 .x = 0,
129 .y = 48
130 };
131
132 const uint32_t first_letter_idx = 0;
133 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label_multiline)) - 1; /* char index starts at 0 */
134 const uint32_t last_letter_after_new_line = strlen(lv_label_get_text(long_label_multiline));
135
136 lv_label_get_letter_pos(long_label_multiline, first_letter_idx, &first_letter_point);
137
138 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
139 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
140
141 lv_label_get_letter_pos(long_label_multiline, last_letter_idx, &last_letter_point);
142
143 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
144 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
145
146 lv_label_get_letter_pos(long_label_multiline, last_letter_after_new_line, &last_letter_after_new_line_point);
147
148 TEST_ASSERT_EQUAL(expected_last_letter_after_new_line_point.x, last_letter_after_new_line_point.x);
149 TEST_ASSERT_EQUAL(expected_last_letter_after_new_line_point.y, last_letter_after_new_line_point.y);
150 }
151
test_label_long_text_get_letter_pos_align_left(void)152 void test_label_long_text_get_letter_pos_align_left(void)
153 {
154 lv_label_set_long_mode(long_label, LV_LABEL_LONG_MODE_WRAP);
155 lv_obj_set_width(long_label, 150);
156 lv_obj_set_height(long_label, 500);
157 lv_obj_set_style_text_align(long_label, LV_TEXT_ALIGN_LEFT, LV_STYLE_STATE_CMP_SAME);
158
159 lv_point_t first_letter_point;
160 lv_point_t last_letter_point;
161 const lv_point_t expected_first_letter_point = {
162 .x = 0,
163 .y = 0
164 };
165 const lv_point_t expected_last_letter_point = {
166 .x = 0,
167 .y = 1536
168 };
169
170 const uint32_t first_letter_idx = 0;
171 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label)) - 1; /* char index starts at 0 */
172
173 lv_label_get_letter_pos(long_label, first_letter_idx, &first_letter_point);
174
175 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
176 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
177
178 lv_label_get_letter_pos(long_label, last_letter_idx, &last_letter_point);
179
180 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
181 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
182 }
183
test_label_get_letter_pos_align_right(void)184 void test_label_get_letter_pos_align_right(void)
185 {
186 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_RIGHT, LV_STYLE_STATE_CMP_SAME);
187 lv_point_t first_letter_point;
188 lv_point_t last_letter_point;
189 const lv_point_t expected_first_letter_point = {
190 .x = -29,
191 .y = 0
192 };
193 const lv_point_t expected_last_letter_point = {
194 .x = 0,
195 .y = 0
196 };
197
198 const uint32_t first_letter_idx = 0;
199 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label_multiline)) - 1; /* char index starts at 0 */
200
201 lv_label_get_letter_pos(label, first_letter_idx, &first_letter_point);
202
203 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
204 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
205
206 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
207
208 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
209 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
210 }
211
test_label_get_letter_pos_align_right_on_empty_text(void)212 void test_label_get_letter_pos_align_right_on_empty_text(void)
213 {
214 lv_obj_set_style_text_align(empty_label, LV_TEXT_ALIGN_RIGHT, LV_STYLE_STATE_CMP_SAME);
215 lv_point_t first_letter_point;
216 lv_point_t last_letter_point;
217 const lv_point_t expected_first_letter_point = {
218 .x = 0,
219 .y = 0
220 };
221 const lv_point_t expected_last_letter_point = {
222 .x = 0,
223 .y = 0
224 };
225
226 const uint32_t first_letter_idx = 0;
227 const uint32_t last_letter_idx = strlen(lv_label_get_text(empty_label)) - 1;
228
229 lv_label_get_letter_pos(empty_label, first_letter_idx, &first_letter_point);
230
231 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
232 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
233
234 lv_label_get_letter_pos(empty_label, last_letter_idx, &last_letter_point);
235
236 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
237 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
238 }
239
test_label_long_text_multiline_get_letter_pos_align_right(void)240 void test_label_long_text_multiline_get_letter_pos_align_right(void)
241 {
242 lv_obj_set_style_text_align(long_label_multiline, LV_TEXT_ALIGN_RIGHT, LV_STYLE_STATE_CMP_SAME);
243 lv_point_t first_letter_point;
244 lv_point_t last_letter_point;
245 lv_point_t last_letter_after_new_line_point;
246 const lv_point_t expected_first_letter_point = {
247 .x = -205,
248 .y = 0
249 };
250 const lv_point_t expected_last_letter_point = {
251 .x = 0,
252 .y = 32
253 };
254 const lv_point_t expected_last_letter_after_new_line_point = {
255 .x = 0,
256 .y = 48
257 };
258
259 const uint32_t first_letter_idx = 0;
260 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label_multiline)) - 1; /* char index starts at 0 */
261 const uint32_t last_letter_after_new_line = strlen(lv_label_get_text(long_label_multiline));
262
263 lv_label_get_letter_pos(long_label_multiline, first_letter_idx, &first_letter_point);
264
265 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
266 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
267
268 lv_label_get_letter_pos(long_label_multiline, last_letter_idx, &last_letter_point);
269
270 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
271 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
272
273 lv_label_get_letter_pos(long_label_multiline, last_letter_after_new_line, &last_letter_after_new_line_point);
274
275 TEST_ASSERT_EQUAL(expected_last_letter_after_new_line_point.x, last_letter_after_new_line_point.x);
276 TEST_ASSERT_EQUAL(expected_last_letter_after_new_line_point.y, last_letter_after_new_line_point.y);
277 }
278
test_label_long_text_get_letter_pos_align_right(void)279 void test_label_long_text_get_letter_pos_align_right(void)
280 {
281 lv_label_set_long_mode(long_label, LV_LABEL_LONG_MODE_WRAP);
282 lv_obj_set_width(long_label, 150);
283 lv_obj_set_height(long_label, 500);
284 lv_obj_set_style_text_align(long_label, LV_TEXT_ALIGN_RIGHT, LV_STYLE_STATE_CMP_SAME);
285
286 lv_point_t first_letter_point;
287 lv_point_t last_letter_point;
288 const lv_point_t expected_first_letter_point = {
289 .x = -8,
290 .y = 0
291 };
292 const lv_point_t expected_last_letter_point = {
293 .x = -3,
294 .y = 1536
295 };
296
297 const uint32_t first_letter_idx = 0;
298 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label)) - 1; /* char index starts at 0 */
299
300 lv_label_get_letter_pos(long_label, first_letter_idx, &first_letter_point);
301
302 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
303 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
304
305 lv_label_get_letter_pos(long_label, last_letter_idx, &last_letter_point);
306
307 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
308 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
309 }
310
test_label_get_letter_pos_align_center(void)311 void test_label_get_letter_pos_align_center(void)
312 {
313 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER, LV_STYLE_STATE_CMP_SAME);
314 lv_point_t first_letter_point;
315 lv_point_t last_letter_point;
316 const lv_point_t expected_first_letter_point = {
317 .x = -14,
318 .y = 0
319 };
320 const lv_point_t expected_last_letter_point = {
321 .x = 15,
322 .y = 0
323 };
324
325 const uint32_t first_letter_idx = 0;
326 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label_multiline)) - 1; /* char index starts at 0 */
327
328 lv_label_get_letter_pos(label, first_letter_idx, &first_letter_point);
329
330 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
331 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
332
333 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
334
335 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
336 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
337 }
338
test_label_get_letter_pos_align_center_on_empty_text(void)339 void test_label_get_letter_pos_align_center_on_empty_text(void)
340 {
341 lv_obj_set_style_text_align(empty_label, LV_TEXT_ALIGN_CENTER, LV_STYLE_STATE_CMP_SAME);
342 lv_point_t first_letter_point;
343 lv_point_t last_letter_point;
344 const lv_point_t expected_first_letter_point = {
345 .x = 0,
346 .y = 0
347 };
348 const lv_point_t expected_last_letter_point = {
349 .x = 0,
350 .y = 0
351 };
352
353 const uint32_t first_letter_idx = 0;
354 const uint32_t last_letter_idx = strlen(lv_label_get_text(empty_label)) - 1;
355
356 lv_label_get_letter_pos(empty_label, first_letter_idx, &first_letter_point);
357
358 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
359 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
360
361 lv_label_get_letter_pos(empty_label, last_letter_idx, &last_letter_point);
362
363 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
364 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
365 }
366
test_label_long_text_multiline_get_letter_pos_align_center(void)367 void test_label_long_text_multiline_get_letter_pos_align_center(void)
368 {
369 lv_obj_set_style_text_align(long_label_multiline, LV_TEXT_ALIGN_CENTER, LV_STYLE_STATE_CMP_SAME);
370 lv_point_t first_letter_point;
371 lv_point_t last_letter_point;
372 lv_point_t last_letter_after_new_line_point;
373 const lv_point_t expected_first_letter_point = {
374 .x = -102,
375 .y = 0
376 };
377 const lv_point_t expected_last_letter_point = {
378 .x = 153,
379 .y = 32
380 };
381 const lv_point_t expected_last_letter_after_new_line_point = {
382 .x = 0,
383 .y = 48
384 };
385
386 const uint32_t first_letter_idx = 0;
387 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label_multiline)) - 1; /* char index starts at 0 */
388 const uint32_t last_letter_after_new_line = strlen(lv_label_get_text(long_label_multiline));
389
390 lv_label_get_letter_pos(long_label_multiline, first_letter_idx, &first_letter_point);
391
392 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
393 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
394
395 lv_label_get_letter_pos(long_label_multiline, last_letter_idx, &last_letter_point);
396
397 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
398 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
399
400 lv_label_get_letter_pos(long_label_multiline, last_letter_after_new_line, &last_letter_after_new_line_point);
401
402 TEST_ASSERT_EQUAL(expected_last_letter_after_new_line_point.x, last_letter_after_new_line_point.x);
403 TEST_ASSERT_EQUAL(expected_last_letter_after_new_line_point.y, last_letter_after_new_line_point.y);
404 }
405
test_label_long_text_get_letter_pos_align_center(void)406 void test_label_long_text_get_letter_pos_align_center(void)
407 {
408 lv_label_set_long_mode(long_label, LV_LABEL_LONG_MODE_WRAP);
409 lv_obj_set_width(long_label, 150);
410 lv_obj_set_height(long_label, 500);
411 lv_obj_set_style_text_align(long_label, LV_TEXT_ALIGN_CENTER, LV_STYLE_STATE_CMP_SAME);
412
413 lv_point_t first_letter_point;
414 lv_point_t last_letter_point;
415 const lv_point_t expected_first_letter_point = {
416 .x = -4,
417 .y = 0
418 };
419 const lv_point_t expected_last_letter_point = {
420 .x = -1,
421 .y = 1536
422 };
423
424 const uint32_t first_letter_idx = 0;
425 const uint32_t last_letter_idx = strlen(lv_label_get_text(long_label)) - 1; /* char index starts at 0 */
426
427 lv_label_get_letter_pos(long_label, first_letter_idx, &first_letter_point);
428
429 TEST_ASSERT_EQUAL(expected_first_letter_point.x, first_letter_point.x);
430 TEST_ASSERT_EQUAL(expected_first_letter_point.y, first_letter_point.y);
431
432 lv_label_get_letter_pos(long_label, last_letter_idx, &last_letter_point);
433
434 TEST_ASSERT_EQUAL(expected_last_letter_point.x, last_letter_point.x);
435 TEST_ASSERT_EQUAL(expected_last_letter_point.y, last_letter_point.y);
436 }
437
test_label_is_char_under_pos_align_left(void)438 void test_label_is_char_under_pos_align_left(void)
439 {
440 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_LEFT, LV_STYLE_STATE_CMP_SAME);
441 bool expected_result = true;
442 bool result = false;
443 lv_point_t last_letter_point;
444
445 /* Getting the last letter point */
446 const uint32_t last_letter_idx = strlen(lv_label_get_text(label)) - 1;
447 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
448
449 /* We should get true, since we know the last letter is in this coordinate */
450 result = lv_label_is_char_under_pos(label, &last_letter_point);
451 TEST_ASSERT_EQUAL(expected_result, result);
452
453 /* If we test a move away from the last letter then we should get false */
454 expected_result = false;
455 last_letter_point.x += 50;
456
457 result = lv_label_is_char_under_pos(label, &last_letter_point);
458 TEST_ASSERT_EQUAL(expected_result, result);
459 }
460
test_label_is_char_under_pos_align_right(void)461 void test_label_is_char_under_pos_align_right(void)
462 {
463 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_RIGHT, LV_STYLE_STATE_CMP_SAME);
464 bool expected_result = true;
465 bool result = false;
466 lv_point_t last_letter_point;
467
468 /* Getting the last letter point */
469 const uint32_t last_letter_idx = strlen(lv_label_get_text(label)) - 1;
470 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
471
472 /* We should get true, since we know the last letter is in this coordinate */
473 result = lv_label_is_char_under_pos(label, &last_letter_point);
474 TEST_ASSERT_EQUAL(expected_result, result);
475
476 /* If we test a move away from the last letter then we should get false */
477 expected_result = false;
478 last_letter_point.x -= 50;
479
480 result = lv_label_is_char_under_pos(label, &last_letter_point);
481 TEST_ASSERT_EQUAL(expected_result, result);
482 }
483
test_label_is_char_under_pos_align_center(void)484 void test_label_is_char_under_pos_align_center(void)
485 {
486 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER, LV_STYLE_STATE_CMP_SAME);
487 bool expected_result = true;
488 bool result = false;
489 lv_point_t last_letter_point;
490
491 /* Getting the last letter point */
492 const uint32_t last_letter_idx = strlen(lv_label_get_text(label)) - 1;
493 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
494
495 /* We should get true, since we know the last letter is in this coordinate */
496 result = lv_label_is_char_under_pos(label, &last_letter_point);
497 TEST_ASSERT_EQUAL(expected_result, result);
498
499 /* If we test a move away from the last letter then we should get false */
500 expected_result = false;
501 last_letter_point.x -= 50;
502
503 result = lv_label_is_char_under_pos(label, &last_letter_point);
504 TEST_ASSERT_EQUAL(expected_result, result);
505 }
506
test_label_cut_text(void)507 void test_label_cut_text(void)
508 {
509 const char * expected_text = "Te";
510 /* label has the default text which is "Text", let's remove "xt" from it */
511 lv_label_cut_text(label, 2, 2);
512
513 TEST_ASSERT_EQUAL_STRING(expected_text, lv_label_get_text(label));
514 }
515
test_label_get_letter_on_left(void)516 void test_label_get_letter_on_left(void)
517 {
518 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_LEFT, LV_STYLE_STATE_CMP_SAME);
519 lv_point_t last_letter_point;
520
521 const uint32_t last_letter_idx = strlen(lv_label_get_text(label)) - 1;
522 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
523
524 uint32_t letter_idx_result = lv_label_get_letter_on(label, &last_letter_point, true);
525
526 TEST_ASSERT_EQUAL(last_letter_idx, letter_idx_result);
527 }
528
test_label_get_letter_on_center(void)529 void test_label_get_letter_on_center(void)
530 {
531 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER, LV_STYLE_STATE_CMP_SAME);
532 lv_point_t last_letter_point;
533
534 const uint32_t last_letter_idx = strlen(lv_label_get_text(label)) - 1;
535 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
536
537 uint32_t letter_idx_result = lv_label_get_letter_on(label, &last_letter_point, true);
538
539 TEST_ASSERT_EQUAL(last_letter_idx, letter_idx_result);
540 }
541
test_label_get_letter_on_right(void)542 void test_label_get_letter_on_right(void)
543 {
544 lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_RIGHT, LV_STYLE_STATE_CMP_SAME);
545 lv_point_t last_letter_point;
546
547 const uint32_t last_letter_idx = strlen(lv_label_get_text(label)) - 1;
548 lv_label_get_letter_pos(label, last_letter_idx, &last_letter_point);
549
550 uint32_t letter_idx_result = lv_label_get_letter_on(label, &last_letter_point, true);
551
552 TEST_ASSERT_EQUAL(last_letter_idx, letter_idx_result);
553 }
554
test_label_text_selection(void)555 void test_label_text_selection(void)
556 {
557 const uint32_t selection_start = 0;
558 const uint32_t selection_end = strlen(lv_label_get_text(label)) - 1;
559
560 lv_label_set_text_selection_start(label, selection_start);
561 lv_label_set_text_selection_end(label, selection_end);
562
563 uint32_t start = lv_label_get_text_selection_start(label);
564 uint32_t end = lv_label_get_text_selection_end(label);
565
566 TEST_ASSERT_EQUAL(selection_start, start);
567 TEST_ASSERT_EQUAL(selection_end, end);
568 }
569
test_label_rtl_dot_long_mode(void)570 void test_label_rtl_dot_long_mode(void)
571 {
572 const char * message =
573 "מעבד, או בשמו המלא יחידת עיבוד מרכזית (באנגלית: CPU - Central Processing Unit).";
574
575 lv_obj_t * screen = lv_obj_create(lv_screen_active());
576 lv_obj_remove_style_all(screen);
577 lv_obj_set_size(screen, 800, 480);
578 lv_obj_center(screen);
579 lv_obj_set_style_bg_color(screen, lv_color_white(), 0);
580 lv_obj_set_style_bg_opa(screen, LV_OPA_100, 0);
581 lv_obj_set_style_pad_all(screen, 0, 0);
582
583 lv_obj_t * test_label = lv_label_create(screen);
584 lv_obj_set_style_text_font(test_label, &lv_font_dejavu_16_persian_hebrew, 0);
585 lv_label_set_long_mode(test_label, LV_LABEL_LONG_MODE_DOTS);
586 lv_obj_set_style_base_dir(test_label, LV_BASE_DIR_RTL, 0);
587 lv_obj_set_size(test_label, 300, lv_font_dejavu_16_persian_hebrew.line_height);
588 lv_label_set_text(test_label, message);
589 lv_obj_center(test_label);
590
591 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/label_rtl_dot_long_mode.png");
592 }
593
test_label_max_width(void)594 void test_label_max_width(void)
595 {
596 lv_obj_clean(lv_screen_active());
597
598 lv_obj_t * test_label1 = lv_label_create(lv_screen_active());
599 lv_label_set_text(test_label1, long_text);
600 lv_obj_set_width(test_label1, 600);
601 lv_obj_set_style_max_width(test_label1, 200, LV_PART_MAIN);
602 lv_obj_set_style_bg_color(test_label1, lv_palette_main(LV_PALETTE_GREY), LV_PART_MAIN);
603 lv_obj_set_style_bg_opa(test_label1, LV_OPA_100, LV_PART_MAIN);
604
605 lv_obj_t * test_label2 = lv_label_create(lv_screen_active());
606 lv_label_set_text(test_label2, long_text);
607 lv_obj_set_width(test_label2, 600);
608 lv_obj_set_height(test_label2, 50);
609 lv_obj_set_x(test_label2, 300);
610 lv_obj_set_style_max_width(test_label2, 200, LV_PART_MAIN);
611 lv_obj_set_style_bg_color(test_label2, lv_palette_main(LV_PALETTE_GREY), LV_PART_MAIN);
612 lv_obj_set_style_bg_opa(test_label2, LV_OPA_100, LV_PART_MAIN);
613 lv_label_set_long_mode(test_label2, LV_LABEL_LONG_MODE_DOTS);
614
615 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/label_max_width.png");
616 }
617
test_label_with_recolor_cmd(void)618 void test_label_with_recolor_cmd(void)
619 {
620 lv_obj_clean(lv_screen_active());
621
622 lv_obj_t * label_recolor = lv_label_create(lv_screen_active());
623 lv_label_set_text(label_recolor, "Write a #ff0000 red# word");
624 lv_label_set_recolor(label_recolor, true);
625
626 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/label_recolor.png");
627 }
628
scroll_next_step(lv_obj_t * label1,lv_obj_t * label2,const char * text1,const char * text2,uint32_t idx)629 static void scroll_next_step(lv_obj_t * label1, lv_obj_t * label2, const char * text1, const char * text2, uint32_t idx)
630 {
631 lv_label_set_text(label1, (idx % 2) == 0 ? text1 : text2);
632 lv_label_set_text(label2, (idx % 2) == 0 ? text1 : text2);
633 lv_test_wait(783); /*Use an odd delay*/
634
635 char buf[128];
636 lv_snprintf(buf, sizeof(buf), "widgets/label_scroll_%d.png", idx);
637 TEST_ASSERT_EQUAL_SCREENSHOT(buf);
638 }
639
test_label_scroll_mid_update(void)640 void test_label_scroll_mid_update(void)
641 {
642 lv_obj_clean(lv_screen_active());
643
644 const char * text1 = "This is a long text that we will update while scrolling";
645 const char * text2 = "THIS IS A LONG TEXT THAT WE WILL UPDATE WHILE SCROLLING";
646
647 lv_obj_t * label1 = lv_label_create(lv_screen_active());
648 lv_label_set_long_mode(label1, LV_LABEL_LONG_MODE_SCROLL);
649 lv_label_set_text(label1, text1),
650 lv_obj_set_width(label1, 150);
651 lv_obj_set_pos(label1, 10, 10);
652
653 lv_obj_t * label2 = lv_label_create(lv_screen_active());
654 lv_label_set_long_mode(label2, LV_LABEL_LONG_MODE_SCROLL_CIRCULAR);
655 lv_label_set_text(label2, text1),
656 lv_obj_set_width(label2, 150);
657 lv_obj_set_pos(label2, 10, 80);
658
659 uint32_t i;
660 for(i = 0; i < 15; i++) {
661 scroll_next_step(label1, label2, text1, text2, i);
662 }
663
664 }
665
666 #endif
667