void test_select_candidate_4_bytes_utf8() { ChewingContext *ctx; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); chewing_set_maxChiSymbolLen(ctx, 16); chewing_set_phraseChoiceRearward(ctx, 1); chewing_set_autoShiftCur(ctx, 1); type_keystroke_by_string(ctx, "2k62k6"); /* ㄉㄜˊ ㄉㄜˊ */ ok_preedit_buffer(ctx, "\xE5\xBE\x97\xE5\xBE\x97" /* 得得 */ ); type_keystroke_by_string(ctx, "<H>"); type_keystroke_by_string(ctx, "<D>8"); ok_preedit_buffer(ctx, "\xF0\xA2\x94\xA8\xE5\xBE\x97" /* 𢔨得 */ ); type_keystroke_by_string(ctx, "<D>8"); ok_preedit_buffer(ctx, "\xF0\xA2\x94\xA8\xF0\xA2\x94\xA8" /* 𢔨𢔨 */ ); chewing_delete(ctx); }
void test_select_candidate_in_middle_reaward() { ChewingContext *ctx; int ret; const char *cand; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); chewing_set_phraseChoiceRearward(ctx, 1); type_keystroke_by_string(ctx, "hk4g4u6<L><L>" /* 測試儀*/); ret = chewing_cand_open(ctx); ok(ret == 0, "chewing_cand_open return %d shall be %d", ret, 0); cand = chewing_cand_string_by_index_static(ctx, 0); ok(strcmp(cand, "\xE6\xB8\xAC\xE8\xA9\xA6") == 0, "first candidate `%s' shall be `%s'", cand, "\xE6\xB8\xAC\xE8\xA9\xA6" /* 測試 */); ret = chewing_cand_list_next(ctx); ok(ret == 0, "chewing_cand_list_next return %d shall be %d", ret, 0); cand = chewing_cand_string_by_index_static(ctx, 0); ok(strcmp(cand, "\xE5\xB8\x82") == 0, "first candidate `%s' shall be `%s'", cand, "\xE5\xB8\x82" /* 市 */); chewing_delete(ctx); }
void test_Space_selection_symbol() { const char CAND_1[] = "\xE2\x80\xA6" /* … */ ; const char CAND_2[] = "\xE9\x9B\x99\xE7\xB7\x9A\xE6\xA1\x86" /* 雙線框 */ ; ChewingContext *ctx; const char *const_buf; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); chewing_set_spaceAsSelection(ctx, 1); type_keystroke_by_string(ctx, "`"); chewing_cand_Enumerate(ctx); const_buf = chewing_cand_String_static(ctx); ok(strcmp(const_buf, CAND_1) == 0, "first candidate list head `%s' shall be `%s'", const_buf, CAND_1); type_keystroke_by_string(ctx, " "); chewing_cand_Enumerate(ctx); const_buf = chewing_cand_String_static(ctx); ok(strcmp(const_buf, CAND_2) == 0, "second candidate list head `%s' shall be `%s'", const_buf, CAND_2); /* rollover */ type_keystroke_by_string(ctx, " "); chewing_cand_Enumerate(ctx); const_buf = chewing_cand_String_static(ctx); ok(strcmp(const_buf, CAND_1) == 0, "first candidate list head `%s' shall be `%s'", const_buf, CAND_1); chewing_delete(ctx); }
void test_del_bopomofo_as_mode_switch() { ChewingContext *ctx; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); type_keystroke_by_string(ctx, "2k"); /* ㄉㄜ */ ok_bopomofo_buffer(ctx, "\xe3\x84\x89\xe3\x84\x9c" /* ㄉㄜ */ ); ok_preedit_buffer(ctx, ""); chewing_set_ChiEngMode(ctx, SYMBOL_MODE); ok_bopomofo_buffer(ctx, ""); ok_preedit_buffer(ctx, ""); chewing_set_ChiEngMode(ctx, CHINESE_MODE); type_keystroke_by_string(ctx, "ji"); /* ㄨㄛ */ ok_bopomofo_buffer(ctx, "\xe3\x84\xa8\xe3\x84\x9b" /* ㄨㄛ */ ); ok_preedit_buffer(ctx, ""); chewing_set_ChiEngMode(ctx, SYMBOL_MODE); ok_bopomofo_buffer(ctx, ""); ok_preedit_buffer(ctx, ""); chewing_delete(ctx); }
void test_Space_selection_word() { ChewingContext *ctx; char *buf; int len; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); chewing_set_spaceAsSelection(ctx, 1); type_keystroke_by_string(ctx, "hk4g4<H>" /* 測試 */ ); type_keystroke_by_string(ctx, " "); /* open candidate window */ chewing_cand_Enumerate(ctx); buf = chewing_cand_String(ctx); len = ueStrLen(buf); ok(len == 2, "candidate `%s' length `%d' shall be `%d'", buf, len, 2); chewing_free(buf); type_keystroke_by_string(ctx, " "); /* next candidate list */ chewing_cand_Enumerate(ctx); buf = chewing_cand_String(ctx); len = ueStrLen(buf); ok(len == 1, "candidate `%s' length `%d' shall be `%d'", buf, len, 1); chewing_free(buf); type_keystroke_by_string(ctx, " "); /* next page */ ok(chewing_cand_CurrentPage(ctx) == 1, "current page shall be 1"); chewing_delete(ctx); }
void test_libchewing_issue_108() { ChewingContext *ctx; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); type_keystroke_by_string(ctx, "yjo4cl3183<E>"); chewing_delete(ctx); }
void test_libchewing_data_issue_1() { const TestData DATA = { "e03y.3", "\xE8\xB6\x95\xE8\xB5\xB0" /* 趕走 */ }; ChewingContext *ctx; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); chewing_set_maxChiSymbolLen(ctx, 16); type_keystroke_by_string(ctx, DATA.token); ok_preedit_buffer(ctx, DATA.expected); chewing_delete(ctx); }
void test_select_candidate_rearward_start_with_symbol() { ChewingContext *ctx; int ret; char *buf; int len; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); chewing_set_phraseChoiceRearward(ctx, 1); type_keystroke_by_string(ctx, "`31hk4g4" /* ,測試 */ ); type_keystroke_by_string(ctx, "<EE><H><D>"); ret = chewing_cand_TotalChoice(ctx); ok(ret > 0, "chewing_cand_TotalChoice() returns `%d' shall greater than 0 at pos `%d'", ret, 0); chewing_cand_Enumerate(ctx); buf = chewing_cand_String(ctx); len = ueStrLen(buf); ok(len == 1, "candidate `%s' length `%d' shall be `%d' at pos `%d'", buf, len, 1, 0); chewing_free(buf); type_keystroke_by_string(ctx, "<EE><H><R><D>"); ret = chewing_cand_TotalChoice(ctx); ok(ret > 0, "chewing_cand_TotalChoice() returns `%d' shall greater than 0 at pos `%d'", ret, 1); chewing_cand_Enumerate(ctx); buf = chewing_cand_String(ctx); len = ueStrLen(buf); ok(len == 1, "candidate `%s' length `%d' shall be `%d' at pos `%d'", buf, len, 1, 1); chewing_free(buf); type_keystroke_by_string(ctx, "<EE><H><R><R><D>"); ret = chewing_cand_TotalChoice(ctx); ok(ret > 0, "chewing_cand_TotalChoice() returns `%d' shall greater than 0 at pos `%d'", ret, 2); chewing_cand_Enumerate(ctx); buf = chewing_cand_String(ctx); len = ueStrLen(buf); ok(len == 2, "candidate `%s' length `%d' shall be `%d' at pos `%d'", buf, len, 2, 2); chewing_free(buf); chewing_delete(ctx); }
void test_select_candidate_rearward() { /* * The following phrases are in dict * 一上來 * 上來 * 移上來 * 移上 */ static const char *CAND_1[] = { "\xE4\xB8\x80\xE4\xB8\x8A\xE4\xBE\x86" /* 一上來 */ , "\xE7\xA7\xBB\xE4\xB8\x8A\xE4\xBE\x86" /* 移上來 */ , }; static const char *CAND_2[] = { "\xE4\xB8\x8A\xE4\xBE\x86" /* 上來 */ , }; ChewingContext *ctx; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); chewing_set_maxChiSymbolLen(ctx, 16); chewing_set_phraseChoiceRearward(ctx, 1); type_keystroke_by_string(ctx, "u6g;4x96"); /* ㄧˊㄕㄤˋㄌㄞˊ */ ok_preedit_buffer(ctx, CAND_1[0]); type_keystroke_by_string(ctx, "<D>"); /* ㄧˊㄕㄤˋㄌㄞˊ */ ok_candidate(ctx, CAND_1, ARRAY_SIZE(CAND_1)); type_keystroke_by_string(ctx, "<D>"); /* ㄕㄤˋㄌㄞˊ */ ok_candidate(ctx, CAND_2, ARRAY_SIZE(CAND_2)); type_keystroke_by_string(ctx, "<D><D>2<E>"); /* select 移上來 */ ok_commit_buffer(ctx, CAND_1[1]); chewing_delete(ctx); }
void test_libchewing_issue_30() { ChewingContext *ctx; int cursor; clean_userphrase(); ctx = chewing_new(); start_testcase(ctx, fd); chewing_set_maxChiSymbolLen(ctx, 16); chewing_set_autoShiftCur(ctx, 1); chewing_set_spaceAsSelection(ctx, 1); chewing_set_phraseChoiceRearward(ctx, 1); type_keystroke_by_string(ctx, "hk4g4<H> 3 1"); cursor = chewing_cursor_Current(ctx); ok(cursor == 2, "cursor position `%d' shall be `2'", cursor); chewing_delete(ctx); }