#include "test_core.h" #include "ecex.h" #include #include #include #include void test_buffer_editing_and_undo(void) { buffer_t *buffer = buffer_new("edit", NULL, 0); assert(buffer); assert(buffer_insert(buffer, "hello") == 0); assert(buffer_insert_char(buffer, '\n') == 0); assert(buffer_insert(buffer, "world") == 0); assert(strcmp(buffer->data, "hello\nworld") == 0); assert(buffer->len == strlen("hello\nworld")); assert(buffer_line_count(buffer) == 2); buffer_set_point(buffer, 5); assert(buffer_insert(buffer, ",") == 0); assert(strcmp(buffer->data, "hello,\nworld") == 0); assert(buffer_undo(buffer) == 0); assert(strcmp(buffer->data, "hello\nworld") == 0); assert(buffer_redo(buffer) == 0); assert(strcmp(buffer->data, "hello,\nworld") == 0); buffer_free(buffer); } void test_buffer_selection_and_search(void) { buffer_t *buffer = buffer_new("select", NULL, 0); assert(buffer); assert(buffer_set_text(buffer, "alpha beta gamma beta") == 0); buffer_set_mark(buffer, 6); buffer_set_point(buffer, 10); assert(buffer_has_selection(buffer) == 1); size_t start = 0; size_t end = 0; buffer_selection_range(buffer, &start, &end); assert(start == 6); assert(end == 10); char *selection = buffer_substring(buffer, start, end); assert(selection); assert(strcmp(selection, "beta") == 0); free(selection); assert(buffer_replace_selection(buffer, "delta") == 0); assert(strcmp(buffer->data, "alpha delta gamma beta") == 0); size_t pos = 0; assert(buffer_search_forward(buffer, "gamma", 0, &pos) == 0); assert(pos == 12); assert(buffer_search_backward(buffer, "alpha", buffer->len, &pos) == 0); assert(pos == 0); assert(buffer_search_forward(buffer, "missing", 0, &pos) != 0); assert(buffer_undo(buffer) == 0); assert(strcmp(buffer->data, "alpha beta gamma beta") == 0); buffer_free(buffer); } void test_buffer_file_round_trip(void) { const char *path = "/tmp/ecex-test-core-buffer.txt"; remove(path); buffer_t *writer = buffer_new("writer", NULL, 0); assert(writer); assert(buffer_set_text(writer, "one\ntwo\n") == 0); assert(buffer_save_as(writer, path) == 0); assert(writer->modified == 0); buffer_free(writer); buffer_t *reader = buffer_new("reader", path, 0); assert(reader); assert(buffer_load_file(reader, path) == 0); assert(strcmp(reader->data, "one\ntwo\n") == 0); assert(reader->modified == 0); buffer_free(reader); remove(path); }