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_table.c (8300B)
1 #if LV_BUILD_TEST 2 #include "../lvgl.h" 3 4 #include "unity/unity.h" 5 6 static lv_obj_t * scr = NULL; 7 static lv_obj_t * table = NULL; 8 9 void setUp(void) 10 { 11 scr = lv_scr_act(); 12 table = lv_table_create(scr); 13 } 14 15 void tearDown(void) 16 { 17 lv_obj_clean(lv_scr_act()); 18 } 19 20 void test_table_should_return_assigned_cell_value(void) 21 { 22 uint16_t row = 0; 23 uint16_t column = 0; 24 const char * value = "LVGL"; 25 26 lv_table_set_cell_value(table, row, column, value); 27 28 TEST_ASSERT_EQUAL_STRING(value, lv_table_get_cell_value(table, row, column)); 29 } 30 31 void test_table_should_grow_columns_automatically_when_setting_formatted_cell_value(void) 32 { 33 /* Newly created tables have 1 column and 1 row */ 34 uint16_t original_column_count = lv_table_get_col_cnt(table); 35 TEST_ASSERT_EQUAL_UINT16(1, original_column_count); 36 37 /* Table currently only has a cell at 0,0 (row, colum) */ 38 lv_table_set_cell_value_fmt(table, 0, 1, "LVGL %s", "Rocks!"); 39 40 /* Table now should have cells at 0,0 and 0,1, so 2 columns */ 41 uint16_t expected_column_count = original_column_count + 1; 42 TEST_ASSERT_EQUAL_UINT16(expected_column_count, lv_table_get_col_cnt(table)); 43 } 44 45 void test_table_should_identify_cell_with_ctrl(void) 46 { 47 bool has_ctrl = false; 48 49 has_ctrl = lv_table_has_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 50 51 TEST_ASSERT_FALSE(has_ctrl); 52 53 lv_table_add_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 54 has_ctrl = lv_table_has_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 55 TEST_ASSERT_TRUE(has_ctrl); 56 } 57 58 void test_table_should_clear_selected_cell_ctrl(void) 59 { 60 bool has_ctrl = false; 61 62 lv_table_add_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 63 has_ctrl = lv_table_has_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 64 TEST_ASSERT_TRUE(has_ctrl); 65 66 lv_table_clear_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 67 has_ctrl = lv_table_has_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 68 TEST_ASSERT_FALSE(has_ctrl); 69 } 70 71 void test_table_should_keep_not_selected_cell_ctrl(void) 72 { 73 bool has_ctrl = false; 74 75 lv_table_add_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT | LV_TABLE_CELL_CTRL_TEXT_CROP); 76 77 lv_table_clear_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 78 has_ctrl = lv_table_has_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 79 TEST_ASSERT_FALSE(has_ctrl); 80 81 has_ctrl = lv_table_has_cell_ctrl(table, 0, 0, LV_TABLE_CELL_CTRL_TEXT_CROP); 82 TEST_ASSERT_TRUE(has_ctrl); 83 } 84 85 /* We're using a newly created table */ 86 void test_table_cell_value_should_return_empty_string_when_cell_is_empty(void) 87 { 88 TEST_ASSERT_EQUAL_STRING("", lv_table_get_cell_value(table, 0, 0)); 89 } 90 91 void test_table_row_height_should_increase_with_multiline_cell_value(void) 92 { 93 lv_table_t * table_ptr = (lv_table_t *) table; 94 const char * singleline_value = "LVGL"; 95 const char * multiline_value = "LVGL\nRocks"; 96 97 lv_table_set_cell_value(table, 0, 0, singleline_value); 98 lv_coord_t singleline_row_height = table_ptr->row_h[0]; 99 100 lv_table_set_cell_value(table, 0, 0, multiline_value); 101 lv_coord_t multiline_row_height = table_ptr->row_h[0]; 102 103 TEST_ASSERT_GREATER_THAN(singleline_row_height, multiline_row_height); 104 } 105 106 void test_table_should_wrap_long_texts(void) 107 { 108 lv_table_t * table_ptr = (lv_table_t *) table; 109 const char * long_text = "Testing automatic text wrap with a very long text"; 110 const char * small_text = "Hi"; 111 112 lv_table_set_col_width(table, 0, 50); 113 114 lv_table_set_cell_value(table, 0, 0, small_text); 115 lv_coord_t row_height = table_ptr->row_h[0]; 116 117 lv_table_set_cell_value(table, 0, 0, long_text); 118 lv_coord_t wrapped_row_height = table_ptr->row_h[0]; 119 120 /* Row height on cells with wrapped text is bigger than cells with small texts */ 121 TEST_ASSERT_GREATER_THAN(row_height, wrapped_row_height); 122 } 123 124 static void draw_part_event_cb(lv_event_t * e) 125 { 126 lv_obj_t * obj = lv_event_get_target(e); 127 lv_obj_draw_part_dsc_t * dsc = lv_event_get_param(e); 128 /*If the cells are drawn...*/ 129 if(dsc->part == LV_PART_ITEMS) { 130 uint32_t row = dsc->id / lv_table_get_col_cnt(obj); 131 uint32_t col = dsc->id - row * lv_table_get_col_cnt(obj); 132 133 /*Make the texts in the first cell center aligned*/ 134 if(row == 0) { 135 dsc->label_dsc->align = LV_TEXT_ALIGN_CENTER; 136 dsc->rect_dsc->bg_color = lv_color_mix(lv_palette_main(LV_PALETTE_BLUE), dsc->rect_dsc->bg_color, LV_OPA_40); 137 dsc->rect_dsc->bg_opa = LV_OPA_COVER; 138 } 139 /*In the first column align the texts to the right*/ 140 else if(col == 0) { 141 dsc->label_dsc->align = LV_TEXT_ALIGN_RIGHT; 142 } 143 144 /*Make every 2nd row grayish*/ 145 if(row != 0 && (row % 2 == 0)) { 146 dsc->rect_dsc->bg_color = lv_color_mix(lv_palette_main(LV_PALETTE_RED), dsc->rect_dsc->bg_color, LV_OPA_30); 147 dsc->rect_dsc->bg_opa = LV_OPA_COVER; 148 } 149 } 150 } 151 152 void test_table_rendering(void) 153 { 154 lv_obj_center(table); 155 lv_obj_add_event_cb(table, draw_part_event_cb, LV_EVENT_DRAW_PART_BEGIN, NULL); 156 lv_obj_set_style_border_side(table, LV_BORDER_SIDE_FULL, LV_PART_ITEMS); 157 lv_obj_set_style_pad_all(table, 10, LV_PART_ITEMS); 158 lv_obj_set_style_border_width(table, 5, LV_PART_ITEMS); 159 lv_table_set_col_cnt(table, 5); 160 lv_table_set_row_cnt(table, 5); 161 lv_table_set_col_width(table, 1, 60); 162 lv_table_set_col_width(table, 2, 100); 163 164 lv_table_add_cell_ctrl(table, 0, 1, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 165 lv_table_set_cell_value(table, 0, 1, "2 cells are merged"); 166 167 lv_table_add_cell_ctrl(table, 1, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 168 lv_table_add_cell_ctrl(table, 1, 1, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 169 lv_table_add_cell_ctrl(table, 1, 2, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 170 lv_table_add_cell_ctrl(table, 1, 3, LV_TABLE_CELL_CTRL_MERGE_RIGHT); 171 lv_table_set_cell_value(table, 1, 0, "5 cells are merged"); 172 173 uint32_t i; 174 for(i = 0; i < 5; i++) { 175 lv_table_set_cell_value_fmt(table, 3, i, "%d", i); 176 } 177 178 lv_table_set_cell_value_fmt(table, 2, 3, "Multi\nline text"); 179 lv_table_set_cell_value_fmt(table, 2, 4, "Very long text wrapped automatically"); 180 181 lv_table_add_cell_ctrl(table, 4, 3, LV_TABLE_CELL_CTRL_TEXT_CROP); 182 lv_table_set_cell_value_fmt(table, 4, 3, "crop crop crop crop crop crop crop crop "); 183 184 TEST_ASSERT_EQUAL_SCREENSHOT("table_1.png"); 185 } 186 187 /* See #3120 for context */ 188 void test_table_should_reduce_cells(void) 189 { 190 const uint16_t initial_col_num = 8; 191 const uint16_t initial_row_num = 1; 192 const uint16_t final_col_num = 4; 193 const uint16_t final_row_num = 1; 194 195 lv_obj_center(table); 196 197 lv_table_set_col_cnt(table, initial_col_num); 198 lv_table_set_row_cnt(table, initial_row_num); 199 200 uint32_t row_idx, col_idx; 201 for(row_idx = 0; row_idx < initial_row_num; row_idx++) { 202 for(col_idx = 0; col_idx < initial_col_num; col_idx++) { 203 lv_table_set_cell_value(table, row_idx, col_idx, "00"); 204 } 205 } 206 207 lv_table_set_col_cnt(table, final_col_num); 208 lv_table_set_row_cnt(table, final_row_num); 209 210 for(row_idx = 0; row_idx < final_row_num; row_idx++) { 211 for(col_idx = 0; col_idx < final_col_num; col_idx++) { 212 lv_table_set_cell_value(table, row_idx, col_idx, "00"); 213 } 214 } 215 } 216 217 /* See #3120 for context */ 218 void test_table_should_reduce_cells_with_more_than_one_row(void) 219 { 220 const uint16_t initial_col_num = 8; 221 const uint16_t initial_row_num = 2; 222 const uint16_t final_col_num = 4; 223 const uint16_t final_row_num = 1; 224 225 lv_obj_center(table); 226 227 lv_table_set_col_cnt(table, initial_col_num); 228 lv_table_set_row_cnt(table, initial_row_num); 229 230 uint32_t row_idx, col_idx; 231 for(row_idx = 0; row_idx < initial_row_num; row_idx++) { 232 for(col_idx = 0; col_idx < initial_col_num; col_idx++) { 233 lv_table_set_cell_value(table, row_idx, col_idx, "00"); 234 } 235 } 236 237 lv_table_set_col_cnt(table, final_col_num); 238 lv_table_set_row_cnt(table, final_row_num); 239 240 for(row_idx = 0; row_idx < final_row_num; row_idx++) { 241 for(col_idx = 0; col_idx < final_col_num; col_idx++) { 242 lv_table_set_cell_value(table, row_idx, col_idx, "00"); 243 } 244 } 245 } 246 247 #endif