EAPI Elm_Code_File *elm_code_file_open(Elm_Code *code, const char *path) { Elm_Code_File *ret; Eina_File *file; Eina_File_Line *line; Eina_Iterator *it; unsigned int lastindex; ret = elm_code_file_new(code); file = eina_file_open(path, EINA_FALSE); ret->file = file; ret->mime = efreet_mime_type_get(path); lastindex = 1; ret->map = eina_file_map_all(file, EINA_FILE_POPULATE); it = eina_file_map_lines(file); EINA_ITERATOR_FOREACH(it, line) { Elm_Code_Line *ecl; if (lastindex == 1) ret->line_ending = _elm_code_line_ending_get(line->start + line->length); /* Working around the issue that eina_file_map_lines does not trigger an item for empty lines */ /* This was fixed in 1.13.99 so once we depend on 1.14 minimum this can go */ while (lastindex < line->index - 1) { ecl = _elm_code_file_line_blank_create(ret, ++lastindex, NULL); if (!ecl) continue; ret->lines = eina_list_append(ret->lines, ecl); } _elm_code_file_line_insert_data(ret, line->start, line->length, lastindex = line->index, EINA_TRUE, NULL); }
END_TEST START_TEST (elm_code_test_widget_undo_delete_multiple) { Elm_Code *code; Elm_Code_File *file; Elm_Code_Line *line; Elm_Code_Widget *widget; Evas_Object *win; unsigned int length; const char *content; elm_init(1, NULL); code = elm_code_create(); file = elm_code_file_new(code); elm_code_file_line_append(file, "test", 4, NULL); win = elm_win_add(NULL, "entry", ELM_WIN_BASIC); widget = elm_code_widget_add(win, code); elm_code_widget_cursor_position_set(widget, 1, 4); _elm_code_widget_backspace(widget); _elm_code_widget_backspace(widget); line = elm_code_file_line_get(file, 1); content = elm_code_line_text_get(line, &length); ck_assert_strn_eq("tt", content, length); elm_code_widget_undo(widget); content = elm_code_line_text_get(line, &length); ck_assert_strn_eq("tet", content, length); elm_code_widget_undo(widget); content = elm_code_line_text_get(line, &length); ck_assert_strn_eq("test", content, length); elm_code_free(code); elm_shutdown(); }