mirror of
https://github.com/reactos/reactos.git
synced 2024-09-03 17:19:20 +00:00
151 lines
4.7 KiB
C
151 lines
4.7 KiB
C
/*
|
|
* PROJECT: ReactOS api tests
|
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
|
* PURPOSE: Test for ImmGetImeInfoEx
|
|
* COPYRIGHT: Copyright 2021 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
|
*/
|
|
|
|
#include "precomp.h"
|
|
|
|
//#define DO_PRINT
|
|
|
|
static VOID PrintInfoEx(PIMEINFOEX pInfoEx)
|
|
{
|
|
#ifdef DO_PRINT
|
|
trace("---\n");
|
|
trace("hkl: %p\n", pInfoEx->hkl);
|
|
trace("ImeInfo.dwPrivateDataSize: 0x%lX\n", pInfoEx->ImeInfo.dwPrivateDataSize);
|
|
trace("ImeInfo.fdwProperty: 0x%lX\n", pInfoEx->ImeInfo.fdwProperty);
|
|
trace("ImeInfo.fdwConversionCaps: 0x%lX\n", pInfoEx->ImeInfo.fdwConversionCaps);
|
|
trace("ImeInfo.fdwSentenceCaps: 0x%lX\n", pInfoEx->ImeInfo.fdwSentenceCaps);
|
|
trace("ImeInfo.fdwUICaps: 0x%lX\n", pInfoEx->ImeInfo.fdwUICaps);
|
|
trace("ImeInfo.fdwSCSCaps: 0x%lX\n", pInfoEx->ImeInfo.fdwSCSCaps);
|
|
trace("ImeInfo.fdwSelectCaps: 0x%lX\n", pInfoEx->ImeInfo.fdwSelectCaps);
|
|
trace("wszUIClass: '%ls'\n", pInfoEx->wszUIClass);
|
|
trace("fdwInitConvMode: 0x%lX\n", pInfoEx->fdwInitConvMode);
|
|
trace("fInitOpen: %d\n", pInfoEx->fInitOpen);
|
|
trace("fLoadFlag: %d\n", pInfoEx->fLoadFlag);
|
|
trace("dwProdVersion: 0x%lX\n", pInfoEx->dwProdVersion);
|
|
trace("dwImeWinVersion: 0x%lX\n", pInfoEx->dwImeWinVersion);
|
|
trace("wszImeDescription: '%ls'\n", pInfoEx->wszImeDescription);
|
|
trace("wszImeFile: '%ls'\n", pInfoEx->wszImeFile);
|
|
trace("fInitOpen: %d\n", pInfoEx->fInitOpen);
|
|
#endif
|
|
}
|
|
|
|
typedef BOOL (WINAPI *FN_ImmGetImeInfoEx)(PIMEINFOEX, IMEINFOEXCLASS, PVOID);
|
|
|
|
START_TEST(ImmGetImeInfoEx)
|
|
{
|
|
IMEINFOEX InfoEx;
|
|
BOOL ret, bMatch;
|
|
size_t ib;
|
|
LANGID LangID = GetSystemDefaultLangID();
|
|
HKL hKL = GetKeyboardLayout(0), hOldKL;
|
|
|
|
HMODULE hImm32 = GetModuleHandleA("imm32");
|
|
FN_ImmGetImeInfoEx fnImmGetImeInfoEx =
|
|
(FN_ImmGetImeInfoEx)GetProcAddress(hImm32, "ImmGetImeInfoEx");
|
|
if (!fnImmGetImeInfoEx)
|
|
{
|
|
skip("ImmGetImeInfoEx not found\n");
|
|
return;
|
|
}
|
|
|
|
if (!GetSystemMetrics(SM_IMMENABLED))
|
|
{
|
|
skip("IME is not available\n");
|
|
return;
|
|
}
|
|
|
|
// ImeInfoExKeyboardLayout
|
|
hOldKL = hKL;
|
|
FillMemory(&InfoEx, sizeof(InfoEx), 0xCC);
|
|
InfoEx.wszUIClass[0] = InfoEx.wszImeFile[0] = 0;
|
|
ret = fnImmGetImeInfoEx(&InfoEx, ImeInfoExKeyboardLayout, &hKL);
|
|
PrintInfoEx(&InfoEx);
|
|
ok_int(ret, TRUE);
|
|
ok_long((DWORD)(DWORD_PTR)hOldKL, (DWORD)(DWORD_PTR)hKL);
|
|
if (IS_IME_HKL(InfoEx.hkl))
|
|
{
|
|
ok_long(LOWORD(InfoEx.hkl), LangID);
|
|
}
|
|
else
|
|
{
|
|
ok_int(LOWORD(InfoEx.hkl), LangID);
|
|
ok_int(HIWORD(InfoEx.hkl), LangID);
|
|
}
|
|
ok(InfoEx.ImeInfo.dwPrivateDataSize >= 4, "\n");
|
|
ok(InfoEx.wszUIClass[0] != 0, "wszUIClass was empty\n");
|
|
ok_long(InfoEx.dwImeWinVersion, 0x40000);
|
|
ok(InfoEx.wszImeFile[0] != 0, "wszImeFile was empty\n");
|
|
hKL = hOldKL;
|
|
|
|
// ImeInfoExKeyboardLayoutTFS
|
|
hOldKL = hKL;
|
|
FillMemory(&InfoEx, sizeof(InfoEx), 0xCC);
|
|
InfoEx.wszUIClass[0] = InfoEx.wszImeFile[0] = 0;
|
|
ret = fnImmGetImeInfoEx(&InfoEx, ImeInfoExKeyboardLayoutTFS, &hKL);
|
|
PrintInfoEx(&InfoEx);
|
|
ok_int(ret, TRUE);
|
|
if (IS_IME_HKL(InfoEx.hkl))
|
|
{
|
|
ok_long(LOWORD(InfoEx.hkl), LangID);
|
|
}
|
|
else
|
|
{
|
|
ok_int(LOWORD(InfoEx.hkl), LangID);
|
|
ok_int(HIWORD(InfoEx.hkl), LangID);
|
|
}
|
|
ok(InfoEx.ImeInfo.dwPrivateDataSize >= 4, "\n");
|
|
ok(InfoEx.wszUIClass[0] != 0, "wszUIClass was empty\n");
|
|
ok_long(InfoEx.dwImeWinVersion, 0x40000);
|
|
ok(InfoEx.wszImeFile[0] != 0, "wszImeFile was empty\n");
|
|
hKL = hOldKL;
|
|
|
|
// ImeInfoExImeWindow
|
|
hOldKL = hKL;
|
|
FillMemory(&InfoEx, sizeof(InfoEx), 0xCC);
|
|
ret = fnImmGetImeInfoEx(&InfoEx, ImeInfoExImeWindow, &hKL);
|
|
ok_int(ret, FALSE);
|
|
bMatch = TRUE;
|
|
for (ib = 0; ib < sizeof(InfoEx); ++ib)
|
|
{
|
|
if (((LPBYTE)&InfoEx)[ib] != 0xCC)
|
|
{
|
|
bMatch = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
ok_int(bMatch, TRUE);
|
|
|
|
// ImeInfoExImeFileName
|
|
hOldKL = hKL;
|
|
FillMemory(&InfoEx, sizeof(InfoEx), 0xCC);
|
|
InfoEx.wszUIClass[0] = InfoEx.wszImeFile[0] = 0;
|
|
ret = fnImmGetImeInfoEx(&InfoEx, ImeInfoExImeFileName, L"THISISTEST");
|
|
PrintInfoEx(&InfoEx);
|
|
ok_int(ret, FALSE);
|
|
ok(InfoEx.ImeInfo.dwPrivateDataSize >= 4, "\n");
|
|
ok_wstr(InfoEx.wszUIClass, L"");
|
|
ok_long(InfoEx.dwImeWinVersion, 0xCCCCCCCC);
|
|
ok_wstr(InfoEx.wszImeFile, L"THISISTEST");
|
|
hKL = hOldKL;
|
|
|
|
// 4
|
|
hOldKL = hKL;
|
|
FillMemory(&InfoEx, sizeof(InfoEx), 0xCC);
|
|
ret = fnImmGetImeInfoEx(&InfoEx, 4, &hKL);
|
|
ok_int(ret, FALSE);
|
|
bMatch = TRUE;
|
|
for (ib = 0; ib < sizeof(InfoEx); ++ib)
|
|
{
|
|
if (((LPBYTE)&InfoEx)[ib] != 0xCC)
|
|
{
|
|
bMatch = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
ok_int(bMatch, TRUE);
|
|
}
|