aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-02-08 15:32:04 +0100
committerMarc André Tanner <mat@brain-dump.org>2017-02-08 15:32:04 +0100
commitec726488105714ac6c55d910e2116785cc479e5b (patch)
treea321eb2a6142a46c698b0a17ad9c690dfd855621
parent6aaf3a336cdfae069bfd07103390a5378a8815a9 (diff)
downloadvis-ec726488105714ac6c55d910e2116785cc479e5b.tar.gz
vis-ec726488105714ac6c55d910e2116785cc479e5b.tar.xz
test/core: adjust mark related tests
-rw-r--r--core/text.c48
1 files changed, 28 insertions, 20 deletions
diff --git a/core/text.c b/core/text.c
index 51225dc..5a8c001 100644
--- a/core/text.c
+++ b/core/text.c
@@ -7,6 +7,7 @@
#include "tap.h"
#include "text.h"
#include "text-util.h"
+#include "util.h"
#ifndef BUFSIZ
#define BUFSIZ 1024
@@ -168,28 +169,35 @@ int main(int argc, char *argv[]) {
ok(text_mark_get(txt, text_mark_set(txt, -1)) == EPOS, "Mark invalid 1");
ok(text_mark_get(txt, text_mark_set(txt, text_size(txt)+1)) == EPOS, "Mark invalid 2");
- Mark bof = text_mark_set(txt, 0);
- ok(text_mark_get(txt, bof) == 0, "Mark at beginning of file");
- size_t pos = 3;
- Mark mof = text_mark_set(txt, pos);
- ok(text_mark_get(txt, mof) == pos, "Mark in the middle");
- Mark eof = text_mark_set(txt, text_size(txt));
- ok(text_mark_get(txt, eof) == text_size(txt), "Mark at end of file");
+
const char *chunk = "new content";
- size_t newpos = pos+strlen(chunk);
- ok(insert(txt, pos-1, chunk), "Insert before mark");
- ok(text_mark_get(txt, bof) == 0, "Mark at beginning adjusted 1");
- ok(text_mark_get(txt, mof) == newpos, "Mark in the middle adjusted 1");
- ok(text_mark_get(txt, eof) == text_size(txt), "Mark at end adjusted 1");
- ok(insert(txt, newpos+1, chunk), "Insert after mark");
- ok(text_mark_get(txt, bof) == 0, "Mark at beginning adjusted 2");
- ok(text_mark_get(txt, mof) == newpos, "Mark in the middle adjusted 2");
- ok(text_mark_get(txt, eof) == text_size(txt), "Mark at end adjusted 2");
+ const size_t delta = strlen(chunk);
+ size_t positions[] = { 0, 1, text_size(txt)/2, text_size(txt)-1 };
text_snapshot(txt);
- ok(text_delete(txt, newpos, 1), "Deleting mark");
- ok(text_mark_get(txt, mof) == EPOS, "Mark in the middle deleted");
- text_undo(txt);
- ok(text_mark_get(txt, mof) == newpos, "Mark restored");
+ for (size_t i = 0; i < LENGTH(positions); i++) {
+ size_t pos = positions[i];
+ size_t newpos = pos+delta;
+ Mark bof = text_mark_set(txt, 0);
+ ok(text_mark_get(txt, bof) == 0, "Mark at beginning of file");
+ Mark mof = text_mark_set(txt, pos);
+ ok(text_mark_get(txt, mof) == pos, "Mark in the middle");
+ Mark eof = text_mark_set(txt, text_size(txt));
+ ok(text_mark_get(txt, eof) == text_size(txt), "Mark at end of file");
+ ok(insert(txt, pos, chunk), "Insert before mark");
+ ok(text_mark_get(txt, bof) == ((pos == 0) ? delta : 0), "Mark at beginning adjusted 1");
+ ok(text_mark_get(txt, mof) == pos+delta, "Mark in the middle adjusted 1");
+ ok(text_mark_get(txt, eof) == text_size(txt), "Mark at end adjusted 1");
+ ok(insert(txt, pos+delta+1, chunk), "Insert after mark");
+ ok(text_mark_get(txt, bof) == ((pos == 0) ? delta : 0), "Mark at beginning adjusted 2");
+ ok(text_mark_get(txt, mof) == pos+delta, "Mark in the middle adjusted 2");
+ ok(text_mark_get(txt, eof) == text_size(txt), "Mark at end adjusted 2");
+ text_snapshot(txt);
+ ok(text_delete(txt, pos+delta, 1), "Deleting mark");
+ ok(text_mark_get(txt, mof) == EPOS, "Mark in the middle deleted");
+ text_undo(txt);
+ ok(text_mark_get(txt, mof) == pos+delta, "Mark restored");
+ text_undo(txt);
+ }
text_free(txt);
return exit_status();