summaryrefslogtreecommitdiff
path: root/src/unit_tests.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/unit_tests.cc')
-rw-r--r--src/unit_tests.cc78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/unit_tests.cc b/src/unit_tests.cc
index 504c9246..ec9bb64c 100644
--- a/src/unit_tests.cc
+++ b/src/unit_tests.cc
@@ -3,6 +3,9 @@
#include "keys.hh"
#include "selectors.hh"
#include "word_db.hh"
+#include "line_modification.hh"
+
+#include <tuple>
using namespace Kakoune;
@@ -151,6 +154,80 @@ void test_keys()
kak_assert(keys == parsed_keys);
}
+bool operator==(const LineModification& lhs, const LineModification& rhs)
+{
+ return std::tie(lhs.old_line, lhs.new_line, lhs.num_removed, lhs.num_added) ==
+ std::tie(rhs.old_line, rhs.new_line, rhs.num_removed, rhs.num_added);
+}
+
+void test_line_modifications()
+{
+ {
+ Buffer buffer("test", Buffer::Flags::None, { "line 1\n"_ss, "line 2\n"_ss });
+ auto ts = buffer.timestamp();
+ buffer.erase(buffer.iterator_at({1, 0}), buffer.iterator_at({2, 0}));
+
+ auto modifs = compute_line_modifications(buffer, ts);
+ kak_assert(modifs.size() == 1 && modifs[0] == LineModification{ 1 COMMA 1 COMMA 1 COMMA 0 });
+ }
+
+ {
+ Buffer buffer("test", Buffer::Flags::None, { "line 1\n"_ss, "line 2\n"_ss });
+ auto ts = buffer.timestamp();
+ buffer.insert(buffer.iterator_at({1, 7}), "line 3");
+
+ auto modifs = compute_line_modifications(buffer, ts);
+ kak_assert(modifs.size() == 1 && modifs[0] == LineModification{ 2 COMMA 2 COMMA 0 COMMA 1 });
+ }
+
+ {
+ Buffer buffer("test", Buffer::Flags::None,
+ { "line 1\n"_ss, "line 2\n"_ss, "line 3\n"_ss });
+
+ auto ts = buffer.timestamp();
+ buffer.insert(buffer.iterator_at({1, 4}), "hoho\nhehe");
+ buffer.erase(buffer.iterator_at({0, 0}), buffer.iterator_at({1, 0}));
+
+ auto modifs = compute_line_modifications(buffer, ts);
+ kak_assert(modifs.size() == 1 && modifs[0] == LineModification{ 0 COMMA 0 COMMA 2 COMMA 2 });
+ }
+
+ {
+ Buffer buffer("test", Buffer::Flags::None,
+ { "line 1\n"_ss, "line 2\n"_ss, "line 3\n"_ss, "line 4\n"_ss });
+
+ WordDB word_db(buffer);
+ word_db.find_matching("", prefix_match);
+
+ auto ts = buffer.timestamp();
+ buffer.erase(buffer.iterator_at({0,0}), buffer.iterator_at({3,0}));
+ buffer.insert(buffer.iterator_at({1,0}), "newline 1\nnewline 2\nnewline 3\n");
+ buffer.erase(buffer.iterator_at({0,0}), buffer.iterator_at({1,0}));
+ {
+ auto modifs = compute_line_modifications(buffer, ts);
+ kak_assert(modifs.size() == 1 && modifs[0] == LineModification{ 0 COMMA 0 COMMA 4 COMMA 3 });
+ }
+ buffer.insert(buffer.iterator_at({3,0}), "newline 4\n");
+
+ {
+ auto modifs = compute_line_modifications(buffer, ts);
+ kak_assert(modifs.size() == 1 && modifs[0] == LineModification{ 0 COMMA 0 COMMA 4 COMMA 4 });
+ }
+
+ word_db.find_matching("", prefix_match);
+ }
+
+ {
+ Buffer buffer("test", Buffer::Flags::None, { "line 1\n"_ss });
+ auto ts = buffer.timestamp();
+ buffer.insert(buffer.iterator_at({0,0}), "n");
+ buffer.insert(buffer.iterator_at({0,1}), "e");
+ buffer.insert(buffer.iterator_at({0,2}), "w");
+ auto modifs = compute_line_modifications(buffer, ts);
+ kak_assert(modifs.size() == 1 && modifs[0] == LineModification{ 0 COMMA 0 COMMA 1 COMMA 1 });
+ }
+}
+
void run_unit_tests()
{
test_utf8();
@@ -159,4 +236,5 @@ void run_unit_tests()
test_buffer();
test_undo_group_optimizer();
test_word_db();
+ test_line_modifications();
}