[IMM32_APITEST] Add himc testcase (#3965)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Tue, 21 Sep 2021 03:26:43 +0000 (12:26 +0900)
committerGitHub <noreply@github.com>
Tue, 21 Sep 2021 03:26:43 +0000 (12:26 +0900)
Add himc testcase. CORE-11700

modules/rostests/apitests/imm32/CMakeLists.txt
modules/rostests/apitests/imm32/himc.c [new file with mode: 0644]
modules/rostests/apitests/imm32/testlist.c

index 79fbf58..97ca3c4 100644 (file)
@@ -3,6 +3,7 @@ include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine)
 
 list(APPEND SOURCE
     clientimc.c
+    himc.c
     imcc.c
     ImmIsUIMessage.c
     testlist.c)
@@ -10,5 +11,5 @@ list(APPEND SOURCE
 add_executable(imm32_apitest ${SOURCE})
 target_link_libraries(imm32_apitest wine ${PSEH_LIB})
 set_module_type(imm32_apitest win32cui)
-add_importlibs(imm32_apitest imm32 msvcrt kernel32 ntdll)
+add_importlibs(imm32_apitest imm32 msvcrt user32 kernel32 ntdll)
 add_rostests_file(TARGET imm32_apitest)
diff --git a/modules/rostests/apitests/imm32/himc.c b/modules/rostests/apitests/imm32/himc.c
new file mode 100644 (file)
index 0000000..8cf4bfd
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * PROJECT:     ReactOS api tests
+ * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE:     Test for imm32 HIMC
+ * COPYRIGHT:   Copyright 2021 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
+ */
+
+#include "precomp.h"
+
+START_TEST(himc)
+{
+    DWORD style;
+    HWND hwndEdit, hwndStatic;
+    HIMC hNewIMC, hOldIMC, hIMC, hIMC1, hIMC2;
+    LPINPUTCONTEXT pIC;
+
+    /* ImmCreateContext/ImmDestroyContext and ImmLockIMC/ImmUnlockIMC */
+    hNewIMC = ImmCreateContext();
+    ok_int(hNewIMC != NULL, TRUE);
+    pIC = ImmLockIMC(hNewIMC);
+    ok_int(pIC == NULL, TRUE);
+    ImmUnlockIMC(hNewIMC);
+    ok_int(ImmDestroyContext(hNewIMC), TRUE);
+
+    /* ImmGetContext against NULL */
+    hIMC = ImmGetContext(NULL);
+    ok_int(hIMC == NULL, TRUE);
+
+    /* Create EDIT control */
+    style = ES_MULTILINE | ES_LEFT;
+    hwndEdit = CreateWindowW(L"EDIT", NULL, style, 0, 0, 100, 20, NULL, NULL,
+                             GetModuleHandleW(NULL), NULL);
+    ok_int(hwndEdit != NULL, TRUE);
+
+    /* Create STATIC control */
+    style = SS_LEFT;
+    hwndStatic = CreateWindowW(L"STATIC", NULL, style, 0, 30, 100, 20, NULL, NULL,
+                               GetModuleHandleW(NULL), NULL);
+    ok_int(hwndStatic != NULL, TRUE);
+
+    /* ImmGetContext/ImmReleaseContext and ImmLockIMC/ImmUnlockIMC */
+    hIMC1 = hIMC = ImmGetContext(hwndEdit);
+    ok_int(hIMC != NULL, TRUE);
+    pIC = ImmLockIMC(hIMC);
+    ok_int(pIC != NULL, TRUE);
+    ok_int(pIC->hWnd == NULL, TRUE);
+    ok_int(pIC->fOpen, FALSE);
+    ok_int(ImmGetIMCCSize(pIC->hCompStr) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hCandInfo) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hGuideLine) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hPrivate) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hMsgBuf) != 0, TRUE);
+    ImmUnlockIMC(hNewIMC);
+    SetFocus(hwndEdit);
+    pIC = ImmLockIMC(hIMC);
+    ok_int(pIC != NULL, TRUE);
+    ok_int(pIC->hWnd == hwndEdit, TRUE);
+    ok_int(pIC->fOpen, FALSE);
+    ImmUnlockIMC(hNewIMC);
+    SetFocus(NULL);
+    pIC = ImmLockIMC(hIMC);
+    ok_int(pIC != NULL, TRUE);
+    ok_int(pIC->hWnd == hwndEdit, TRUE);
+    ImmUnlockIMC(hNewIMC);
+    ok_int(ImmSetOpenStatus(hIMC, TRUE), TRUE);
+    pIC = ImmLockIMC(hIMC);
+    ok_int(pIC != NULL, TRUE);
+    ok_int(pIC->fOpen, TRUE);
+    ImmUnlockIMC(hNewIMC);
+    ok_int(ImmReleaseContext(hwndEdit, hIMC), TRUE);
+
+    hIMC2 = hIMC = ImmGetContext(hwndStatic);
+    ok_int(hIMC != NULL, TRUE);
+    pIC = ImmLockIMC(hIMC);
+    ok_int(pIC != NULL, TRUE);
+    ok_int(pIC->hWnd == hwndEdit, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hCompStr) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hCandInfo) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hGuideLine) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hPrivate) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hMsgBuf) != 0, TRUE);
+    ImmUnlockIMC(hNewIMC);
+    ok_int(ImmReleaseContext(hwndEdit, hIMC), TRUE);
+
+    ok_int(hIMC1 == hIMC2, TRUE);
+
+    /* ImmAssociateContext */
+    hNewIMC = ImmCreateContext();
+    ok_int(hNewIMC != NULL, TRUE);
+    pIC = ImmLockIMC(hNewIMC);
+    ok_int(pIC != NULL, TRUE);
+    ImmUnlockIMC(hNewIMC);
+    hOldIMC = ImmAssociateContext(hwndEdit, hNewIMC);
+    ok_int(hNewIMC != hOldIMC, TRUE);
+    hIMC = ImmGetContext(hwndEdit);
+    ok_int(hIMC == hNewIMC, TRUE);
+    ok_int(hIMC != hOldIMC, TRUE);
+    pIC = ImmLockIMC(hNewIMC);
+    ok_int(pIC != NULL, TRUE);
+    ok_int(pIC->hWnd == NULL, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hCompStr) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hCandInfo) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hGuideLine) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hPrivate) != 0, TRUE);
+    ok_int(ImmGetIMCCSize(pIC->hMsgBuf) != 0, TRUE);
+    ImmUnlockIMC(hNewIMC);
+    ok_int(ImmReleaseContext(hwndEdit, hIMC), TRUE);
+    ok_int(ImmDestroyContext(hNewIMC), TRUE);
+
+    DestroyWindow(hwndEdit);
+    DestroyWindow(hwndStatic);
+}
index 73597d5..fa24328 100644 (file)
@@ -3,12 +3,14 @@
 #include <wine/test.h>
 
 extern void func_clientimc(void);
+extern void func_himc(void);
 extern void func_imcc(void);
 extern void func_ImmIsUIMessage(void);
 
 const struct test winetest_testlist[] =
 {
     { "clientimc", func_clientimc },
+    { "himc", func_himc },
     { "imcc", func_imcc },
     { "ImmIsUIMessage", func_ImmIsUIMessage },
     { 0, 0 }