1 #if LV_BUILD_TEST
2 #include "../lvgl.h"
3 #include "../../lvgl_private.h"
4
5 #include "unity/unity.h"
6
7 /* Function run before every test */
setUp(void)8 void setUp(void)
9 {
10 }
11
12 /* Function run after every test */
tearDown(void)13 void tearDown(void)
14 {
15 lv_obj_clean(lv_screen_active());
16 }
17
18 /* A simple horizontal scale */
test_scale_render_example_1(void)19 void test_scale_render_example_1(void)
20 {
21 lv_obj_t * scale = lv_scale_create(lv_screen_active());
22 lv_obj_set_size(scale, lv_pct(80), 100);
23 lv_scale_set_mode(scale, LV_SCALE_MODE_HORIZONTAL_BOTTOM);
24 lv_obj_center(scale);
25
26 lv_scale_set_label_show(scale, true);
27
28 lv_scale_set_total_tick_count(scale, 31);
29 lv_scale_set_major_tick_every(scale, 5);
30
31 lv_obj_set_style_length(scale, 5, LV_PART_ITEMS);
32 lv_obj_set_style_length(scale, 10, LV_PART_INDICATOR);
33 lv_scale_set_range(scale, 10, 40);
34
35 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/scale_1.png");
36 }
37
38 /* An vertical scale and a horizontal scale with section and custom styling */
test_scale_render_example_2(void)39 void test_scale_render_example_2(void)
40 {
41 static lv_style_t indicator_style;
42 lv_style_init(&indicator_style);
43
44 /* Label style properties */
45 lv_style_set_text_font(&indicator_style, &lv_font_montserrat_14);
46 lv_style_set_text_color(&indicator_style, lv_palette_darken(LV_PALETTE_BLUE, 3));
47
48 /* Major tick properties */
49 lv_style_set_line_color(&indicator_style, lv_palette_darken(LV_PALETTE_BLUE, 3));
50 lv_style_set_width(&indicator_style, 10U); /*Tick length*/
51 lv_style_set_line_width(&indicator_style, 2U); /*Tick width*/
52
53 static lv_style_t minor_ticks_style;
54 lv_style_init(&minor_ticks_style);
55 lv_style_set_line_color(&minor_ticks_style, lv_palette_lighten(LV_PALETTE_BLUE, 2));
56 lv_style_set_width(&minor_ticks_style, 5U); /*Tick length*/
57 lv_style_set_line_width(&minor_ticks_style, 2U); /*Tick width*/
58
59 static lv_style_t main_line_style;
60 lv_style_init(&main_line_style);
61 /* Main line properties */
62 lv_style_set_line_color(&main_line_style, lv_palette_darken(LV_PALETTE_BLUE, 3));
63 lv_style_set_line_width(&main_line_style, 2U); // Tick width
64
65 static lv_style_t section_label_style;
66 static lv_style_t section_minor_tick_style;
67 static lv_style_t section_main_line_style;
68
69 lv_style_init(§ion_label_style);
70 lv_style_init(§ion_minor_tick_style);
71 lv_style_init(§ion_main_line_style);
72
73 /* Label style properties */
74 lv_style_set_text_font(§ion_label_style, &lv_font_montserrat_14);
75 lv_style_set_text_color(§ion_label_style, lv_palette_darken(LV_PALETTE_RED, 3));
76
77 lv_style_set_line_color(§ion_label_style, lv_palette_darken(LV_PALETTE_RED, 3));
78 lv_style_set_line_width(§ion_label_style, 5U); /*Tick width*/
79
80 lv_style_set_line_color(§ion_minor_tick_style, lv_palette_lighten(LV_PALETTE_RED, 2));
81 lv_style_set_line_width(§ion_minor_tick_style, 4U); /*Tick width*/
82
83 /* Main line properties */
84 lv_style_set_line_color(§ion_main_line_style, lv_palette_darken(LV_PALETTE_RED, 3));
85 lv_style_set_line_width(§ion_main_line_style, 4U); /*Tick width*/
86
87 uint32_t i;
88 for(i = 0; i < 2; i++) {
89 lv_obj_t * scale = lv_scale_create(lv_screen_active());
90 lv_scale_set_label_show(scale, true);
91
92 if(i == 0) {
93 lv_obj_set_size(scale, 60, 200);
94 lv_scale_set_mode(scale, LV_SCALE_MODE_VERTICAL_RIGHT);
95 lv_obj_align(scale, LV_ALIGN_CENTER, -100, 0);
96
97 }
98 else {
99 lv_obj_set_size(scale, 200, 60);
100 lv_scale_set_mode(scale, LV_SCALE_MODE_HORIZONTAL_TOP);
101 lv_obj_align(scale, LV_ALIGN_CENTER, 100, 0);
102 }
103
104 lv_scale_set_total_tick_count(scale, 21);
105 lv_scale_set_major_tick_every(scale, 5);
106
107 lv_obj_set_style_length(scale, 5, LV_PART_ITEMS);
108 lv_obj_set_style_length(scale, 10, LV_PART_INDICATOR);
109 lv_scale_set_range(scale, 0, 100);
110
111 static const char * custom_labels[] = {"0 °C", "25 °C", "50 °C", "75 °C", "100 °C", NULL};
112 lv_scale_set_text_src(scale, custom_labels);
113 /* Configure scale styles */
114 lv_obj_add_style(scale, &indicator_style, LV_PART_INDICATOR);
115 lv_obj_add_style(scale, &minor_ticks_style, LV_PART_ITEMS);
116 lv_obj_add_style(scale, &main_line_style, LV_PART_MAIN);
117
118 lv_scale_section_t * section = lv_scale_add_section(scale);
119 /* Configure section styles */
120 lv_scale_section_set_range(section, 75, 100);
121 lv_scale_section_set_style(section, LV_PART_INDICATOR, §ion_label_style);
122 lv_scale_section_set_style(section, LV_PART_ITEMS, §ion_minor_tick_style);
123 lv_scale_section_set_style(section, LV_PART_MAIN, §ion_main_line_style);
124
125 lv_obj_set_style_bg_color(scale, lv_palette_main(LV_PALETTE_BLUE_GREY), 0);
126 lv_obj_set_style_bg_opa(scale, LV_OPA_50, 0);
127 lv_obj_set_style_radius(scale, 8, 0);
128
129 if(i == 0) {
130 lv_obj_set_style_pad_left(scale, 8, 0);
131 lv_obj_set_style_pad_ver(scale, 20, 0);
132
133 }
134 else {
135 lv_obj_set_style_pad_bottom(scale, 8, 0);
136 lv_obj_set_style_pad_hor(scale, 20, 0);
137 }
138 }
139
140 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/scale_2.png");
141 }
142
143 /* A simple round scale */
test_scale_render_example_3(void)144 void test_scale_render_example_3(void)
145 {
146 lv_obj_t * scale = lv_scale_create(lv_screen_active());
147 lv_obj_set_size(scale, 150, 150);
148 lv_scale_set_mode(scale, LV_SCALE_MODE_ROUND_INNER);
149 lv_obj_set_style_bg_opa(scale, LV_OPA_COVER, 0);
150 lv_obj_set_style_bg_color(scale, lv_palette_lighten(LV_PALETTE_RED, 5), 0);
151 lv_obj_set_style_radius(scale, LV_RADIUS_CIRCLE, 0);
152 lv_obj_center(scale);
153
154 lv_scale_set_label_show(scale, true);
155
156 lv_scale_set_total_tick_count(scale, 11);
157 lv_scale_set_major_tick_every(scale, 5);
158
159 lv_obj_set_style_length(scale, 5, LV_PART_ITEMS);
160 lv_obj_set_style_length(scale, 10, LV_PART_INDICATOR);
161 lv_scale_set_range(scale, 10, 40);
162
163 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/scale_3.png");
164 }
165
166 /* A round scale with section and custom styling */
test_scale_render_example_4(void)167 void test_scale_render_example_4(void)
168 {
169 lv_obj_t * scale = lv_scale_create(lv_screen_active());
170 lv_obj_set_size(scale, 150, 150);
171 lv_scale_set_label_show(scale, true);
172 lv_scale_set_mode(scale, LV_SCALE_MODE_ROUND_OUTER);
173 lv_obj_center(scale);
174
175 lv_scale_set_total_tick_count(scale, 21);
176 lv_scale_set_major_tick_every(scale, 5);
177
178 lv_obj_set_style_length(scale, 5, LV_PART_ITEMS);
179 lv_obj_set_style_length(scale, 10, LV_PART_INDICATOR);
180 lv_scale_set_range(scale, 0, 100);
181
182 static const char * custom_labels[] = {"0 °C", "25 °C", "50 °C", "75 °C", "100 °C", NULL};
183 lv_scale_set_text_src(scale, custom_labels);
184
185 static lv_style_t indicator_style;
186 lv_style_init(&indicator_style);
187
188 /* Label style properties */
189 lv_style_set_text_font(&indicator_style, &lv_font_montserrat_14);
190 lv_style_set_text_color(&indicator_style, lv_palette_darken(LV_PALETTE_BLUE, 3));
191
192 /* Major tick properties */
193 lv_style_set_line_color(&indicator_style, lv_palette_darken(LV_PALETTE_BLUE, 3));
194 lv_style_set_width(&indicator_style, 10U); /*Tick length*/
195 lv_style_set_line_width(&indicator_style, 2U); /*Tick width*/
196 lv_obj_add_style(scale, &indicator_style, LV_PART_INDICATOR);
197
198 static lv_style_t minor_ticks_style;
199 lv_style_init(&minor_ticks_style);
200 lv_style_set_line_color(&minor_ticks_style, lv_palette_lighten(LV_PALETTE_BLUE, 2));
201 lv_style_set_width(&minor_ticks_style, 5U); /*Tick length*/
202 lv_style_set_line_width(&minor_ticks_style, 2U); /*Tick width*/
203 lv_obj_add_style(scale, &minor_ticks_style, LV_PART_ITEMS);
204
205 static lv_style_t main_line_style;
206 lv_style_init(&main_line_style);
207 /* Main line properties */
208 lv_style_set_arc_color(&main_line_style, lv_palette_darken(LV_PALETTE_BLUE, 3));
209 lv_style_set_arc_width(&main_line_style, 2U); /*Tick width*/
210 lv_obj_add_style(scale, &main_line_style, LV_PART_MAIN);
211
212 /* Add a section */
213 static lv_style_t section_minor_tick_style;
214 static lv_style_t section_label_style;
215 static lv_style_t section_main_line_style;
216
217 lv_style_init(§ion_label_style);
218 lv_style_init(§ion_minor_tick_style);
219 lv_style_init(§ion_main_line_style);
220
221 /* Label style properties */
222 lv_style_set_text_font(§ion_label_style, &lv_font_montserrat_14);
223 lv_style_set_text_color(§ion_label_style, lv_palette_darken(LV_PALETTE_RED, 3));
224
225 lv_style_set_line_color(§ion_label_style, lv_palette_darken(LV_PALETTE_RED, 3));
226 lv_style_set_line_width(§ion_label_style, 5U); /*Tick width*/
227
228 lv_style_set_line_color(§ion_minor_tick_style, lv_palette_lighten(LV_PALETTE_RED, 2));
229 lv_style_set_line_width(§ion_minor_tick_style, 4U); /*Tick width*/
230
231 /* Main line properties */
232 lv_style_set_arc_color(§ion_main_line_style, lv_palette_darken(LV_PALETTE_RED, 3));
233 lv_style_set_arc_width(§ion_main_line_style, 4U); /*Tick width*/
234
235 /* Configure section styles */
236 lv_scale_section_t * section = lv_scale_add_section(scale);
237 lv_scale_section_set_range(section, 75, 100);
238 lv_scale_section_set_style(section, LV_PART_INDICATOR, §ion_label_style);
239 lv_scale_section_set_style(section, LV_PART_ITEMS, §ion_minor_tick_style);
240 lv_scale_section_set_style(section, LV_PART_MAIN, §ion_main_line_style);
241
242 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/scale_4.png");
243 }
244
draw_event_cb(lv_event_t * e)245 static void draw_event_cb(lv_event_t * e)
246 {
247 lv_obj_t * obj = lv_event_get_target(e);
248 lv_draw_task_t * draw_task = lv_event_get_draw_task(e);
249 lv_draw_dsc_base_t * base_dsc = lv_draw_task_get_draw_dsc(draw_task);
250 lv_draw_label_dsc_t * label_draw_dsc = lv_draw_task_get_label_dsc(draw_task);
251 if(base_dsc->part == LV_PART_INDICATOR) {
252 if(label_draw_dsc) {
253 const lv_color_t color_idx[7] = {
254 lv_palette_main(LV_PALETTE_RED),
255 lv_palette_main(LV_PALETTE_ORANGE),
256 lv_palette_main(LV_PALETTE_YELLOW),
257 lv_palette_main(LV_PALETTE_GREEN),
258 lv_palette_main(LV_PALETTE_CYAN),
259 lv_palette_main(LV_PALETTE_BLUE),
260 lv_palette_main(LV_PALETTE_PURPLE),
261 };
262 uint8_t major_tick = lv_scale_get_major_tick_every(obj);
263 label_draw_dsc->color = color_idx[base_dsc->id1 / major_tick];
264
265 /*Free the previously allocated text if needed*/
266 if(label_draw_dsc->text_local) lv_free((void *)label_draw_dsc->text);
267
268 /*Malloc the text and set text_local as 1 to make LVGL automatically free the text.
269 * (Local texts are malloc'd internally by LVGL. Mimic this behavior here too)*/
270 char tmp_buffer[20] = {0}; /* Big enough buffer */
271 lv_snprintf(tmp_buffer, sizeof(tmp_buffer), "%.1f", base_dsc->id2 * 1.0f);
272 label_draw_dsc->text = lv_strdup(tmp_buffer);
273 label_draw_dsc->text_local = 1;
274
275 lv_point_t size;
276 lv_text_get_size(&size, label_draw_dsc->text, label_draw_dsc->font, 0, 0, 1000, LV_TEXT_FLAG_NONE);
277 int32_t new_w = size.x;
278 int32_t old_w = lv_area_get_width(&draw_task->area);
279
280 /* Distribute the new size equally on both sides */
281 draw_task->area.x1 -= (new_w - old_w) / 2;
282 draw_task->area.x2 += ((new_w - old_w) + 1) / 2; /* +1 for rounding */
283
284 }
285 }
286 }
287
test_scale_render_example_7(void)288 void test_scale_render_example_7(void)
289 {
290 lv_obj_t * scale = lv_scale_create(lv_screen_active());
291 lv_obj_set_size(scale, lv_pct(80), 100);
292 lv_scale_set_mode(scale, LV_SCALE_MODE_HORIZONTAL_BOTTOM);
293 lv_obj_center(scale);
294
295 lv_scale_set_label_show(scale, true);
296
297 lv_scale_set_total_tick_count(scale, 31);
298 lv_scale_set_major_tick_every(scale, 5);
299
300 lv_obj_set_style_length(scale, 5, LV_PART_ITEMS);
301 lv_obj_set_style_length(scale, 10, LV_PART_INDICATOR);
302 lv_scale_set_range(scale, 10, 40);
303
304 lv_obj_add_event_cb(scale, draw_event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
305 lv_obj_add_flag(scale, LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
306
307 TEST_ASSERT_EQUAL_SCREENSHOT("widgets/scale_5.png");
308 }
309
test_scale_set_style(void)310 void test_scale_set_style(void)
311 {
312 lv_obj_t * scale = lv_scale_create(lv_screen_active());
313
314 static lv_style_t section_minor_tick_style;
315 static lv_style_t section_label_style;
316 static lv_style_t section_main_line_style;
317
318 lv_style_init(§ion_label_style);
319 lv_style_init(§ion_minor_tick_style);
320 lv_style_init(§ion_main_line_style);
321
322 /* Configure section styles */
323 lv_scale_section_t * section = lv_scale_add_section(scale);
324 lv_scale_section_set_range(section, 75, 100);
325
326 lv_scale_section_set_style(section, LV_PART_MAIN, §ion_main_line_style);
327 TEST_ASSERT_NOT_NULL(section->main_style);
328 TEST_ASSERT_NULL(section->indicator_style);
329 TEST_ASSERT_NULL(section->items_style);
330
331 TEST_ASSERT_EQUAL(section->main_style, §ion_main_line_style);
332
333 lv_scale_section_set_style(section, LV_PART_INDICATOR, §ion_label_style);
334 TEST_ASSERT_NOT_NULL(section->main_style);
335 TEST_ASSERT_NOT_NULL(section->indicator_style);
336 TEST_ASSERT_NULL(section->items_style);
337
338 TEST_ASSERT_EQUAL(section->main_style, §ion_main_line_style);
339 TEST_ASSERT_EQUAL(section->indicator_style, §ion_label_style);
340
341 lv_scale_section_set_style(section, LV_PART_ITEMS, §ion_minor_tick_style);
342 TEST_ASSERT_NOT_NULL(section->main_style);
343 TEST_ASSERT_NOT_NULL(section->indicator_style);
344 TEST_ASSERT_NOT_NULL(section->items_style);
345
346 TEST_ASSERT_EQUAL(section->main_style, §ion_main_line_style);
347 TEST_ASSERT_EQUAL(section->indicator_style, §ion_label_style);
348 TEST_ASSERT_EQUAL(section->items_style, §ion_minor_tick_style);
349
350 /* Invalid part */
351 lv_scale_section_set_style(section, LV_PART_CURSOR, §ion_minor_tick_style);
352 TEST_ASSERT_NOT_NULL(section->main_style);
353 TEST_ASSERT_NOT_NULL(section->indicator_style);
354 TEST_ASSERT_NOT_NULL(section->items_style);
355
356 TEST_ASSERT_EQUAL(section->main_style, §ion_main_line_style);
357 TEST_ASSERT_EQUAL(section->indicator_style, §ion_label_style);
358 TEST_ASSERT_EQUAL(section->items_style, §ion_minor_tick_style);
359
360 /* NULL section */
361 lv_scale_section_t * null_section = NULL;
362
363 lv_scale_section_set_range(null_section, 75, 100);
364 lv_scale_section_set_style(null_section, LV_PART_MAIN, §ion_main_line_style);
365 }
366
367 /* The scale internally counts the number of custom labels until it finds the NULL sentinel */
test_scale_custom_labels_count(void)368 void test_scale_custom_labels_count(void)
369 {
370 lv_obj_t * scale = lv_scale_create(lv_screen_active());
371 lv_scale_set_label_show(scale, true);
372
373 static const char * custom_labels[] = {"0 °C", "25 °C", "50 °C", "75 °C", "100 °C", NULL};
374 lv_scale_set_text_src(scale, custom_labels);
375
376 lv_scale_t * scale_widget = (lv_scale_t *)scale;
377
378 TEST_ASSERT_EQUAL(5U, scale_widget->custom_label_cnt);
379
380 static const char * animal_labels[] = {"cat", "dog", NULL};
381 lv_scale_set_text_src(scale, animal_labels);
382
383 TEST_ASSERT_EQUAL(2U, scale_widget->custom_label_cnt);
384 }
385
test_scale_mode(void)386 void test_scale_mode(void)
387 {
388 lv_obj_t * scale = lv_scale_create(lv_screen_active());
389
390 lv_scale_mode_t mode = LV_SCALE_MODE_ROUND_INNER;
391 lv_scale_set_mode(scale, mode);
392
393 TEST_ASSERT_EQUAL(mode, lv_scale_get_mode(scale));
394 }
395
test_scale_total_tick_count(void)396 void test_scale_total_tick_count(void)
397 {
398 lv_obj_t * scale = lv_scale_create(lv_screen_active());
399
400 uint32_t total_tick_count = 42;
401 lv_scale_set_total_tick_count(scale, total_tick_count);
402
403 TEST_ASSERT_EQUAL(total_tick_count, lv_scale_get_total_tick_count(scale));
404 }
405
test_scale_major_tick_every(void)406 void test_scale_major_tick_every(void)
407 {
408 lv_obj_t * scale = lv_scale_create(lv_screen_active());
409
410 uint32_t major_tick_every = 6;
411 lv_scale_set_major_tick_every(scale, major_tick_every);
412
413 TEST_ASSERT_EQUAL(major_tick_every, lv_scale_get_major_tick_every(scale));
414 }
415
test_scale_label_show(void)416 void test_scale_label_show(void)
417 {
418 lv_obj_t * scale = lv_scale_create(lv_screen_active());
419
420 bool label_show = true;
421 lv_scale_set_label_show(scale, label_show);
422
423 TEST_ASSERT_EQUAL(label_show, lv_scale_get_label_show(scale));
424
425 label_show = false;
426 lv_scale_set_label_show(scale, label_show);
427
428 TEST_ASSERT_EQUAL(label_show, lv_scale_get_label_show(scale));
429 }
430
test_scale_angle_range(void)431 void test_scale_angle_range(void)
432 {
433 lv_obj_t * scale = lv_scale_create(lv_screen_active());
434
435 uint32_t angle_range = 42;
436 lv_scale_set_angle_range(scale, angle_range);
437
438 TEST_ASSERT_EQUAL(angle_range, lv_scale_get_angle_range(scale));
439 }
440
test_scale_rotation(void)441 void test_scale_rotation(void)
442 {
443 lv_obj_t * scale = lv_scale_create(lv_screen_active());
444
445 lv_scale_set_rotation(scale, 135);
446 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 135);
447
448 lv_scale_set_rotation(scale, 375); /* 15 */
449 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 15);
450
451 lv_scale_set_rotation(scale, 540); /* 180 */
452 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 180);
453
454 lv_scale_set_rotation(scale, 1085); /* 5 */
455 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 5);
456
457 lv_scale_set_rotation(scale, -90); /* 270 */
458 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 270);
459
460 lv_scale_set_rotation(scale, -270); /* 90 */
461 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 90);
462
463 lv_scale_set_rotation(scale, -355); /* 5 */
464 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 5);
465
466 lv_scale_set_rotation(scale, -370); /* 350 */
467 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 350);
468
469 lv_scale_set_rotation(scale, -405); /* 315 */
470 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 315);
471
472 lv_scale_set_rotation(scale, -450); /* 270 */
473 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 270);
474
475 lv_scale_set_rotation(scale, -1075); /* 5 */
476 TEST_ASSERT_EQUAL(lv_scale_get_rotation(scale), 5);
477 }
478
test_scale_range(void)479 void test_scale_range(void)
480 {
481 lv_obj_t * scale = lv_scale_create(lv_screen_active());
482
483 int32_t min_range = 24;
484 int32_t max_range = 42;
485 lv_scale_set_range(scale, min_range, max_range);
486
487 TEST_ASSERT_EQUAL(min_range, lv_scale_get_range_min_value(scale));
488 TEST_ASSERT_EQUAL(max_range, lv_scale_get_range_max_value(scale));
489 }
490
test_scale_set_line_needle_value(void)491 void test_scale_set_line_needle_value(void)
492 {
493 lv_obj_t * scale = lv_scale_create(lv_screen_active());
494 lv_scale_set_mode(scale, LV_SCALE_MODE_ROUND_INNER);
495
496 lv_obj_t * line = lv_line_create(scale);
497
498 /* test the scale allocating the array */
499 lv_scale_set_line_needle_value(scale, line, 50, 35);
500 TEST_ASSERT_EQUAL_UINT32(2, lv_line_get_point_count(line));
501 const lv_point_precise_t * allocated_points_array = lv_line_get_points(line);
502 TEST_ASSERT_NOT_NULL(allocated_points_array);
503 TEST_ASSERT_TRUE(lv_line_is_point_array_mutable(line));
504 TEST_ASSERT_EQUAL_PTR(allocated_points_array, lv_line_get_points_mutable(line));
505
506 /* test the scale using the line's pre-set mutable array */
507 lv_point_precise_t provided_points_array[2] = {{-100, -100}, {-100, -100}};
508 lv_line_set_points_mutable(line, provided_points_array, 2);
509 lv_scale_set_line_needle_value(scale, line, 20, 20);
510 TEST_ASSERT(
511 provided_points_array[0].x != -100 || provided_points_array[0].y != -100
512 || provided_points_array[1].x != -100 || provided_points_array[1].y != -100
513 );
514 TEST_ASSERT_EQUAL_PTR(provided_points_array, lv_line_get_points_mutable(line));
515
516 provided_points_array[0].x = -100;
517 provided_points_array[0].y = -100;
518 provided_points_array[1].x = -100;
519 provided_points_array[1].y = -100;
520 /* set the line array to an immutable one. The scale will switch back to its allocated one */
521 lv_line_set_points(line, provided_points_array, 2); /* immutable setter */
522 lv_scale_set_line_needle_value(scale, line, 10, 30);
523 TEST_ASSERT_EQUAL_PTR(allocated_points_array, lv_line_get_points_mutable(line));
524 TEST_ASSERT(
525 provided_points_array[0].x == -100 && provided_points_array[0].y == -100
526 && provided_points_array[1].x == -100 && provided_points_array[1].y == -100
527 );
528 }
529
530 #endif
531