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)9void 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()43void 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()81int main() { 82 test_basic(true); 83 test_basic(false); 84 test_utf8(); 85 return 0; 86 } 87