summaryrefslogtreecommitdiff
path: root/src/unit_tests.cc
blob: 0793eedc5f4af8d9a60f4e4009753c39e01ddf83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "buffer.hh"
#include "assert.hh"
#include "editor.hh"
#include "selectors.hh"

using namespace Kakoune;

void test_buffer()
{
    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" });
    assert(buffer.line_count() == 4);

    BufferIterator i = buffer.begin();
    assert(*i == 'a');
    i += 6;
    assert(i.coord() == BufferCoord{0 COMMA 6});
    i += 1;
    assert(i.coord() == BufferCoord{1 COMMA 0});
    --i;
    assert(i.coord() == BufferCoord{0 COMMA 6});
    ++i;
    assert(i.coord() == BufferCoord{1 COMMA 0});
    buffer.insert(i, "tchou kanaky\n");
    assert(buffer.line_count() == 5);

    BufferIterator begin = buffer.iterator_at({ 4, 1 });
    BufferIterator end = buffer.iterator_at({ 4, 5 }) + 1;
    String str = buffer.string(begin, end);
    assert(str == "youpi");

    // check insert at end behaviour: auto add end of line if necessary
    begin = buffer.end() - 1;
    buffer.insert(buffer.end(), "tchou");
    assert(buffer.string(begin+1, buffer.end()) == "tchou\n");

    begin = buffer.end() - 1;
    buffer.insert(buffer.end(), "kanaky\n");
    assert(buffer.string(begin+1, buffer.end()) == "kanaky\n");
}

void test_editor()
{
    Buffer buffer("test", Buffer::Flags::None, { "test\n", "\n", "youpi\n" });
    Editor editor(buffer);

    using namespace std::placeholders;

    editor.select(select_whole_buffer);
    editor.multi_select(std::bind(select_all_matches, _1, "\\n\\h*"));
    for (auto& sel : editor.selections())
    {
        assert(*sel.begin() == '\n');
        editor.buffer().erase(sel.begin(), sel.end());
    }
}

void test_incremental_inserter()
{
    Buffer buffer("test", Buffer::Flags::None, { "test\n", "\n", "youpi\n", "matin\n" });
    Editor editor(buffer);

    editor.select(buffer.begin());
    {
        IncrementalInserter inserter(editor, InsertMode::OpenLineAbove);
        assert(editor.is_editing());
        assert(editor.selections().size() == 1);
        assert(editor.selections().front().first() == buffer.begin());
        assert(editor.selections().front().last() == buffer.begin());
        assert(*buffer.begin() == L'\n');
    }
    assert(not editor.is_editing());
}

void test_utf8()
{
    String str = "maïs mélange bientôt";
    assert(utf8::distance(str.begin(), str.end()) == 20);
    assert(utf8::codepoint(str.begin() + 2) == 0x00EF);
}

void test_string()
{
   assert(int_to_str(124)  == "124");
   assert(int_to_str(-129) == "-129");
   assert(int_to_str(0)    == "0");

   assert(String("youpi ") + "matin" == "youpi matin");

   std::vector<String> splited = split("youpi:matin::tchou", ':');
   assert(splited[0] == "youpi");
   assert(splited[1] == "matin");
   assert(splited[2] == "");
   assert(splited[3] == "tchou");
}

void run_unit_tests()
{
    test_utf8();
    test_string();
    test_buffer();
    test_editor();
    test_incremental_inserter();
}