static void test_ImmNotifyIME(void) { static const char string[] = "wine"; char resstr[16] = ""; HIMC imc; BOOL ret; imc = ImmGetContext(hwnd); msg_spy_flush_msgs(); ret = ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_CANCEL, 0); todo_wine { ok(!ret || broken(ret), /* Vista and W2K8 */ "Canceling an empty composition string should fail.\n"); } ok(!msg_spy_find_msg(WM_IME_COMPOSITION), "Windows does not post " "WM_IME_COMPOSITION in response to NI_COMPOSITIONSTR / CPS_CANCEL, if " "the composition string being canceled is empty.\n"); ImmSetCompositionString(imc, SCS_SETSTR, string, sizeof(string), NULL, 0); msg_spy_flush_msgs(); ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_CANCEL, 0); ok(!msg_spy_find_msg(WM_IME_COMPOSITION), "Windows does not post " "WM_IME_COMPOSITION in response to NI_COMPOSITIONSTR / CPS_CANCEL, if " "the composition string being canceled is non empty.\n"); /* behavior differs between win9x and NT */ ret = ImmGetCompositionString(imc, GCS_COMPSTR, resstr, sizeof(resstr)); ok(!ret, "After being cancelled the composition string is empty.\n"); msg_spy_flush_msgs(); ret = ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_CANCEL, 0); todo_wine { ok(!ret || broken(ret), /* Vista and W2K8 */ "Canceling an empty composition string should fail.\n"); } ok(!msg_spy_find_msg(WM_IME_COMPOSITION), "Windows does not post " "WM_IME_COMPOSITION in response to NI_COMPOSITIONSTR / CPS_CANCEL, if " "the composition string being canceled is empty.\n"); msg_spy_flush_msgs(); ImmReleaseContext(hwnd, imc); }
static void test_ImmIsUIMessage(void) { struct test { UINT msg; BOOL ret; }; static const struct test tests[] = { { WM_MOUSEMOVE, FALSE }, { WM_IME_STARTCOMPOSITION, TRUE }, { WM_IME_ENDCOMPOSITION, TRUE }, { WM_IME_COMPOSITION, TRUE }, { WM_IME_SETCONTEXT, TRUE }, { WM_IME_NOTIFY, TRUE }, { WM_IME_CONTROL, FALSE }, { WM_IME_COMPOSITIONFULL, TRUE }, { WM_IME_SELECT, TRUE }, { WM_IME_CHAR, FALSE }, { 0x287 /* FIXME */, TRUE }, { WM_IME_REQUEST, FALSE }, { WM_IME_KEYDOWN, FALSE }, { WM_IME_KEYUP, FALSE }, { 0, FALSE } /* mark the end */ }; const struct test *test; BOOL ret; if (!pImmIsUIMessageA) return; for (test = tests; test->msg; test++) { msg_spy_flush_msgs(); ret = pImmIsUIMessageA(NULL, test->msg, 0, 0); ok(ret == test->ret, "ImmIsUIMessageA returned %x for %x\n", ret, test->msg); ok(!msg_spy_find_msg(test->msg), "Windows does not send 0x%x for NULL hwnd\n", test->msg); ret = pImmIsUIMessageA(hwnd, test->msg, 0, 0); ok(ret == test->ret, "ImmIsUIMessageA returned %x for %x\n", ret, test->msg); if (ret) ok(msg_spy_find_msg(test->msg) != NULL, "Windows does send 0x%x\n", test->msg); else ok(!msg_spy_find_msg(test->msg), "Windows does not send 0x%x\n", test->msg); } }