xref: /reactos/modules/rostests/apitests/imm32/himc.c (revision 6ef7b676)
1 /*
2  * PROJECT:     ReactOS api tests
3  * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4  * PURPOSE:     Test for imm32 HIMC
5  * COPYRIGHT:   Copyright 2021 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
6  */
7 
8 #include "precomp.h"
9 
10 START_TEST(himc)
11 {
12     DWORD style;
13     HWND hwndEdit, hwndStatic;
14     HIMC hNewIMC, hOldIMC, hIMC, hIMC1, hIMC2;
15     LPINPUTCONTEXT pIC;
16 
17     /* ImmCreateContext/ImmDestroyContext and ImmLockIMC/ImmUnlockIMC */
18     hNewIMC = ImmCreateContext();
19     ok(hNewIMC != NULL, "\n");
20     pIC = ImmLockIMC(hNewIMC);
21     ok(pIC == NULL, "\n");
22     ImmUnlockIMC(hNewIMC);
23     ok(ImmDestroyContext(hNewIMC), "\n");
24 
25     /* ImmGetContext against NULL */
26     hIMC = ImmGetContext(NULL);
27     ok(hIMC == NULL, "\n");
28 
29     /* Create EDIT control */
30     style = ES_MULTILINE | ES_LEFT;
31     hwndEdit = CreateWindowW(L"EDIT", NULL, style, 0, 0, 100, 20, NULL, NULL,
32                              GetModuleHandleW(NULL), NULL);
33     ok(hwndEdit != NULL, "\n");
34 
35     /* Create STATIC control */
36     style = SS_LEFT;
37     hwndStatic = CreateWindowW(L"STATIC", NULL, style, 0, 30, 100, 20, NULL, NULL,
38                                GetModuleHandleW(NULL), NULL);
39     ok(hwndStatic != NULL, "\n");
40 
41     /* ImmGetContext/ImmReleaseContext and ImmLockIMC/ImmUnlockIMC */
42     hIMC1 = hIMC = ImmGetContext(hwndEdit);
43     ok(hIMC != NULL, "\n");
44     pIC = ImmLockIMC(hIMC);
45     ok(pIC != NULL, "\n");
46     ok(pIC->hWnd == NULL, "\n");
47     ok(!pIC->fOpen, "\n");
48     ok(ImmGetIMCCSize(pIC->hCompStr) != 0, "\n");
49     ok(ImmGetIMCCSize(pIC->hCandInfo) != 0, "\n");
50     ok(ImmGetIMCCSize(pIC->hGuideLine) != 0, "\n");
51     ok(ImmGetIMCCSize(pIC->hPrivate) != 0, "\n");
52     ok(ImmGetIMCCSize(pIC->hMsgBuf) != 0, "\n");
53     ImmUnlockIMC(hNewIMC);
54     SetFocus(hwndEdit);
55     pIC = ImmLockIMC(hIMC);
56     ok(pIC != NULL, "\n");
57     ok(pIC->hWnd == hwndEdit, "\n");
58     ok(!pIC->fOpen, "\n");
59     ImmUnlockIMC(hNewIMC);
60     SetFocus(NULL);
61     pIC = ImmLockIMC(hIMC);
62     ok(pIC != NULL, "\n");
63     ok(pIC->hWnd == hwndEdit, "\n");
64     ImmUnlockIMC(hNewIMC);
65     ok(ImmSetOpenStatus(hIMC, TRUE), "\n");
66     pIC = ImmLockIMC(hIMC);
67     ok(pIC != NULL, "\n");
68     ok(pIC->fOpen, "\n");
69     ImmUnlockIMC(hNewIMC);
70     ok(ImmReleaseContext(hwndEdit, hIMC), "\n");
71 
72     hIMC2 = hIMC = ImmGetContext(hwndStatic);
73     ok(hIMC != NULL, "\n");
74     pIC = ImmLockIMC(hIMC);
75     ok(pIC != NULL, "\n");
76     ok(pIC->hWnd == hwndEdit, "\n");
77     ok(ImmGetIMCCSize(pIC->hCompStr) != 0, "\n");
78     ok(ImmGetIMCCSize(pIC->hCandInfo) != 0, "\n");
79     ok(ImmGetIMCCSize(pIC->hGuideLine) != 0, "\n");
80     ok(ImmGetIMCCSize(pIC->hPrivate) != 0, "\n");
81     ok(ImmGetIMCCSize(pIC->hMsgBuf) != 0, "\n");
82     ImmUnlockIMC(hNewIMC);
83     ok(ImmReleaseContext(hwndEdit, hIMC), "\n");
84 
85     ok(hIMC1 == hIMC2, "\n");
86 
87     /* ImmAssociateContext */
88     hNewIMC = ImmCreateContext();
89     ok(hNewIMC != NULL, "\n");
90     pIC = ImmLockIMC(hNewIMC);
91     ok(pIC != NULL, "\n");
92     ImmUnlockIMC(hNewIMC);
93     hOldIMC = ImmAssociateContext(hwndEdit, hNewIMC);
94     ok(hNewIMC != hOldIMC, "\n");
95     hIMC = ImmGetContext(hwndEdit);
96     ok(hIMC == hNewIMC, "\n");
97     ok(hIMC != hOldIMC, "\n");
98     pIC = ImmLockIMC(hNewIMC);
99     ok(pIC != NULL, "\n");
100     ok(pIC->hWnd == NULL, "\n");
101     ok(ImmGetIMCCSize(pIC->hCompStr) != 0, "\n");
102     ok(ImmGetIMCCSize(pIC->hCandInfo) != 0, "\n");
103     ok(ImmGetIMCCSize(pIC->hGuideLine) != 0, "\n");
104     ok(ImmGetIMCCSize(pIC->hPrivate) != 0, "\n");
105     ok(ImmGetIMCCSize(pIC->hMsgBuf) != 0, "\n");
106     ImmUnlockIMC(hNewIMC);
107     ok(ImmReleaseContext(hwndEdit, hIMC), "\n");
108     ok(ImmDestroyContext(hNewIMC), "\n");
109 
110     DestroyWindow(hwndEdit);
111     DestroyWindow(hwndStatic);
112 }
113