1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#include "test_core.h"
#include "ecex.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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);
}
|