From ec726488105714ac6c55d910e2116785cc479e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Wed, 8 Feb 2017 15:32:04 +0100 Subject: test/core: adjust mark related tests --- core/text.c | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) (limited to 'core') 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(); -- cgit v1.2.3