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 static lv_obj_t * active_screen = NULL;
9 static lv_obj_t * slider = NULL;
10 static lv_obj_t * sliderRangeMode = NULL;
11 static lv_obj_t * sliderNormalMode = NULL;
12 static lv_obj_t * sliderSymmetricalMode = NULL;
13 static lv_group_t * g = NULL;
14
setUp(void)15 void setUp(void)
16 {
17 active_screen = lv_screen_active();
18 slider = lv_slider_create(active_screen);
19 sliderRangeMode = lv_slider_create(active_screen);
20 sliderNormalMode = lv_slider_create(active_screen);
21 sliderSymmetricalMode = lv_slider_create(active_screen);
22
23 lv_slider_set_mode(sliderRangeMode, LV_SLIDER_MODE_RANGE);
24 lv_slider_set_mode(sliderNormalMode, LV_SLIDER_MODE_NORMAL);
25 lv_slider_set_mode(sliderSymmetricalMode, LV_SLIDER_MODE_SYMMETRICAL);
26
27 g = lv_group_create();
28 lv_indev_set_group(lv_test_encoder_indev, g);
29 }
30
tearDown(void)31 void tearDown(void)
32 {
33 lv_obj_clean(active_screen);
34 }
35
test_textarea_should_have_valid_documented_default_values(void)36 void test_textarea_should_have_valid_documented_default_values(void)
37 {
38 int32_t objw = lv_obj_get_width(slider);
39 int32_t objh = lv_obj_get_height(slider);
40
41 /* Horizontal slider */
42 TEST_ASSERT_TRUE(objw >= objh);
43 TEST_ASSERT_FALSE(lv_obj_has_flag(slider, LV_OBJ_FLAG_SCROLL_CHAIN));
44 TEST_ASSERT_FALSE(lv_obj_has_flag(slider, LV_OBJ_FLAG_SCROLLABLE));
45 }
46
test_slider_event_keys_right_and_up_increment_value_by_one(void)47 void test_slider_event_keys_right_and_up_increment_value_by_one(void)
48 {
49 uint32_t key = LV_KEY_RIGHT;
50 lv_slider_set_value(slider, 10, LV_ANIM_OFF);
51 int32_t value = lv_slider_get_value(slider);
52
53 lv_obj_send_event(slider, LV_EVENT_KEY, (void *) &key);
54
55 int32_t new_value = lv_slider_get_value(slider);
56 TEST_ASSERT_EQUAL_INT32(value + 1, new_value);
57
58 key = LV_KEY_UP;
59 lv_obj_send_event(slider, LV_EVENT_KEY, (void *) &key);
60 TEST_ASSERT_EQUAL_INT32(new_value + 1, lv_slider_get_value(slider));
61 }
62
test_slider_event_keys_left_and_down_decrement_value_by_one(void)63 void test_slider_event_keys_left_and_down_decrement_value_by_one(void)
64 {
65 uint32_t key = LV_KEY_LEFT;
66 lv_slider_set_value(slider, 10, LV_ANIM_OFF);
67 int32_t value = lv_slider_get_value(slider);
68
69 lv_obj_send_event(slider, LV_EVENT_KEY, (void *) &key);
70
71 int32_t new_value = lv_slider_get_value(slider);
72 TEST_ASSERT_EQUAL_INT32(value - 1, new_value);
73
74 key = LV_KEY_DOWN;
75 lv_obj_send_event(slider, LV_EVENT_KEY, (void *) &key);
76 TEST_ASSERT_EQUAL_INT32(new_value - 1, lv_slider_get_value(slider));
77 }
78
test_slider_event_invalid_key_should_not_change_values(void)79 void test_slider_event_invalid_key_should_not_change_values(void)
80 {
81 uint32_t key = LV_KEY_ENTER;
82 lv_slider_set_value(slider, 10, LV_ANIM_OFF);
83 int32_t value = lv_slider_get_value(slider);
84
85 lv_obj_send_event(slider, LV_EVENT_KEY, (void *) &key);
86
87 TEST_ASSERT_EQUAL_INT32(value, lv_slider_get_value(slider));
88 }
89
test_slider_range_mode_should_leave_edit_mode_if_released(void)90 void test_slider_range_mode_should_leave_edit_mode_if_released(void)
91 {
92 lv_slider_t * ptr = (lv_slider_t *) sliderRangeMode;
93
94 /* Setup group and encoder indev */
95 lv_group_add_obj(g, sliderNormalMode);
96 lv_group_set_editing(g, true);
97
98 lv_test_encoder_click();
99
100 /* Always executed when handling LV_EVENT_RELEASED or
101 * LV_EVENT_PRESS_LOST */
102 TEST_ASSERT_FALSE(ptr->dragging);
103 TEST_ASSERT_NULL(ptr->value_to_set);
104 TEST_ASSERT_EQUAL(0U, ptr->left_knob_focus);
105
106 /* Group leaved edit mode */
107 TEST_ASSERT_FALSE(lv_group_get_editing(g));
108 }
109
test_slider_range_mode_should_not_leave_edit_mode_if_released_with_no_left_knob_focus(void)110 void test_slider_range_mode_should_not_leave_edit_mode_if_released_with_no_left_knob_focus(void)
111 {
112 lv_slider_t * ptr = (lv_slider_t *) sliderRangeMode;
113
114 /* Setup group and encoder indev */
115 lv_group_add_obj(g, sliderRangeMode);
116 lv_group_set_editing(g, true);
117
118 lv_test_encoder_release();
119 lv_test_indev_wait(50);
120
121 /* Always executed when handling LV_EVENT_RELEASED or
122 * LV_EVENT_PRESS_LOST */
123 TEST_ASSERT_FALSE(ptr->dragging);
124 TEST_ASSERT_NULL(ptr->value_to_set);
125
126 TEST_ASSERT(lv_group_get_editing(g));
127 }
128
test_slider_normal_mode_should_leave_edit_mode_if_released(void)129 void test_slider_normal_mode_should_leave_edit_mode_if_released(void)
130 {
131 lv_slider_t * ptr = (lv_slider_t *) sliderNormalMode;
132 ptr->left_knob_focus = 1;
133
134 /* Setup group and encoder indev */
135 lv_group_add_obj(g, sliderNormalMode);
136 lv_group_set_editing(g, true);
137
138 lv_test_encoder_click();
139
140 /* Always executed when handling LV_EVENT_RELEASED or
141 * LV_EVENT_PRESS_LOST */
142 TEST_ASSERT_FALSE(ptr->dragging);
143 TEST_ASSERT_NULL(ptr->value_to_set);
144 TEST_ASSERT_EQUAL(0U, ptr->left_knob_focus);
145
146 /* Group leaved edit mode */
147 TEST_ASSERT_FALSE(lv_group_get_editing(g));
148 }
149
test_ranged_mode_adjust_with_encoder(void)150 void test_ranged_mode_adjust_with_encoder(void)
151 {
152 lv_slider_set_value(sliderRangeMode, 90, LV_ANIM_OFF);
153 lv_slider_set_left_value(sliderRangeMode, 10, LV_ANIM_OFF);
154
155 /* Setup group and encoder indev */
156 lv_group_add_obj(g, sliderRangeMode);
157 lv_group_set_editing(g, false);
158
159 /*Go the edit mode*/
160 lv_test_encoder_click();
161
162 /*Adjust the right knob*/
163 lv_test_encoder_turn(-10);
164 TEST_ASSERT_EQUAL(80, lv_slider_get_value(sliderRangeMode)); /*Updated?*/
165 TEST_ASSERT_EQUAL(10, lv_slider_get_left_value(sliderRangeMode)); /*Maintained?*/
166
167 /*Focus the left knob*/
168 lv_test_encoder_click();
169
170 /*Adjust the left knob*/
171 lv_test_encoder_turn(5);
172 TEST_ASSERT_EQUAL(80, lv_slider_get_value(sliderRangeMode)); /*Maintained?*/
173 TEST_ASSERT_EQUAL(15, lv_slider_get_left_value(sliderRangeMode)); /*Updated?*/
174
175 }
176
test_normal_mode_slider_hit_test(void)177 void test_normal_mode_slider_hit_test(void)
178 {
179 /* Validate if point 0,0 can click in the slider */
180 lv_point_t point = {
181 .x = 0,
182 .y = 0
183 };
184
185 lv_hit_test_info_t info = {
186 .res = false,
187 .point = &point
188 };
189
190 lv_slider_set_value(sliderNormalMode, 100, LV_ANIM_OFF);
191 lv_obj_send_event(sliderNormalMode, LV_EVENT_HIT_TEST, (void *) &info);
192
193 /* point can click slider */
194 TEST_ASSERT(info.res);
195 }
196
test_slider_range_event_hit_test(void)197 void test_slider_range_event_hit_test(void)
198 {
199 /* Validate if point 0,0 can click in the slider */
200 lv_point_t point = {
201 .x = 0,
202 .y = 0
203 };
204
205 lv_hit_test_info_t info = {
206 .res = false,
207 .point = &point
208 };
209 lv_obj_send_event(sliderRangeMode, LV_EVENT_HIT_TEST, (void *) &info);
210
211 /* point can click slider in the left knob */
212 TEST_ASSERT(info.res);
213 }
214
test_slider_properties(void)215 void test_slider_properties(void)
216 {
217 #if LV_USE_OBJ_PROPERTY
218 lv_obj_t * obj = lv_slider_create(lv_screen_active());
219 lv_property_t prop = { };
220
221 prop.id = LV_PROPERTY_SLIDER_RANGE;
222 prop.arg1.num = 10;
223 prop.arg2.num = 100;
224 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
225 TEST_ASSERT_EQUAL_INT(lv_slider_get_min_value(obj), 10);
226 TEST_ASSERT_EQUAL_INT(lv_slider_get_max_value(obj), 100);
227 TEST_ASSERT_EQUAL_INT(10, lv_obj_get_property(obj, LV_PROPERTY_SLIDER_MIN_VALUE).num);
228 TEST_ASSERT_EQUAL_INT(100, lv_obj_get_property(obj, LV_PROPERTY_SLIDER_MAX_VALUE).num);
229
230 prop.id = LV_PROPERTY_SLIDER_VALUE;
231 prop.arg1.num = 50;
232 prop.arg2.enable = false;
233 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
234 TEST_ASSERT_EQUAL_INT(lv_slider_get_value(obj), 50);
235 TEST_ASSERT_EQUAL_INT(50, lv_obj_get_property(obj, LV_PROPERTY_SLIDER_VALUE).num);
236
237 prop.id = LV_PROPERTY_SLIDER_MODE;
238 prop.num = LV_SLIDER_MODE_RANGE;
239 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
240 TEST_ASSERT_EQUAL_INT(LV_SLIDER_MODE_RANGE, lv_obj_get_property(obj, LV_PROPERTY_SLIDER_MODE).num);
241
242 prop.id = LV_PROPERTY_SLIDER_LEFT_VALUE;
243 prop.arg1.num = 40;
244 prop.arg2.enable = false;
245 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
246 TEST_ASSERT_EQUAL_INT(40, lv_slider_get_left_value(obj));
247 TEST_ASSERT_EQUAL_INT(40, lv_obj_get_property(obj, LV_PROPERTY_SLIDER_LEFT_VALUE).num);
248
249 prop.id = LV_PROPERTY_SLIDER_IS_DRAGGED;
250 TEST_ASSERT_FALSE(lv_slider_is_dragged(obj));
251 TEST_ASSERT_FALSE(lv_obj_get_property(obj, LV_PROPERTY_SLIDER_IS_DRAGGED).enable);
252
253 prop.id = LV_PROPERTY_SLIDER_IS_SYMMETRICAL;
254 TEST_ASSERT_FALSE(lv_slider_is_dragged(obj));
255 TEST_ASSERT_FALSE(lv_obj_get_property(obj, LV_PROPERTY_SLIDER_IS_SYMMETRICAL).enable);
256
257 #endif
258 }
259
260
261 #endif
262