1 /*
2  * SPDX-FileCopyrightText: 2017-2017 CSSlayer <wengxt@gmail.com>
3  *
4  * SPDX-License-Identifier: LGPL-2.1-or-later
5  */
6 #include "libime/core/inputbuffer.h"
7 #include <fcitx-utils/log.h>
8 
test_basic(bool ascii)9 void test_basic(bool ascii) {
10     using namespace libime;
11     InputBuffer buffer(ascii ? fcitx::InputBufferOption::AsciiOnly
12                              : fcitx::InputBufferOption::NoOption);
13     FCITX_ASSERT(buffer.empty());
14     FCITX_ASSERT(buffer.cursor() == 0);
15     FCITX_ASSERT(buffer.cursorByChar() == 0);
16     buffer.type('a');
17     FCITX_ASSERT(buffer.size() == 1);
18     FCITX_ASSERT(buffer.cursor() == 1);
19     buffer.type('b');
20     FCITX_ASSERT(buffer.size() == 2);
21     FCITX_ASSERT(buffer.cursor() == 2);
22     FCITX_ASSERT(buffer.userInput() == "ab");
23     buffer.setCursor(1);
24     buffer.type("cdefg");
25     FCITX_ASSERT(buffer.size() == 7);
26     FCITX_ASSERT(buffer.cursor() == 6);
27     FCITX_ASSERT(buffer.userInput() == "acdefgb");
28     buffer.erase(1, 3);
29     FCITX_ASSERT(buffer.size() == 5);
30     FCITX_ASSERT(buffer.cursor() == 4);
31     FCITX_ASSERT(buffer.userInput() == "aefgb");
32     FCITX_ASSERT(buffer[2] == "f");
33     buffer.erase(2, 5);
34     FCITX_ASSERT(buffer.size() == 2);
35     FCITX_ASSERT(buffer.cursor() == 2);
36     int idx = 0;
37     for (auto c : buffer) {
38         FCITX_ASSERT(c == buffer[idx]);
39         idx++;
40     }
41 }
42 
test_utf8()43 void test_utf8() {
44     using namespace libime;
45     InputBuffer buffer;
46     buffer.type("\xe4\xbd\xa0\xe5\xa5\xbd");
47     FCITX_ASSERT(buffer.size() == 2);
48     FCITX_ASSERT(buffer.cursor() == 2);
49     buffer.erase(1, 2);
50     FCITX_ASSERT(buffer.size() == 1);
51     FCITX_ASSERT(buffer.cursor() == 1);
52     FCITX_ASSERT(buffer.userInput() == "\xe4\xbd\xa0");
53     bool throwed = false;
54     try {
55         buffer.type("\xe4\xbd");
56     } catch (const std::invalid_argument &e) {
57         throwed = true;
58     }
59     FCITX_ASSERT(throwed);
60     int idx = 0;
61     for (auto c : buffer) {
62         FCITX_ASSERT(c == buffer[idx]);
63         idx++;
64     }
65     buffer.type("a\xe5\x95\x8a");
66     FCITX_ASSERT(buffer.size() == 3);
67     FCITX_ASSERT(buffer.cursor() == 3);
68     FCITX_ASSERT(buffer.cursorByChar() == 7);
69     buffer.setCursor(0);
70     FCITX_ASSERT(buffer.cursorByChar() == 0);
71     buffer.setCursor(1);
72     FCITX_ASSERT(buffer.cursorByChar() == 3);
73     buffer.setCursor(2);
74     FCITX_ASSERT(buffer.cursorByChar() == 4);
75     buffer.clear();
76     FCITX_ASSERT(buffer.cursorByChar() == 0);
77     FCITX_ASSERT(buffer.cursor() == 0);
78     FCITX_ASSERT(buffer.empty());
79 }
80 
main()81 int main() {
82     test_basic(true);
83     test_basic(false);
84     test_utf8();
85     return 0;
86 }
87