summaryrefslogtreecommitdiff
path: root/test/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test.c')
-rw-r--r--test/test.c158
1 files changed, 112 insertions, 46 deletions
diff --git a/test/test.c b/test/test.c
index 982e58b..def4e0a 100644
--- a/test/test.c
+++ b/test/test.c
@@ -7,6 +7,39 @@
#define countof(x) ((sizeof(x)) / (sizeof(x[0])))
+static HangulInputContext* global_ic = NULL;
+
+/* ic option을 바꾸면서 테스트하는걸 손쉽게 하기 위해서
+ * static ic를 하나 두고 이것으로 테스트를 진행하게 코드를
+ * 바꾼다. */
+static HangulInputContext*
+get_ic(const char* keyboard)
+{
+ if (global_ic == NULL) {
+ global_ic = hangul_ic_new("2");
+ }
+
+ hangul_ic_select_keyboard(global_ic, keyboard);
+ hangul_ic_reset(global_ic);
+
+ return global_ic;
+}
+
+static void
+set_ic_option(int option, bool value)
+{
+ HangulInputContext* ic = get_ic("2");
+ hangul_ic_set_option(ic, option, value);
+}
+
+static bool
+get_ic_option(int option)
+{
+ HangulInputContext* ic = get_ic("2");
+ bool value = hangul_ic_get_option(ic, option);
+ return value;
+}
+
static bool
check_preedit_with_ic(HangulInputContext* ic, const char* input, const wchar_t* output)
{
@@ -33,12 +66,10 @@ check_preedit(const char* keyboard, const char* input, const wchar_t* output)
HangulInputContext* ic;
int res;
- ic = hangul_ic_new(keyboard);
+ ic = get_ic(keyboard);
res = check_preedit_with_ic(ic, input, output);;
- hangul_ic_delete(ic);
-
return res;
}
@@ -68,12 +99,10 @@ check_commit(const char* keyboard, const char* input, const wchar_t* output)
HangulInputContext* ic;
int res;
- ic = hangul_ic_new(keyboard);
+ ic = get_ic(keyboard);
res = check_commit_with_ic(ic, input, output);
- hangul_ic_delete(ic);
-
return res;
}
@@ -82,9 +111,6 @@ START_TEST(test_hangul_ic_process_2)
/* ㄱㅏㅉ */
fail_unless(check_commit("2", "rkW", L"가"));
fail_unless(check_preedit("2", "rkW", L"ㅉ"));
- /* ㅂㅓㅅㅅㅡ */
- fail_unless(check_commit("2", "qjttm", L"벗"));
- fail_unless(check_preedit("2", "qjttm", L"스"));
/* ㅂㅓㅆㅡ */
fail_unless(check_commit("2", "qjTm", L"버"));
fail_unless(check_preedit("2", "qjTm", L"쓰"));
@@ -100,7 +126,6 @@ START_TEST(test_hangul_ic_process_2)
/* backspace */
fail_unless(check_preedit("2", "rkT\b", L"가"));
- fail_unless(check_preedit("2", "rktt\b", L"갓"));
fail_unless(check_preedit("2", "rt\bk", L"가"));
fail_unless(check_preedit("2", "akfr\b", L"말"));
fail_unless(check_preedit("2", "dnp\b", L"우"));
@@ -132,25 +157,42 @@ START_TEST(test_hangul_ic_process_2y)
fail_unless(check_preedit("2y", "fo", L"래"));
/* ㅎ. ㄴ */
fail_unless(check_preedit("2y", "gKs", L"\x1112\x119e\x11ab"));
- /* ㅂㅂㅇㅏㅁㅅㅅ */
+ /* ㅃㅇㅏㅁㅆ */
+ fail_unless(check_preedit("2y", "QdhaT", L"\x112c\x1169\x11de"));
+ /* ㅃㅇㅏㅁㅅㅅㅛ */
+ fail_unless(check_commit("2y", "Qdhatty", L"\x112c\x1169\x11dd"));
+ fail_unless(check_preedit("2y", "Qdhatty", L"쇼"));
+ /* ㅃㅇㅏㅁㅆㅛ */
+ fail_unless(check_commit("2y", "QdhaTy", L"\x112c\x1169\x11b7"));
+ fail_unless(check_preedit("2y", "QdhaTy", L"쑈"));
+ /* 옛이응 처리 */
+ /* ㄱㅏㆁㆁ */
+ fail_unless(check_preedit("2y", "rkDD", L"\x1100\x1161\x11ee"));
+ /* ㄱㅏㆁㆁㅏ */
+ fail_unless(check_commit("2y", "rkDDk", L"\x1100\x1161\x11f0"));
+ fail_unless(check_preedit("2y", "rkDDk", L"\x114c\x1161"));
+
+
+ bool val = get_ic_option(HANGUL_IC_OPTION_COMBI_ON_DOUBLE_STROKE);
+ set_ic_option(HANGUL_IC_OPTION_COMBI_ON_DOUBLE_STROKE, true);
+
+ /* ㅂㅂㅇㅏㅁㅅㅅ */
fail_unless(check_preedit("2y", "qqdhatt", L"\x112c\x1169\x11de"));
- /* ㅂㅂㅇㅏㅁㅅㅅㅛ */
+ /* ㅂㅂㅇㅏㅁㅅㅅㅛ */
fail_unless(check_commit("2y", "qqdhatty", L"\x112c\x1169\x11dd"));
fail_unless(check_preedit("2y", "qqdhatty", L"쇼"));
- /* ㅂㅂㅇㅏㅁㅆㅛ */
+ /* ㅂㅂㅇㅏㅁㅆㅛ */
fail_unless(check_commit("2y", "qqdhaTy", L"\x112c\x1169\x11b7"));
fail_unless(check_preedit("2y", "qqdhaTy", L"쑈"));
- /* 옛이응 처리 */
+
/* ㅇㅇㅏㅇㅇㅏ */
fail_unless(check_commit("2y", "ddkdd", L"\x1147\x1161\x11bc"));
fail_unless(check_preedit("2y", "ddkdd", L"ㅇ"));
- /* ㄱㅏㆁㆁ */
- fail_unless(check_preedit("2y", "rkDD", L"\x1100\x1161\x11ee"));
- /* ㄱㅏㆁㆁㅏ */
- fail_unless(check_commit("2y", "rkDDk", L"\x1100\x1161\x11f0"));
- fail_unless(check_preedit("2y", "rkDDk", L"\x114c\x1161"));
+
/* ㅏㅏㅏㅏ */
fail_unless(check_preedit("2y", "kkkk", L"\x115f\x11a2"));
+
+ set_ic_option(HANGUL_IC_OPTION_COMBI_ON_DOUBLE_STROKE, val);
}
END_TEST
@@ -293,39 +335,60 @@ END_TEST
START_TEST(test_hangul_ic_auto_reorder)
{
- HangulInputContext* ic = hangul_ic_new("2");
+ bool val = get_ic_option(HANGUL_IC_OPTION_AUTO_REORDER);
- hangul_ic_set_option(ic, HANGUL_IC_OPTION_AUTO_REORDER, true);
- hangul_ic_reset(ic);
- fail_unless(check_preedit_with_ic(ic, "rk", L"가"));
- hangul_ic_reset(ic);
- fail_unless(check_preedit_with_ic(ic, "kr", L"가"));
+ set_ic_option(HANGUL_IC_OPTION_AUTO_REORDER, true);
+ fail_unless(check_preedit("2", "rk", L"가"));
+ fail_unless(check_preedit("2", "kr", L"가"));
- hangul_ic_set_option(ic, HANGUL_IC_OPTION_AUTO_REORDER, false);
- hangul_ic_reset(ic);
- fail_unless(check_preedit_with_ic(ic, "rk", L"가"));
- hangul_ic_reset(ic);
- fail_unless(check_commit_with_ic(ic, "kr", L"ㅏ"));
- hangul_ic_reset(ic);
- fail_unless(check_preedit_with_ic(ic, "kr", L"ㄱ"));
+ set_ic_option(HANGUL_IC_OPTION_AUTO_REORDER, false);
+ fail_unless(check_preedit("2", "rk", L"가"));
+ fail_unless(check_commit("2", "kr", L"ㅏ"));
+ fail_unless(check_preedit("2", "kr", L"ㄱ"));
- hangul_ic_select_keyboard(ic, "3f");
+ set_ic_option(HANGUL_IC_OPTION_AUTO_REORDER, true);
+ fail_unless(check_preedit("3f", "kf", L"가"));
+ fail_unless(check_preedit("3f", "fk", L"가"));
- hangul_ic_set_option(ic, HANGUL_IC_OPTION_AUTO_REORDER, true);
- hangul_ic_reset(ic);
- fail_unless(check_preedit_with_ic(ic, "kf", L"가"));
- hangul_ic_reset(ic);
- fail_unless(check_preedit_with_ic(ic, "fk", L"가"));
+ set_ic_option(HANGUL_IC_OPTION_AUTO_REORDER, false);
+ fail_unless(check_preedit("3f", "kf", L"가"));
+ fail_unless(check_commit("3f", "fk", L"ㅏ"));
+ fail_unless(check_preedit("3f", "fk", L"ㄱ"));
- hangul_ic_set_option(ic, HANGUL_IC_OPTION_AUTO_REORDER, false);
- hangul_ic_reset(ic);
- fail_unless(check_preedit_with_ic(ic, "kf", L"가"));
- hangul_ic_reset(ic);
- fail_unless(check_commit_with_ic(ic, "fk", L"ㅏ"));
- hangul_ic_reset(ic);
- fail_unless(check_preedit_with_ic(ic, "fk", L"ㄱ"));
+ set_ic_option(HANGUL_IC_OPTION_AUTO_REORDER, val);
+}
+END_TEST
- hangul_ic_delete(ic);
+START_TEST(test_hangul_ic_combi_on_double_stroke)
+{
+ bool val = get_ic_option(HANGUL_IC_OPTION_COMBI_ON_DOUBLE_STROKE);
+
+ set_ic_option(HANGUL_IC_OPTION_COMBI_ON_DOUBLE_STROKE, true);
+ fail_unless(check_preedit("2", "rrkrr", L"깎"));
+ fail_unless(check_preedit("2", "rrkrrk", L"가"));
+
+ /* ㅂㅓㅅㅅ */
+ fail_unless(check_preedit("2", "qjtt", L"벘"));
+ fail_unless(check_commit("2", "qjttm", L"벗"));
+ fail_unless(check_preedit("2", "qjttm", L"스"));
+
+ fail_unless(check_preedit("2", "rktt", L"갔"));
+ fail_unless(check_preedit("2", "rktt\b", L"갓"));
+
+ set_ic_option(HANGUL_IC_OPTION_COMBI_ON_DOUBLE_STROKE, false);
+ fail_unless(check_commit("2", "rr", L"ㄱ"));
+ fail_unless(check_preedit("2", "rr", L"ㄱ"));
+ fail_unless(check_preedit("2", "rrk", L"가"));
+ fail_unless(check_preedit("2", "rrkr", L"각"));
+ fail_unless(check_commit("2", "rrkrr", L"각"));
+ fail_unless(check_preedit("2", "rrkrr", L"ㄱ"));
+ fail_unless(check_preedit("2", "rrkrrk", L"가"));
+
+ /* ㅂㅓㅅㅅ */
+ fail_unless(check_commit("2", "qjtt", L"벗"));
+ fail_unless(check_preedit("2", "qjtt", L"ㅅ"));
+
+ set_ic_option(HANGUL_IC_OPTION_COMBI_ON_DOUBLE_STROKE, val);
}
END_TEST
@@ -491,6 +554,7 @@ Suite* libhangul_suite()
tcase_add_test(hangul, test_hangul_ic_process_3f);
tcase_add_test(hangul, test_hangul_ic_process_romaja);
tcase_add_test(hangul, test_hangul_ic_auto_reorder);
+ tcase_add_test(hangul, test_hangul_ic_combi_on_double_stroke);
tcase_add_test(hangul, test_syllable_iterator);
tcase_add_test(hangul, test_hangul_keyboard);
tcase_add_test(hangul, test_hangul_jamo_to_cjamo);
@@ -511,5 +575,7 @@ int main()
number_failed = srunner_ntests_failed(sr);
srunner_free(sr);
+ hangul_ic_delete(global_ic);
+
return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
}