diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-01-31 23:50:24 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-01-31 23:50:24 +0000 |
| commit | 0b4ecef2d2cbef9f22d5fac5f50bbab96b9f9256 (patch) | |
| tree | 57146575bfd853bb4a9fa61b6fd22be6d9fc54a5 /src/unit_tests.cc | |
| parent | b4661e37d28dd14ff9e14175e5d2d40f8f19365b (diff) | |
Rewrite line modifications, hopefully with easier to comprehend code
Diffstat (limited to 'src/unit_tests.cc')
| -rw-r--r-- | src/unit_tests.cc | 78 |
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(); } |
