kakoune/src/unit_tests.cc

134 lines
4.0 KiB
C++
Raw Normal View History

2012-03-21 20:27:36 +01:00
#include "assert.hh"
2013-04-09 20:05:40 +02:00
#include "buffer.hh"
2012-04-01 17:39:53 +02:00
#include "editor.hh"
2013-01-30 19:16:36 +01:00
#include "keys.hh"
2013-04-09 20:05:40 +02:00
#include "selectors.hh"
2012-03-21 20:27:36 +01:00
using namespace Kakoune;
2012-04-01 17:39:53 +02:00
void test_buffer()
2012-03-21 20:27:36 +01:00
{
2012-11-28 20:10:49 +01:00
Buffer empty_buffer("empty", Buffer::Flags::None, {});
Buffer buffer("test", Buffer::Flags::None, { "allo ?\n", "mais que fais la police\n", " hein ?\n", " youpi\n" });
kak_assert(buffer.line_count() == 4);
2012-03-21 20:27:36 +01:00
BufferCoord pos = {0,0};
kak_assert(buffer.byte_at(pos) == 'a');
pos = buffer.advance(pos, 6);
kak_assert(pos == BufferCoord{0 COMMA 6});
pos = buffer.next(pos);
kak_assert(pos == BufferCoord{1 COMMA 0});
pos = buffer.prev(pos);
kak_assert(pos == BufferCoord{0 COMMA 6});
pos = buffer.advance(pos, 1);
kak_assert(pos == BufferCoord{1 COMMA 0});
buffer.insert(pos, "tchou kanaky\n");
kak_assert(buffer.line_count() == 5);
2012-03-21 20:27:36 +01:00
String str = buffer.string({ 4, 1 }, buffer.next({ 4, 5 }));
kak_assert(str == "youpi");
// check insert at end behaviour: auto add end of line if necessary
pos = buffer.back_coord();
buffer.insert(pos, "tchou");
kak_assert(buffer.string(pos, buffer.end_coord()) == "tchou\n");
pos = buffer.back_coord();
buffer.insert(buffer.end_coord(), "kanaky\n");
kak_assert(buffer.string(buffer.next(pos), buffer.end_coord()) == "kanaky\n");
2013-01-23 14:27:21 +01:00
buffer.commit_undo_group();
buffer.erase(buffer.next(pos), buffer.end_coord());
buffer.insert(buffer.end_coord(), "mutch\n");
buffer.commit_undo_group();
2013-01-23 14:27:21 +01:00
buffer.undo();
kak_assert(buffer.string(buffer.advance(buffer.end_coord(), -7), buffer.end_coord()) == "kanaky\n");
2013-01-31 18:59:23 +01:00
buffer.redo();
kak_assert(buffer.string(buffer.advance(buffer.end_coord(), -6), buffer.end_coord()) == "mutch\n");
2012-03-21 20:27:36 +01:00
}
2012-04-01 17:39:53 +02:00
void test_editor()
{
2013-06-01 14:22:57 +02:00
using namespace std::placeholders;
Buffer buffer("test", Buffer::Flags::None, { "test\n", "\n", "youpi\n" });
2012-04-01 17:39:53 +02:00
Editor editor(buffer);
{
2013-03-13 14:26:20 +01:00
scoped_edition edition{editor};
editor.select(select_whole_buffer);
2013-06-01 14:22:57 +02:00
editor.multi_select(std::bind(select_all_matches, _1, _2, Regex{"\\n\\h*"}));
2013-03-13 14:26:20 +01:00
for (auto& sel : editor.selections())
{
kak_assert(buffer.byte_at(sel.min()) == '\n');
erase(buffer, sel);
2013-03-13 14:26:20 +01:00
}
2012-04-01 17:39:53 +02:00
}
2013-03-13 14:26:20 +01:00
editor.undo();
Selection sel{ 2_line, buffer.back_coord() };
2013-03-13 14:26:20 +01:00
editor.select(sel, SelectMode::Replace);
editor.insert("",InsertMode::Replace);
kak_assert(not buffer.is_end(editor.main_selection().first()));
2012-04-01 17:39:53 +02:00
}
void test_incremental_inserter()
{
Buffer buffer("test", Buffer::Flags::None, { "test\n", "\n", "youpi\n", "matin\n" });
Editor editor(buffer);
editor.select({0,0});
{
IncrementalInserter inserter(editor, InsertMode::OpenLineAbove);
kak_assert(editor.is_editing());
kak_assert(editor.selections().size() == 1);
kak_assert(editor.selections().front().first() == BufferCoord{0 COMMA 0});
kak_assert(editor.selections().front().last() == BufferCoord{0 COMMA 0});
kak_assert(*buffer.begin() == L'\n');
}
kak_assert(not editor.is_editing());
}
2012-10-22 01:05:56 +02:00
void test_utf8()
{
String str = "maïs mélange bientôt";
kak_assert(utf8::distance(str.begin(), str.end()) == 20);
kak_assert(utf8::codepoint(str.begin() + 2) == 0x00EF);
2012-10-22 01:05:56 +02:00
}
void test_string()
{
kak_assert(String("youpi ") + "matin" == "youpi matin");
std::vector<String> splited = split("youpi:matin::tchou", ':');
kak_assert(splited[0] == "youpi");
kak_assert(splited[1] == "matin");
kak_assert(splited[2] == "");
kak_assert(splited[3] == "tchou");
}
2013-01-30 19:16:36 +01:00
void test_keys()
{
std::vector<Key> keys{
{ ' ' },
{ 'c' },
{ Key::Modifiers::Alt, 'j' },
{ Key::Modifiers::Control, 'r' }
};
String keys_as_str;
for (auto& key : keys)
keys_as_str += key_to_str(key);
auto parsed_keys = parse_keys(keys_as_str);
kak_assert(keys == parsed_keys);
2013-01-30 19:16:36 +01:00
}
2012-03-21 20:27:36 +01:00
void run_unit_tests()
{
2012-10-22 01:05:56 +02:00
test_utf8();
test_string();
2013-01-30 19:16:36 +01:00
test_keys();
2012-03-21 20:27:36 +01:00
test_buffer();
2012-04-01 17:39:53 +02:00
test_editor();
test_incremental_inserter();
2012-03-21 20:27:36 +01:00
}