imm32/tests: Test the effect of CPS_CANCEL and CPS_COMPLETE.

This commit is contained in:
Rémi Bernon 2024-01-19 14:47:31 +01:00 committed by Alexandre Julliard
parent faa342a2f1
commit 0d9e6adada

View file

@ -7407,6 +7407,77 @@ static void test_ga_na_da(void)
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_KEYDOWN, .wparam = 0xd, .lparam = 0x1c0001}},
{0},
};
struct ime_call cancel_seq[] =
{
/* G */
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_STARTCOMPOSITION, .wparam = 0, .lparam = 0}},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\u3131", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x3131, .lparam = GCS_COMPSTR|GCS_COMPATTR|CS_INSERTCHAR|CS_NOMOVECARET},
},
/* A */
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\uac00", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xac00, .lparam = GCS_COMPSTR|GCS_COMPATTR|CS_INSERTCHAR|CS_NOMOVECARET},
},
/* N */
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\uac04", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xac04, .lparam = GCS_COMPSTR|GCS_COMPATTR|CS_INSERTCHAR|CS_NOMOVECARET},
},
/* A */
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\ub098", .result = L"\uac00",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xac00, .lparam = GCS_RESULTSTR},
},
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_CHAR, .wparam = 0xac00, .lparam = 0x1}},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\ub098", .result = L"\uac00",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xb098, .lparam = GCS_COMPSTR|GCS_COMPATTR|CS_INSERTCHAR|CS_NOMOVECARET},
},
/* CPS_CANCEL */
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_ENDCOMPOSITION, .wparam = 0, .lparam = 0}},
{0},
};
struct ime_call closed_seq[] =
{
/* G */
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_STARTCOMPOSITION, .wparam = 0, .lparam = 0}},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\u3131", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x3131, .lparam = GCS_COMPSTR|GCS_COMPATTR|CS_INSERTCHAR|CS_NOMOVECARET},
},
/* A */
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\uac00", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xac00, .lparam = GCS_COMPSTR|GCS_COMPATTR|CS_INSERTCHAR|CS_NOMOVECARET},
},
/* N */
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\uac04", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xac04, .lparam = GCS_COMPSTR|GCS_COMPATTR|CS_INSERTCHAR|CS_NOMOVECARET},
},
/* A */
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\ub098", .result = L"\uac00",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xac00, .lparam = GCS_RESULTSTR},
},
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_CHAR, .wparam = 0xac00, .lparam = 0x1}},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\ub098", .result = L"\uac00",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xb098, .lparam = GCS_COMPSTR|GCS_COMPATTR|CS_INSERTCHAR|CS_NOMOVECARET},
},
/* CPS_COMPLETE */
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_ENDCOMPOSITION, .wparam = 0, .lparam = 0}},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"", .result = L"\ub098",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xb098, .lparam = GCS_RESULTSTR},
},
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_CHAR, .wparam = 0xb098, .lparam = 0x1}},
{0},
};
INPUTCONTEXT *ctx;
HWND hwnd;
@ -7445,6 +7516,8 @@ static void test_ga_na_da(void)
for (i = 0; i < ARRAY_SIZE(partial_d_seq); i++) partial_d_seq[i].himc = himc;
for (i = 0; i < ARRAY_SIZE(partial_da_seq); i++) partial_da_seq[i].himc = himc;
for (i = 0; i < ARRAY_SIZE(partial_return_seq); i++) partial_return_seq[i].himc = himc;
for (i = 0; i < ARRAY_SIZE(cancel_seq); i++) cancel_seq[i].himc = himc;
for (i = 0; i < ARRAY_SIZE(closed_seq); i++) closed_seq[i].himc = himc;
keybd_event( 'R', 0x13, 0, 0 );
flush_events();
@ -7532,6 +7605,84 @@ static void test_ga_na_da(void)
todo_wine ok_seq( partial_return_seq );
ignore_WM_IME_NOTIFY = TRUE;
/* cancelling clears the composition string */
keybd_event( 'R', 0x13, 0, 0 );
flush_events();
keybd_event( 'R', 0x13, KEYEVENTF_KEYUP, 0 );
keybd_event( 'K', 0x25, 0, 0 );
flush_events();
keybd_event( 'K', 0x25, KEYEVENTF_KEYUP, 0 );
keybd_event( 'S', 0x1f, 0, 0 );
flush_events();
keybd_event( 'S', 0x1f, KEYEVENTF_KEYUP, 0 );
keybd_event( 'K', 0x25, 0, 0 );
flush_events();
keybd_event( 'K', 0x25, KEYEVENTF_KEYUP, 0 );
ok_ret( 1, ImmNotifyIME( himc, NI_COMPOSITIONSTR, CPS_CANCEL, 0 ) );
flush_events();
todo_wine ok_seq( cancel_seq );
/* CPS_COMPLETE and ImmSetOpenStatus( himc, FALSE ) do the same thing */
keybd_event( 'R', 0x13, 0, 0 );
flush_events();
keybd_event( 'R', 0x13, KEYEVENTF_KEYUP, 0 );
keybd_event( 'K', 0x25, 0, 0 );
flush_events();
keybd_event( 'K', 0x25, KEYEVENTF_KEYUP, 0 );
keybd_event( 'S', 0x1f, 0, 0 );
flush_events();
keybd_event( 'S', 0x1f, KEYEVENTF_KEYUP, 0 );
keybd_event( 'K', 0x25, 0, 0 );
flush_events();
keybd_event( 'K', 0x25, KEYEVENTF_KEYUP, 0 );
ok_ret( 1, ImmNotifyIME( himc, NI_COMPOSITIONSTR, CPS_COMPLETE, 0 ) );
flush_events();
todo_wine ok_seq( closed_seq );
keybd_event( 'R', 0x13, 0, 0 );
flush_events();
keybd_event( 'R', 0x13, KEYEVENTF_KEYUP, 0 );
keybd_event( 'K', 0x25, 0, 0 );
flush_events();
keybd_event( 'K', 0x25, KEYEVENTF_KEYUP, 0 );
/* does nothing, already open */
ok_ret( 1, ImmSetOpenStatus( himc, TRUE ) );
keybd_event( 'S', 0x1f, 0, 0 );
flush_events();
keybd_event( 'S', 0x1f, KEYEVENTF_KEYUP, 0 );
keybd_event( 'K', 0x25, 0, 0 );
flush_events();
keybd_event( 'K', 0x25, KEYEVENTF_KEYUP, 0 );
ok_ret( 1, ImmSetOpenStatus( himc, FALSE ) );
flush_events();
todo_wine ok_seq( closed_seq );
ignore_WM_IME_NOTIFY = FALSE;
ok_ret( 1, ImmSetConversionStatus( himc, 0, IME_SMODE_PHRASEPREDICT ) );
ok_ret( 1, ImmSetOpenStatus( himc, FALSE ) );
@ -7610,6 +7761,61 @@ static void test_nihongo_no(void)
{0},
};
struct ime_call cancel_seq[] =
{
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_STARTCOMPOSITION, .wparam = 0, .lparam = 0}},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\uff4e", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xff4e, .lparam = GCS_COMPSTR|GCS_COMPCLAUSE|GCS_COMPATTR|GCS_COMPREADSTR|GCS_DELTASTART|GCS_CURSORPOS},
},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\u306b", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x306b, .lparam = GCS_COMPSTR|GCS_COMPCLAUSE|GCS_COMPATTR|GCS_COMPREADSTR|GCS_DELTASTART|GCS_CURSORPOS},
},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\u306b\uff48", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x306b, .lparam = GCS_COMPSTR|GCS_COMPCLAUSE|GCS_COMPATTR|GCS_COMPREADSTR|GCS_DELTASTART|GCS_CURSORPOS},
},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\u306b\u307b", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x306b, .lparam = GCS_COMPSTR|GCS_COMPCLAUSE|GCS_COMPATTR|GCS_COMPREADSTR|GCS_DELTASTART|GCS_CURSORPOS},
},
/* CPS_CANCEL */
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_ENDCOMPOSITION, .wparam = 0, .lparam = 0}},
{0},
};
struct ime_call closed_seq[] =
{
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_STARTCOMPOSITION, .wparam = 0, .lparam = 0}},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\uff4e", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0xff4e, .lparam = GCS_COMPSTR|GCS_COMPCLAUSE|GCS_COMPATTR|GCS_COMPREADSTR|GCS_DELTASTART|GCS_CURSORPOS},
},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\u306b", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x306b, .lparam = GCS_COMPSTR|GCS_COMPCLAUSE|GCS_COMPATTR|GCS_COMPREADSTR|GCS_DELTASTART|GCS_CURSORPOS},
},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\u306b\uff48", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x306b, .lparam = GCS_COMPSTR|GCS_COMPCLAUSE|GCS_COMPATTR|GCS_COMPREADSTR|GCS_DELTASTART|GCS_CURSORPOS},
},
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"\u306b\u307b", .result = L"",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x306b, .lparam = GCS_COMPSTR|GCS_COMPCLAUSE|GCS_COMPATTR|GCS_COMPREADSTR|GCS_DELTASTART|GCS_CURSORPOS},
},
/* CPS_COMPLETE */
{
.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .comp = L"", .result = L"\u306b\u307b",
.message = {.msg = WM_IME_COMPOSITION, .wparam = 0x306b, .lparam = GCS_RESULTSTR|GCS_RESULTCLAUSE|GCS_RESULTREADSTR|GCS_RESULTREADCLAUSE},
},
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_CHAR, .wparam = 0x306b, .lparam = 1}},
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_CHAR, .wparam = 0x307b, .lparam = 1}},
{.hkl = default_hkl, .himc = 0/*himc*/, .func = MSG_TEST_WIN, .message = {.msg = WM_IME_ENDCOMPOSITION, .wparam = 0, .lparam = 0}},
{0},
};
INPUTCONTEXT *ctx;
HWND hwnd;
HIMC himc;
@ -7639,6 +7845,8 @@ static void test_nihongo_no(void)
ime_call_count = 0;
for (i = 0; i < ARRAY_SIZE(complete_seq); i++) complete_seq[i].himc = himc;
for (i = 0; i < ARRAY_SIZE(cancel_seq); i++) cancel_seq[i].himc = himc;
for (i = 0; i < ARRAY_SIZE(closed_seq); i++) closed_seq[i].himc = himc;
ignore_WM_IME_REQUEST = TRUE;
ignore_WM_IME_NOTIFY = TRUE;
@ -7704,6 +7912,88 @@ static void test_nihongo_no(void)
ok_seq( empty_sequence );
/* changing the open status completes the composition string */
ignore_WM_IME_REQUEST = TRUE;
ignore_WM_IME_NOTIFY = TRUE;
/* cancelling clears the composition string */
keybd_event( 'N', 0x31, 0, 0 );
flush_events();
keybd_event( 'N', 0x31, KEYEVENTF_KEYUP, 0 );
keybd_event( 'I', 0x17, 0, 0 );
flush_events();
keybd_event( 'I', 0x17, KEYEVENTF_KEYUP, 0 );
keybd_event( 'H', 0x23, 0, 0 );
flush_events();
keybd_event( 'H', 0x23, KEYEVENTF_KEYUP, 0 );
keybd_event( 'O', 0x18, 0, 0 );
flush_events();
keybd_event( 'O', 0x18, KEYEVENTF_KEYUP, 0 );
ok_ret( 1, ImmNotifyIME( himc, NI_COMPOSITIONSTR, CPS_CANCEL, 0 ) );
flush_events();
todo_wine ok_seq( cancel_seq );
/* CPS_COMPLETE and ImmSetOpenStatus( himc, FALSE ) do the same thing */
keybd_event( 'N', 0x31, 0, 0 );
flush_events();
keybd_event( 'N', 0x31, KEYEVENTF_KEYUP, 0 );
keybd_event( 'I', 0x17, 0, 0 );
flush_events();
keybd_event( 'I', 0x17, KEYEVENTF_KEYUP, 0 );
keybd_event( 'H', 0x23, 0, 0 );
flush_events();
keybd_event( 'H', 0x23, KEYEVENTF_KEYUP, 0 );
keybd_event( 'O', 0x18, 0, 0 );
flush_events();
keybd_event( 'O', 0x18, KEYEVENTF_KEYUP, 0 );
ok_ret( 1, ImmNotifyIME( himc, NI_COMPOSITIONSTR, CPS_COMPLETE, 0 ) );
flush_events();
todo_wine ok_seq( closed_seq );
keybd_event( 'N', 0x31, 0, 0 );
flush_events();
keybd_event( 'N', 0x31, KEYEVENTF_KEYUP, 0 );
keybd_event( 'I', 0x17, 0, 0 );
flush_events();
keybd_event( 'I', 0x17, KEYEVENTF_KEYUP, 0 );
/* does nothing, already open */
ok_ret( 1, ImmSetOpenStatus( himc, TRUE ) );
keybd_event( 'H', 0x23, 0, 0 );
flush_events();
keybd_event( 'H', 0x23, KEYEVENTF_KEYUP, 0 );
keybd_event( 'O', 0x18, 0, 0 );
flush_events();
keybd_event( 'O', 0x18, KEYEVENTF_KEYUP, 0 );
ok_ret( 1, ImmSetOpenStatus( himc, FALSE ) );
flush_events();
todo_wine ok_seq( closed_seq );
ignore_WM_IME_REQUEST = FALSE;
ignore_WM_IME_NOTIFY = FALSE;
ok_ret( 1, ImmSetConversionStatus( himc, 0, IME_SMODE_PHRASEPREDICT ) );
ok_ret( 1, ImmSetOpenStatus( himc, FALSE ) );