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_switch.c (3426B)
1 #if LV_BUILD_TEST 2 #include "../lvgl.h" 3 4 #include "unity/unity.h" 5 6 #include "lv_test_helpers.h" 7 #include "lv_test_indev.h" 8 9 #define SWITCHES_CNT 10 10 11 uint8_t value_changed_event_cnt = 0; 12 lv_obj_t * scr = NULL; 13 lv_obj_t * sw = NULL; 14 15 void setUp(void) 16 { 17 /* Function run before every test */ 18 scr = lv_scr_act(); 19 sw = lv_switch_create(scr); 20 } 21 22 void tearDown(void) 23 { 24 /* Function run after every test */ 25 value_changed_event_cnt = 0; 26 } 27 28 static void mouse_click_on_switch(void) 29 { 30 lv_test_mouse_click_at(sw->coords.x1, sw->coords.y1); 31 } 32 33 static void event_handler(lv_event_t * e) 34 { 35 lv_event_code_t event = lv_event_get_code(e); 36 37 if(LV_EVENT_VALUE_CHANGED == event) { 38 value_changed_event_cnt++; 39 } 40 41 } 42 43 void test_switch_should_have_default_state_after_being_created(void) 44 { 45 lv_state_t state = lv_obj_get_state(sw); 46 TEST_ASSERT_EQUAL(state, LV_STATE_DEFAULT); 47 } 48 49 void test_switch_should_not_leak_memory_after_deletion(void) 50 { 51 size_t idx = 0; 52 uint32_t initial_available_memory = 0; 53 uint32_t final_available_memory = 0; 54 lv_mem_monitor_t monitor; 55 lv_obj_t * switches[SWITCHES_CNT] = {NULL}; 56 57 lv_mem_monitor(&monitor); 58 initial_available_memory = monitor.free_size; 59 60 for(idx = 0; idx < SWITCHES_CNT; idx++) { 61 switches[idx] = lv_switch_create(scr); 62 } 63 64 for(idx = 0; idx < SWITCHES_CNT; idx++) { 65 lv_obj_del(switches[idx]); 66 } 67 68 lv_mem_monitor(&monitor); 69 final_available_memory = monitor.free_size; 70 71 LV_HEAP_CHECK(TEST_ASSERT_LESS_OR_EQUAL(initial_available_memory, final_available_memory)); 72 } 73 74 void test_switch_animation(void) 75 { 76 lv_switch_t * anim_sw = (lv_switch_t *) sw; 77 int32_t initial_anim_state = anim_sw->anim_state; 78 79 /* Trigger animation */ 80 mouse_click_on_switch(); 81 /* Wait some time */ 82 lv_test_indev_wait(50); 83 84 int32_t checked_anim_state = anim_sw->anim_state; 85 TEST_ASSERT_GREATER_THAN(initial_anim_state, checked_anim_state); 86 TEST_ASSERT(lv_obj_has_state(sw, LV_STATE_CHECKED)); 87 88 mouse_click_on_switch(); 89 lv_test_indev_wait(50); 90 91 TEST_ASSERT_LESS_THAN(checked_anim_state, anim_sw->anim_state); 92 TEST_ASSERT_FALSE(lv_obj_has_state(sw, LV_STATE_CHECKED)); 93 } 94 95 void test_switch_should_not_have_extra_draw_size_at_creation(void) 96 { 97 lv_coord_t extra_size = _lv_obj_get_ext_draw_size(sw); 98 99 TEST_ASSERT_EQUAL(0, extra_size); 100 } 101 102 void test_switch_should_update_extra_draw_size_after_editing_padding(void) 103 { 104 lv_coord_t pad = 6; 105 lv_coord_t actual = 0; 106 lv_coord_t expected = pad + _LV_SWITCH_KNOB_EXT_AREA_CORRECTION; 107 108 static lv_style_t style_knob; 109 lv_style_init(&style_knob); 110 lv_style_set_pad_all(&style_knob, pad); 111 112 lv_obj_remove_style_all(sw); 113 lv_obj_add_style(sw, &style_knob, LV_PART_KNOB); 114 lv_obj_center(sw); 115 116 /* Get extra draw size */ 117 actual = _lv_obj_get_ext_draw_size(sw); 118 119 TEST_ASSERT_EQUAL(expected, actual); 120 } 121 122 /* See #2330 for context */ 123 void test_switch_should_trigger_value_changed_event_only_once(void) 124 { 125 lv_obj_add_event_cb(sw, event_handler, LV_EVENT_ALL, NULL); 126 mouse_click_on_switch(); 127 128 TEST_ASSERT_EQUAL(1, value_changed_event_cnt); 129 } 130 131 /* See #2785 for context */ 132 void test_switch_should_state_change_when_event_bubbling_is_enabled(void) 133 { 134 lv_obj_add_flag(sw, LV_OBJ_FLAG_EVENT_BUBBLE); 135 mouse_click_on_switch(); 136 137 TEST_ASSERT(lv_obj_has_state(sw, LV_STATE_CHECKED)); 138 } 139 140 #endif