summaryrefslogtreecommitdiff
path: root/src/line_modification.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-05-22 13:58:56 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-05-22 13:58:56 +0100
commitdd25dcc36185a890194d09e4d0430567e76bf722 (patch)
treeb2d0ba706878bbd30b933d0dd5ecdb6a73f7df4e /src/line_modification.cc
parentc38a7f3ca4d63c7da94c48afa47006315deee244 (diff)
Move unit test functions in next to the code they are testing
Diffstat (limited to 'src/line_modification.cc')
-rw-r--r--src/line_modification.cc70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/line_modification.cc b/src/line_modification.cc
index 4e24e9c8..d9a89cef 100644
--- a/src/line_modification.cc
+++ b/src/line_modification.cc
@@ -1,6 +1,7 @@
#include "line_modification.hh"
#include "buffer.hh"
+#include "unit_tests.hh"
namespace Kakoune
{
@@ -95,4 +96,73 @@ Vector<LineModification> compute_line_modifications(const Buffer& buffer, size_t
return res;
}
+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);
+}
+
+UnitTest 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 });
+
+ 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 });
+ }
+ }
+
+ {
+ 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 });
+ }
+}};
+
}