acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

test_slider.c (6144B)

      1 #if LV_BUILD_TEST
      2 #include "../lvgl.h"
      3 
      4 #include "unity/unity.h"
      5 #include "lv_test_indev.h"
      6 
      7 static lv_obj_t * active_screen = NULL;
      8 static lv_obj_t * slider = NULL;
      9 static lv_obj_t * sliderRangeMode = NULL;
     10 static lv_obj_t * sliderNormalMode = NULL;
     11 static lv_obj_t * sliderSymmetricalMode = NULL;
     12 static lv_group_t * g = NULL;
     13 
     14 void setUp(void)
     15 {
     16     active_screen = lv_scr_act();
     17     slider = lv_slider_create(active_screen);
     18     sliderRangeMode = lv_slider_create(active_screen);
     19     sliderNormalMode = lv_slider_create(active_screen);
     20     sliderSymmetricalMode = lv_slider_create(active_screen);
     21 
     22     lv_slider_set_mode(sliderRangeMode, LV_SLIDER_MODE_RANGE);
     23     lv_slider_set_mode(sliderNormalMode, LV_SLIDER_MODE_NORMAL);
     24     lv_slider_set_mode(sliderSymmetricalMode, LV_SLIDER_MODE_SYMMETRICAL);
     25 
     26     g = lv_group_create();
     27     lv_indev_set_group(lv_test_encoder_indev, g);
     28 }
     29 
     30 void tearDown(void)
     31 {
     32     lv_obj_clean(active_screen);
     33 }
     34 
     35 void test_textarea_should_have_valid_documented_default_values(void)
     36 {
     37     lv_coord_t objw = lv_obj_get_width(slider);
     38     lv_coord_t objh = lv_obj_get_height(slider);
     39 
     40     /* Horizontal slider */
     41     TEST_ASSERT_TRUE(objw >= objh);
     42     TEST_ASSERT_FALSE(lv_obj_has_flag(slider, LV_OBJ_FLAG_SCROLL_CHAIN));
     43     TEST_ASSERT_FALSE(lv_obj_has_flag(slider, LV_OBJ_FLAG_SCROLLABLE));
     44 }
     45 
     46 void test_slider_event_keys_right_and_up_increment_value_by_one(void)
     47 {
     48     char key = LV_KEY_RIGHT;
     49     lv_slider_set_value(slider, 10, LV_ANIM_OFF);
     50     int32_t value = lv_slider_get_value(slider);
     51 
     52     lv_event_send(slider, LV_EVENT_KEY, (void *) &key);
     53 
     54     int32_t new_value = lv_slider_get_value(slider);
     55     TEST_ASSERT_EQUAL_INT32(value + 1, new_value);
     56 
     57     key = LV_KEY_UP;
     58     lv_event_send(slider, LV_EVENT_KEY, (void *) &key);
     59     TEST_ASSERT_EQUAL_INT32(new_value + 1, lv_slider_get_value(slider));
     60 }
     61 
     62 void test_slider_event_keys_left_and_down_decrement_value_by_one(void)
     63 {
     64     char key = LV_KEY_LEFT;
     65     lv_slider_set_value(slider, 10, LV_ANIM_OFF);
     66     int32_t value = lv_slider_get_value(slider);
     67 
     68     lv_event_send(slider, LV_EVENT_KEY, (void *) &key);
     69 
     70     int32_t new_value = lv_slider_get_value(slider);
     71     TEST_ASSERT_EQUAL_INT32(value - 1, new_value);
     72 
     73     key = LV_KEY_DOWN;
     74     lv_event_send(slider, LV_EVENT_KEY, (void *) &key);
     75     TEST_ASSERT_EQUAL_INT32(new_value - 1, lv_slider_get_value(slider));
     76 }
     77 
     78 void test_slider_event_invalid_key_should_not_change_values(void)
     79 {
     80     char key = LV_KEY_ENTER;
     81     lv_slider_set_value(slider, 10, LV_ANIM_OFF);
     82     int32_t value = lv_slider_get_value(slider);
     83 
     84     lv_event_send(slider, LV_EVENT_KEY, (void *) &key);
     85 
     86     TEST_ASSERT_EQUAL_INT32(value, lv_slider_get_value(slider));
     87 }
     88 
     89 void test_slider_range_mode_should_leave_edit_mode_if_released(void)
     90 {
     91     lv_slider_t * ptr = (lv_slider_t *) sliderRangeMode;
     92 
     93     /* Setup group and encoder indev */
     94     lv_group_add_obj(g, sliderNormalMode);
     95     lv_group_set_editing(g, true);
     96 
     97     lv_test_encoder_click();
     98 
     99     /* Always executed when handling LV_EVENT_RELEASED or
    100      * LV_EVENT_PRESS_LOST */
    101     TEST_ASSERT_FALSE(ptr->dragging);
    102     TEST_ASSERT_NULL(ptr->value_to_set);
    103     TEST_ASSERT_EQUAL(0U, ptr->left_knob_focus);
    104 
    105     /* Group leaved edit mode */
    106     TEST_ASSERT_FALSE(lv_group_get_editing(g));
    107 }
    108 
    109 void test_slider_range_mode_should_not_leave_edit_mode_if_released_with_no_left_knob_focus(void)
    110 {
    111     lv_slider_t * ptr = (lv_slider_t *) sliderRangeMode;
    112 
    113     /* Setup group and encoder indev */
    114     lv_group_add_obj(g, sliderRangeMode);
    115     lv_group_set_editing(g, true);
    116 
    117     lv_test_encoder_release();
    118     lv_test_indev_wait(50);
    119 
    120     /* Always executed when handling LV_EVENT_RELEASED or
    121      * LV_EVENT_PRESS_LOST */
    122     TEST_ASSERT_FALSE(ptr->dragging);
    123     TEST_ASSERT_NULL(ptr->value_to_set);
    124 
    125     TEST_ASSERT(lv_group_get_editing(g));
    126 }
    127 
    128 void test_slider_normal_mode_should_leave_edit_mode_if_released(void)
    129 {
    130     lv_slider_t * ptr = (lv_slider_t *) sliderNormalMode;
    131     ptr->left_knob_focus = 1;
    132 
    133     /* Setup group and encoder indev */
    134     lv_group_add_obj(g, sliderNormalMode);
    135     lv_group_set_editing(g, true);
    136 
    137     lv_test_encoder_click();
    138 
    139     /* Always executed when handling LV_EVENT_RELEASED or
    140      * LV_EVENT_PRESS_LOST */
    141     TEST_ASSERT_FALSE(ptr->dragging);
    142     TEST_ASSERT_NULL(ptr->value_to_set);
    143     TEST_ASSERT_EQUAL(0U, ptr->left_knob_focus);
    144 
    145     /* Group leaved edit mode */
    146     TEST_ASSERT_FALSE(lv_group_get_editing(g));
    147 }
    148 
    149 void test_ranged_mode_adjust_with_encoder(void)
    150 {
    151     lv_slider_set_value(sliderRangeMode, 90, LV_ANIM_OFF);
    152     lv_slider_set_left_value(sliderRangeMode, 10, LV_ANIM_OFF);
    153 
    154     /* Setup group and encoder indev */
    155     lv_group_add_obj(g, sliderRangeMode);
    156     lv_group_set_editing(g, false);
    157 
    158     /*Go the edit mode*/
    159     lv_test_encoder_click();
    160 
    161     /*Adjust the right knob*/
    162     lv_test_encoder_turn(-10);
    163     TEST_ASSERT_EQUAL(80, lv_slider_get_value(sliderRangeMode));  /*Updated?*/
    164     TEST_ASSERT_EQUAL(10, lv_slider_get_left_value(sliderRangeMode));     /*Maintained?*/
    165 
    166     /*Focus the left knob*/
    167     lv_test_encoder_click();
    168 
    169     /*Adjust the left knob*/
    170     lv_test_encoder_turn(5);
    171     TEST_ASSERT_EQUAL(80, lv_slider_get_value(sliderRangeMode));  /*Maintained?*/
    172     TEST_ASSERT_EQUAL(15, lv_slider_get_left_value(sliderRangeMode));  /*Updated?*/
    173 
    174 }
    175 
    176 void test_normal_mode_slider_hit_test(void)
    177 {
    178     /* Validate if point 0,0 can click in the slider */
    179     lv_point_t point = {
    180         .x = 0,
    181         .y = 0
    182     };
    183 
    184     lv_hit_test_info_t info = {
    185         .res = false,
    186         .point = &point
    187     };
    188 
    189     lv_slider_set_value(sliderNormalMode, 100, LV_ANIM_OFF);
    190     lv_event_send(sliderNormalMode, LV_EVENT_HIT_TEST, (void *) &info);
    191 
    192     /* point can click slider */
    193     TEST_ASSERT(info.res);
    194 }
    195 
    196 void test_slider_range_event_hit_test(void)
    197 {
    198     /* Validate if point 0,0 can click in the slider */
    199     lv_point_t point = {
    200         .x = 0,
    201         .y = 0
    202     };
    203 
    204     lv_hit_test_info_t info = {
    205         .res = false,
    206         .point = &point
    207     };
    208     lv_event_send(sliderRangeMode, LV_EVENT_HIT_TEST, (void *) &info);
    209 
    210     /* point can click slider in the left knob */
    211     TEST_ASSERT(info.res);
    212 }
    213 
    214 #endif