[PATCH 0/4] MR2607: imm32/tests: Add more INPUTCONTEXT updates tests, and Imm(Set|Get)CompositionString.
From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/imm32/tests/imm32.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index d10f398d475..7bf3110f03e 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -4126,6 +4126,14 @@ static void test_ImmSetConversionStatus(void) ok_eq( 0xdeadbeef, ctx->fdwConversion, UINT, "%#x" ); ok_eq( 0xfeedcafe, ctx->fdwSentence, UINT, "%#x" ); + ok_ret( 1, ImmSetConversionStatus( default_himc, 0xdeadbeef, 0xfeedcafe ) ); + ok_seq( empty_sequence ); + + ok_ret( 1, ImmGetConversionStatus( default_himc, &conversion, NULL ) ); + ok_eq( 0xdeadbeef, conversion, UINT, "%#x" ); + ok_eq( 0xdeadbeef, ctx->fdwConversion, UINT, "%#x" ); + ok_eq( 0xfeedcafe, ctx->fdwSentence, UINT, "%#x" ); + ok_seq( empty_sequence ); ok_ret( 1, ImmSetConversionStatus( default_himc, 0, 0xfeedcafe ) ); ok_seq( set_conversion_status_1_seq ); @@ -4140,6 +4148,14 @@ static void test_ImmSetConversionStatus(void) ok_ret( 1, ImmSetConversionStatus( default_himc, ~0, ~0 ) ); ok_seq( set_conversion_status_2_seq ); + ok_ret( 1, ImmGetConversionStatus( default_himc, NULL, &sentence ) ); + ok_eq( ~0, sentence, UINT, "%#x" ); + ok_eq( ~0, ctx->fdwConversion, UINT, "%#x" ); + ok_eq( ~0, ctx->fdwSentence, UINT, "%#x" ); + + ok_ret( 1, ImmSetConversionStatus( default_himc, ~0, ~0 ) ); + ok_seq( empty_sequence ); + ok_ret( 1, ImmGetConversionStatus( default_himc, &conversion, &sentence ) ); ok_eq( ~0, conversion, UINT, "%#x" ); ok_eq( ~0, sentence, UINT, "%#x" ); @@ -4253,6 +4269,13 @@ static void test_ImmSetOpenStatus(void) ok_eq( 0xdeadbeef, status, UINT, "%#x" ); ok_eq( 0xdeadbeef, ctx->fOpen, UINT, "%#x" ); + ok_ret( 1, ImmSetOpenStatus( default_himc, 0xdeadbeef ) ); + ok_seq( empty_sequence ); + + status = ImmGetOpenStatus( default_himc ); + ok_eq( 0xdeadbeef, status, UINT, "%#x" ); + ok_eq( 0xdeadbeef, ctx->fOpen, UINT, "%#x" ); + ok_seq( empty_sequence ); ok_ret( 1, ImmSetOpenStatus( default_himc, ~0 ) ); ok_seq( set_open_status_1_seq ); @@ -4261,6 +4284,13 @@ static void test_ImmSetOpenStatus(void) todo_wine ok_eq( ~0, status, UINT, "%#x" ); todo_wine ok_eq( ~0, ctx->fOpen, UINT, "%#x" ); + ok_ret( 1, ImmSetOpenStatus( default_himc, ~0 ) ); + ok_seq( empty_sequence ); + + status = ImmGetOpenStatus( default_himc ); + todo_wine ok_eq( ~0, status, UINT, "%#x" ); + todo_wine ok_eq( ~0, ctx->fOpen, UINT, "%#x" ); + /* status is cached between IME activations */ ok_ret( 1, ImmActivateLayout( old_hkl ) ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/2607
From: Rémi Bernon <rbernon(a)codeweavers.com> Showing that they aren't sent to the focused window but only to the INPUTCONTEXT hWnd member. --- dlls/imm32/tests/imm32.c | 61 ++++++++++++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index 7bf3110f03e..0f3d9582a4e 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -2670,6 +2670,7 @@ done: received->himc, received->message.msg, received->message.wparam, received->message.lparam ); return ret; case MSG_TEST_WIN: + todo_wine_if( expected->todo ) ok_(file, line)( !ret, "got hkl %p, himc %p, MSG_TEST_WIN msg %#x, wparam %#Ix, lparam %#Ix\n", received->hkl, received->himc, received->message.msg, received->message.wparam, received->message.lparam ); return ret; @@ -2703,6 +2704,7 @@ done: expected->himc, expected->message.msg, expected->message.wparam, expected->message.lparam ); break; case MSG_TEST_WIN: + todo_wine_if( expected->todo ) ok_(file, line)( !ret, "hkl %p, himc %p, MSG_TEST_WIN msg %#x, wparam %#Ix, lparam %#Ix\n", expected->hkl, expected->himc, expected->message.msg, expected->message.wparam, expected->message.lparam ); break; @@ -2722,7 +2724,8 @@ static void ok_seq_( const char *file, int line, const struct ime_call *expected winetest_push_context( "%u%s%s", i++, !expected->func ? " (spurious)" : "", !received->func ? " (missing)" : "" ); ret = ok_call_( file, line, expected, received ); - if (ret && expected->todo && !strcmp( winetest_platform, "wine" )) + if (ret && expected->todo && expected->func && + !strcmp( winetest_platform, "wine" )) expected++; else if (ret && broken(expected->broken)) expected++; @@ -4022,6 +4025,10 @@ static void test_ImmSetConversionStatus(void) .hkl = expect_ime, .himc = default_himc, .func = IME_NOTIFY, .notify = {.action = NI_CONTEXTUPDATED, .index = 0, .value = IMC_SETCONVERSIONMODE}, }, + { + .hkl = expect_ime, .himc = default_himc, + .func = MSG_TEST_WIN, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETCONVERSIONMODE}, + }, { .hkl = expect_ime, .himc = default_himc, .func = MSG_IME_UI, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETCONVERSIONMODE}, @@ -4030,6 +4037,10 @@ static void test_ImmSetConversionStatus(void) .hkl = expect_ime, .himc = default_himc, .func = IME_NOTIFY, .notify = {.action = NI_CONTEXTUPDATED, .index = 0, .value = IMC_SETSENTENCEMODE}, }, + { + .hkl = expect_ime, .himc = default_himc, + .func = MSG_TEST_WIN, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETSENTENCEMODE}, + }, { .hkl = expect_ime, .himc = default_himc, .func = MSG_IME_UI, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETSENTENCEMODE}, @@ -4042,10 +4053,7 @@ static void test_ImmSetConversionStatus(void) .hkl = expect_ime, .himc = default_himc, .func = IME_NOTIFY, .notify = {.action = NI_CONTEXTUPDATED, .index = 0xdeadbeef, .value = IMC_SETCONVERSIONMODE}, }, - { - .hkl = expect_ime, .himc = default_himc, - .func = MSG_IME_UI, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETCONVERSIONMODE}, - }, + {.todo = TRUE}, /* spurious calls */ {0}, }; const struct ime_call set_conversion_status_2_seq[] = @@ -4054,6 +4062,10 @@ static void test_ImmSetConversionStatus(void) .hkl = expect_ime, .himc = default_himc, .func = IME_NOTIFY, .notify = {.action = NI_CONTEXTUPDATED, .index = 0, .value = IMC_SETCONVERSIONMODE}, }, + { + .hkl = expect_ime, .himc = default_himc, + .func = MSG_TEST_WIN, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETCONVERSIONMODE}, + }, { .hkl = expect_ime, .himc = default_himc, .func = MSG_IME_UI, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETCONVERSIONMODE}, @@ -4062,6 +4074,10 @@ static void test_ImmSetConversionStatus(void) .hkl = expect_ime, .himc = default_himc, .func = IME_NOTIFY, .notify = {.action = NI_CONTEXTUPDATED, .index = 0xfeedcafe, .value = IMC_SETSENTENCEMODE}, }, + { + .hkl = expect_ime, .himc = default_himc, + .func = MSG_TEST_WIN, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETSENTENCEMODE}, + }, { .hkl = expect_ime, .himc = default_himc, .func = MSG_IME_UI, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETSENTENCEMODE}, @@ -4080,7 +4096,7 @@ static void test_ImmSetConversionStatus(void) ok_eq( old_conversion, ctx->fdwConversion, UINT, "%#x" ); ok_eq( old_sentence, ctx->fdwSentence, UINT, "%#x" ); - hwnd = CreateWindowW( L"static", NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, + hwnd = CreateWindowW( test_class.lpszClassName, NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 100, 100, NULL, NULL, NULL, NULL ); ok( !!hwnd, "CreateWindowW failed, error %lu\n", GetLastError() ); process_messages(); @@ -4134,6 +4150,7 @@ static void test_ImmSetConversionStatus(void) ok_eq( 0xdeadbeef, ctx->fdwConversion, UINT, "%#x" ); ok_eq( 0xfeedcafe, ctx->fdwSentence, UINT, "%#x" ); + ctx->hWnd = 0; ok_seq( empty_sequence ); ok_ret( 1, ImmSetConversionStatus( default_himc, 0, 0xfeedcafe ) ); ok_seq( set_conversion_status_1_seq ); @@ -4144,6 +4161,7 @@ static void test_ImmSetConversionStatus(void) ok_eq( 0, ctx->fdwConversion, UINT, "%#x" ); ok_eq( 0xfeedcafe, ctx->fdwSentence, UINT, "%#x" ); + ctx->hWnd = hwnd; ok_seq( empty_sequence ); ok_ret( 1, ImmSetConversionStatus( default_himc, ~0, ~0 ) ); ok_seq( set_conversion_status_2_seq ); @@ -4200,6 +4218,10 @@ static void test_ImmSetOpenStatus(void) .hkl = expect_ime, .himc = default_himc, .func = IME_NOTIFY, .notify = {.action = NI_CONTEXTUPDATED, .index = 0, .value = IMC_SETOPENSTATUS}, }, + { + .hkl = expect_ime, .himc = default_himc, + .func = MSG_TEST_WIN, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETOPENSTATUS}, + }, { .hkl = expect_ime, .himc = default_himc, .func = MSG_IME_UI, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETOPENSTATUS}, @@ -4213,6 +4235,20 @@ static void test_ImmSetOpenStatus(void) .func = IME_NOTIFY, .notify = {.action = NI_CONTEXTUPDATED, .index = 0, .value = IMC_SETOPENSTATUS}, .todo = TRUE, }, + {0}, + }; + const struct ime_call set_open_status_2_seq[] = + { + { + .hkl = expect_ime, .himc = default_himc, + .func = IME_NOTIFY, .notify = {.action = NI_CONTEXTUPDATED, .index = 0, .value = IMC_SETOPENSTATUS}, + .todo = TRUE, + }, + { + .hkl = expect_ime, .himc = default_himc, + .func = MSG_TEST_WIN, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETOPENSTATUS}, + .todo = TRUE, + }, { .hkl = expect_ime, .himc = default_himc, .func = MSG_IME_UI, .message = {.msg = WM_IME_NOTIFY, .wparam = IMN_SETOPENSTATUS}, @@ -4231,7 +4267,7 @@ static void test_ImmSetOpenStatus(void) ok_ne( NULL, ctx, INPUTCONTEXT *, "%p" ); ok_eq( old_status, ctx->fOpen, UINT, "%#x" ); - hwnd = CreateWindowW( L"static", NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, + hwnd = CreateWindowW( test_class.lpszClassName, NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 100, 100, NULL, NULL, NULL, NULL ); ok( !!hwnd, "CreateWindowW failed, error %lu\n", GetLastError() ); process_messages(); @@ -4276,9 +4312,18 @@ static void test_ImmSetOpenStatus(void) ok_eq( 0xdeadbeef, status, UINT, "%#x" ); ok_eq( 0xdeadbeef, ctx->fOpen, UINT, "%#x" ); + ctx->hWnd = 0; + ok_ret( 1, ImmSetOpenStatus( default_himc, 0xfeedcafe ) ); + ok_seq( set_open_status_1_seq ); + + status = ImmGetOpenStatus( default_himc ); + todo_wine ok_eq( 0xfeedcafe, status, UINT, "%#x" ); + todo_wine ok_eq( 0xfeedcafe, ctx->fOpen, UINT, "%#x" ); + + ctx->hWnd = hwnd; ok_seq( empty_sequence ); ok_ret( 1, ImmSetOpenStatus( default_himc, ~0 ) ); - ok_seq( set_open_status_1_seq ); + ok_seq( set_open_status_2_seq ); status = ImmGetOpenStatus( default_himc ); todo_wine ok_eq( ~0, status, UINT, "%#x" ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/2607
From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/imm32/tests/imm32.c | 333 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 331 insertions(+), 2 deletions(-) diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index 0f3d9582a4e..82a38d7f997 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -91,6 +91,12 @@ extern BOOL WINAPI ImmActivateLayout(HKL); #define check_member( val, exp, fmt, member ) \ check_member_( __FILE__, __LINE__, val, exp, fmt, member ) +#define check_member_wstr_( file, line, val, exp, member ) \ + ok_(file, line)( !wcscmp( (val).member, (exp).member ), "got " #member " %s\n", \ + debugstr_w((val).member) ) +#define check_member_wstr( val, exp, member ) \ + check_member_wstr_( __FILE__, __LINE__, val, exp, member ) + #define check_member_point_( file, line, val, exp, member ) \ ok_(file, line)( !memcmp( &(val).member, &(exp).member, sizeof(POINT) ), \ "got " #member " %s\n", wine_dbgstr_point( &(val).member ) ) @@ -103,6 +109,36 @@ extern BOOL WINAPI ImmActivateLayout(HKL); #define check_member_rect( val, exp, member ) \ check_member_rect_( __FILE__, __LINE__, val, exp, member ) +#define check_composition_string( a, b ) check_composition_string_( __LINE__, a, b ) +static void check_composition_string_( int line, COMPOSITIONSTRING *string, const COMPOSITIONSTRING *expect ) +{ + check_member_( __FILE__, line, *string, *expect, "%lu", dwSize ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompReadAttrLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompReadAttrOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompReadClauseLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompReadClauseOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompReadStrLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompReadStrOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompAttrLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompAttrOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompClauseLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompClauseOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompStrLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCompStrOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwCursorPos ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwDeltaStart ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwResultReadClauseLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwResultReadClauseOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwResultReadStrLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwResultReadStrOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwResultClauseLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwResultClauseOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwResultStrLen ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwResultStrOffset ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwPrivateSize ); + check_member_( __FILE__, line, *string, *expect, "%lu", dwPrivateOffset ); +} + #define check_candidate_list( a, b ) check_candidate_list_( __LINE__, a, b, TRUE ) static void check_candidate_list_( int line, CANDIDATELIST *list, const CANDIDATELIST *expect, BOOL unicode ) { @@ -600,7 +636,7 @@ static LRESULT WINAPI test_ime_wnd_proc(HWND hWnd, UINT msg, WPARAM wParam, LPAR hWnd, msg, wParam, lParam); } -static void test_ImmGetCompositionString(void) +static void test_SCS_SETSTR(void) { HIMC imc; static const WCHAR string[] = {'w','i','n','e',0x65e5,0x672c,0x8a9e}; @@ -5484,6 +5520,296 @@ static void test_ImmGetCandidateWindow(void) ime_call_count = 0; } +static void test_ImmGetCompositionString( BOOL unicode ) +{ + static COMPOSITIONSTRING expect_string_empty = {.dwSize = sizeof(COMPOSITIONSTRING)}; + static COMPOSITIONSTRING expect_stringA = + { + .dwSize = 176, + .dwCompReadAttrLen = 8, + .dwCompReadAttrOffset = 116, + .dwCompReadClauseLen = 8, + .dwCompReadClauseOffset = 108, + .dwCompReadStrLen = 8, + .dwCompReadStrOffset = 100, + .dwCompAttrLen = 4, + .dwCompAttrOffset = 136, + .dwCompClauseLen = 8, + .dwCompClauseOffset = 128, + .dwCompStrLen = 4, + .dwCompStrOffset = 124, + .dwCursorPos = 3, + .dwDeltaStart = 1, + .dwResultReadClauseLen = 8, + .dwResultReadClauseOffset = 150, + .dwResultReadStrLen = 10, + .dwResultReadStrOffset = 140, + .dwResultClauseLen = 8, + .dwResultClauseOffset = 164, + .dwResultStrLen = 6, + .dwResultStrOffset = 158, + .dwPrivateSize = 4, + .dwPrivateOffset = 172, + }; + static const COMPOSITIONSTRING expect_stringW = + { + .dwSize = 204, + .dwCompReadAttrLen = 8, + .dwCompReadAttrOffset = 124, + .dwCompReadClauseLen = 8, + .dwCompReadClauseOffset = 116, + .dwCompReadStrLen = 8, + .dwCompReadStrOffset = 100, + .dwCompAttrLen = 4, + .dwCompAttrOffset = 148, + .dwCompClauseLen = 8, + .dwCompClauseOffset = 140, + .dwCompStrLen = 4, + .dwCompStrOffset = 132, + .dwCursorPos = 3, + .dwDeltaStart = 1, + .dwResultReadClauseLen = 8, + .dwResultReadClauseOffset = 172, + .dwResultReadStrLen = 10, + .dwResultReadStrOffset = 152, + .dwResultClauseLen = 8, + .dwResultClauseOffset = 192, + .dwResultStrLen = 6, + .dwResultStrOffset = 180, + .dwPrivateSize = 4, + .dwPrivateOffset = 200, + }; + static const UINT gcs_indexes[] = + { + GCS_COMPREADSTR, + GCS_COMPREADATTR, + GCS_COMPREADCLAUSE, + GCS_COMPSTR, + GCS_COMPATTR, + GCS_COMPCLAUSE, + GCS_CURSORPOS, + GCS_DELTASTART, + GCS_RESULTREADSTR, + GCS_RESULTREADCLAUSE, + GCS_RESULTSTR, + GCS_RESULTCLAUSE, + }; + static const UINT expect_retW[ARRAY_SIZE(gcs_indexes)] = {16, 8, 8, 8, 4, 8, 3, 1, 20, 8, 12, 8}; + static const UINT expect_retA[ARRAY_SIZE(gcs_indexes)] = {8, 8, 8, 4, 4, 8, 3, 1, 10, 8, 6, 8}; + HKL hkl, old_hkl = GetKeyboardLayout( 0 ); + COMPOSITIONSTRING *string; + char buffer[1024]; + INPUTCONTEXT *old_ctx, *ctx; + const void *str; + HIMCC old_himcc; + UINT i, len; + BYTE *dst; + HIMC himc; + + winetest_push_context( unicode ? "unicode" : "ansi" ); + + /* IME_PROP_END_UNLOAD for the IME to unload / reload. */ + ime_info.fdwProperty = IME_PROP_END_UNLOAD; + if (unicode) ime_info.fdwProperty |= IME_PROP_UNICODE; + + if (!(hkl = ime_install())) goto cleanup; + + hwnd = CreateWindowW( test_class.lpszClassName, NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, + 100, 100, 100, 100, NULL, NULL, NULL, NULL ); + ok( !!hwnd, "CreateWindowW failed, error %lu\n", GetLastError() ); + + ok_ret( 1, ImmActivateLayout( hkl ) ); + ok_ret( 1, ImmLoadIME( hkl ) ); + himc = ImmCreateContext(); + ok_ne( NULL, himc, HIMC, "%p" ); + ctx = ImmLockIMC( himc ); + ok_ne( NULL, ctx, INPUTCONTEXT *, "%p" ); + process_messages(); + memset( ime_calls, 0, sizeof(ime_calls) ); + ime_call_count = 0; + + memset( buffer, 0xcd, sizeof(buffer) ); + todo_wine ok_ret( -2, ImmGetCompositionStringW( default_himc, GCS_COMPSTR | GCS_COMPATTR, buffer, sizeof(buffer) ) ); + memset( buffer, 0xcd, sizeof(buffer) ); + todo_wine ok_ret( -2, ImmGetCompositionStringA( default_himc, GCS_COMPSTR | GCS_COMPATTR, buffer, sizeof(buffer) ) ); + + for (i = 0; i < ARRAY_SIZE(gcs_indexes); ++i) + { + memset( buffer, 0xcd, sizeof(buffer) ); + ok_ret( 0, ImmGetCompositionStringW( default_himc, gcs_indexes[i], buffer, sizeof(buffer) ) ); + memset( buffer, 0xcd, sizeof(buffer) ); + ok_ret( 0, ImmGetCompositionStringA( default_himc, gcs_indexes[i], buffer, sizeof(buffer) ) ); + + memset( buffer, 0xcd, sizeof(buffer) ); + ok_ret( 0, ImmGetCompositionStringW( himc, gcs_indexes[i], buffer, sizeof(buffer) ) ); + memset( buffer, 0xcd, sizeof(buffer) ); + ok_ret( 0, ImmGetCompositionStringA( himc, gcs_indexes[i], buffer, sizeof(buffer) ) ); + } + + ctx->hCompStr = ImmReSizeIMCC( ctx->hCompStr, unicode ? expect_stringW.dwSize : expect_stringA.dwSize ); + string = ImmLockIMCC( ctx->hCompStr ); + ok( !!string, "ImmLockIMCC failed, error %lu\n", GetLastError() ); + check_composition_string( string, &expect_string_empty ); + + string->dwCursorPos = 3; + string->dwDeltaStart = 1; + + if (unicode) str = L"ReadComp"; + else str = "ReadComp"; + len = unicode ? wcslen( str ) : strlen( str ); + + string->dwCompReadStrLen = len; + string->dwCompReadStrOffset = string->dwSize; + dst = (BYTE *)string + string->dwCompReadStrOffset; + memcpy( dst, str, len * (unicode ? sizeof(WCHAR) : 1) ); + string->dwSize += len * (unicode ? sizeof(WCHAR) : 1); + + string->dwCompReadClauseLen = 2 * sizeof(DWORD); + string->dwCompReadClauseOffset = string->dwSize; + dst = (BYTE *)string + string->dwCompReadClauseOffset; + *(DWORD *)(dst + 0 * sizeof(DWORD)) = 0; + *(DWORD *)(dst + 1 * sizeof(DWORD)) = len; + string->dwSize += 2 * sizeof(DWORD); + + string->dwCompReadAttrLen = len; + string->dwCompReadAttrOffset = string->dwSize; + dst = (BYTE *)string + string->dwCompReadAttrOffset; + memset( dst, ATTR_INPUT, len ); + string->dwSize += len; + + if (unicode) str = L"Comp"; + else str = "Comp"; + len = unicode ? wcslen( str ) : strlen( str ); + + string->dwCompStrLen = len; + string->dwCompStrOffset = string->dwSize; + dst = (BYTE *)string + string->dwCompStrOffset; + memcpy( dst, str, len * (unicode ? sizeof(WCHAR) : 1) ); + string->dwSize += len * (unicode ? sizeof(WCHAR) : 1); + + string->dwCompClauseLen = 2 * sizeof(DWORD); + string->dwCompClauseOffset = string->dwSize; + dst = (BYTE *)string + string->dwCompClauseOffset; + *(DWORD *)(dst + 0 * sizeof(DWORD)) = 0; + *(DWORD *)(dst + 1 * sizeof(DWORD)) = len; + string->dwSize += 2 * sizeof(DWORD); + + string->dwCompAttrLen = len; + string->dwCompAttrOffset = string->dwSize; + dst = (BYTE *)string + string->dwCompAttrOffset; + memset( dst, ATTR_INPUT, len ); + string->dwSize += len; + + if (unicode) str = L"ReadResult"; + else str = "ReadResult"; + len = unicode ? wcslen( str ) : strlen( str ); + + string->dwResultReadStrLen = len; + string->dwResultReadStrOffset = string->dwSize; + dst = (BYTE *)string + string->dwResultReadStrOffset; + memcpy( dst, str, len * (unicode ? sizeof(WCHAR) : 1) ); + string->dwSize += len * (unicode ? sizeof(WCHAR) : 1); + + string->dwResultReadClauseLen = 2 * sizeof(DWORD); + string->dwResultReadClauseOffset = string->dwSize; + dst = (BYTE *)string + string->dwResultReadClauseOffset; + *(DWORD *)(dst + 0 * sizeof(DWORD)) = 0; + *(DWORD *)(dst + 1 * sizeof(DWORD)) = len; + string->dwSize += 2 * sizeof(DWORD); + + if (unicode) str = L"Result"; + else str = "Result"; + len = unicode ? wcslen( str ) : strlen( str ); + + string->dwResultStrLen = len; + string->dwResultStrOffset = string->dwSize; + dst = (BYTE *)string + string->dwResultStrOffset; + memcpy( dst, str, len * (unicode ? sizeof(WCHAR) : 1) ); + string->dwSize += len * (unicode ? sizeof(WCHAR) : 1); + + string->dwResultClauseLen = 2 * sizeof(DWORD); + string->dwResultClauseOffset = string->dwSize; + dst = (BYTE *)string + string->dwResultClauseOffset; + *(DWORD *)(dst + 0 * sizeof(DWORD)) = 0; + *(DWORD *)(dst + 1 * sizeof(DWORD)) = len; + string->dwSize += 2 * sizeof(DWORD); + + string->dwPrivateSize = 4; + string->dwPrivateOffset = string->dwSize; + dst = (BYTE *)string + string->dwPrivateOffset; + memset( dst, 0xa5, string->dwPrivateSize ); + string->dwSize += 4; + + check_composition_string( string, unicode ? &expect_stringW : &expect_stringA ); + ok_ret( 0, ImmUnlockIMCC( ctx->hCompStr ) ); + old_himcc = ctx->hCompStr; + + for (i = 0; i < ARRAY_SIZE(gcs_indexes); ++i) + { + UINT_PTR expect; + + winetest_push_context( "%u", i ); + + memset( buffer, 0xcd, sizeof(buffer) ); + expect = expect_retW[i]; + ok_ret( expect, ImmGetCompositionStringW( himc, gcs_indexes[i], buffer, sizeof(buffer) ) ); + memset( buffer + expect, 0, 4 ); + + if (i == 0) ok_wcs( L"ReadComp", (WCHAR *)buffer ); + else if (i == 3) ok_wcs( L"Comp", (WCHAR *)buffer ); + else if (i == 8) ok_wcs( L"ReadResult", (WCHAR *)buffer ); + else if (i == 10) ok_wcs( L"Result", (WCHAR *)buffer ); + else if (i != 6 && i != 7) ok_wcs( L"", (WCHAR *)buffer ); + + memset( buffer, 0xcd, sizeof(buffer) ); + expect = expect_retA[i]; + ok_ret( expect, ImmGetCompositionStringA( himc, gcs_indexes[i], buffer, sizeof(buffer) ) ); + memset( buffer + expect, 0, 4 ); + + if (i == 0) ok_str( "ReadComp", (char *)buffer ); + else if (i == 3) ok_str( "Comp", (char *)buffer ); + else if (i == 8) ok_str( "ReadResult", (char *)buffer ); + else if (i == 10) ok_str( "Result", (char *)buffer ); + else if (i != 6 && i != 7) ok_str( "", (char *)buffer ); + + winetest_pop_context(); + } + ok_seq( empty_sequence ); + + old_ctx = ctx; + ok_ret( 1, ImmUnlockIMC( himc ) ); + + /* composition strings are kept between IME selections */ + ok_ret( 1, ImmActivateLayout( old_hkl ) ); + ctx = ImmLockIMC( himc ); + ok_eq( old_ctx, ctx, INPUTCONTEXT *, "%p" ); + ok_eq( old_himcc, ctx->hCompStr, HIMCC, "%p" ); + string = ImmLockIMCC( ctx->hCompStr ); + ok_ne( NULL, string, COMPOSITIONSTRING *, "%p" ); + *string = expect_string_empty; + ok_ret( 0, ImmUnlockIMCC( ctx->hCompStr ) ); + ok_ret( 1, ImmActivateLayout( hkl ) ); + ok_eq( old_himcc, ctx->hCompStr, HIMCC, "%p" ); + check_composition_string( string, &expect_string_empty ); + ok_ret( 1, ImmActivateLayout( old_hkl ) ); + ok_eq( old_himcc, ctx->hCompStr, HIMCC, "%p" ); + check_composition_string( string, &expect_string_empty ); + + ok_ret( 1, ImmUnlockIMC( himc ) ); + ok_ret( 1, ImmDestroyContext( himc ) ); + + ok_ret( 1, ImmActivateLayout( old_hkl ) ); + ok_ret( 1, DestroyWindow( hwnd ) ); + process_messages(); + + ime_cleanup( hkl, TRUE ); + memset( ime_calls, 0, sizeof(ime_calls) ); + ime_call_count = 0; + +cleanup: + winetest_pop_context(); +} + START_TEST(imm32) { default_hkl = GetKeyboardLayout( 0 ); @@ -5536,10 +5862,13 @@ START_TEST(imm32) test_ImmGetCandidateListCount( FALSE ); test_ImmGetCandidateWindow(); + test_ImmGetCompositionString( TRUE ); + test_ImmGetCompositionString( FALSE ); + if (init()) { test_ImmNotifyIME(); - test_ImmGetCompositionString(); + test_SCS_SETSTR(); test_ImmSetCompositionString(); test_ImmIME(); test_ImmAssociateContextEx(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/2607
From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/imm32/tests/imm32.c | 178 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 169 insertions(+), 9 deletions(-) diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index 82a38d7f997..59ced93163d 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -778,12 +778,6 @@ static void test_SCS_SETSTR(void) skip("WM_IME_COMPOSITION(GCS_RESULTSTR) isn't tested\n"); msg_spy_flush_msgs(); } -} - -static void test_ImmSetCompositionString(void) -{ - HIMC imc; - BOOL ret; SetLastError(0xdeadbeef); imc = ImmGetContext(hwnd); @@ -2577,6 +2571,8 @@ DEFINE_EXPECT( ImeEnumRegisterWord ); DEFINE_EXPECT( ImeRegisterWord ); DEFINE_EXPECT( ImeGetRegisterWordStyle ); DEFINE_EXPECT( ImeUnregisterWord ); +static BOOL todo_ImeSetCompositionString; +DEFINE_EXPECT( ImeSetCompositionString ); static BOOL todo_IME_DLL_PROCESS_ATTACH; DEFINE_EXPECT( IME_DLL_PROCESS_ATTACH ); static BOOL todo_IME_DLL_PROCESS_DETACH; @@ -3077,10 +3073,89 @@ static BOOL WINAPI ime_ImeSetActiveContext( HIMC himc, BOOL flag ) static BOOL WINAPI ime_ImeSetCompositionString( HIMC himc, DWORD index, const void *comp, DWORD comp_len, const void *read, DWORD read_len ) { + UINT lang_id = PRIMARYLANGID(GetSystemDefaultLCID()); + ime_trace( "himc %p, index %lu, comp %p, comp_len %lu, read %p, read_len %lu\n", himc, index, comp, comp_len, read, read_len ); - ok( 0, "unexpected call\n" ); - return FALSE; + CHECK_EXPECT( ImeSetCompositionString ); + + ok_eq( expect_ime, GetKeyboardLayout( 0 ), HKL, "%p" ); + ok_ne( default_himc, himc, HIMC, "%p" ); + + if (ime_info.fdwProperty & IME_PROP_UNICODE) + { + switch (index) + { + case SCS_SETSTR: + todo_wine_if( todo_ImeSetCompositionString ) + ok_eq( 22, comp_len, UINT, "%#x" ); + ok_wcs( L"CompString", comp ); + break; + case SCS_CHANGECLAUSE: + { + const UINT *clause = comp; + ok_eq( 8, comp_len, UINT, "%#x" ); + ok_eq( 0, clause[0], UINT, "%#x" ); + todo_wine_if( todo_ImeSetCompositionString ) + ok_eq( 1, clause[1], UINT, "%#x"); + break; + } + case SCS_CHANGEATTR: + { + const BYTE *attr = comp; + todo_wine_if( todo_ImeSetCompositionString && (lang_id == LANG_CHINESE || lang_id == LANG_KOREAN) ) + ok_eq( 4, comp_len, UINT, "%#x" ); + todo_wine_if( todo_ImeSetCompositionString && (lang_id == LANG_CHINESE || lang_id == LANG_JAPANESE || lang_id == LANG_KOREAN) ) + ok_eq( 0xcd, attr[0], UINT, "%#x" ); + todo_wine_if( todo_ImeSetCompositionString ) + ok_eq( 0xcd, attr[1], UINT, "%#x" ); + break; + } + default: + ok( 0, "unexpected index %#lx\n", index ); + break; + } + } + else + { + switch (index) + { + case SCS_SETSTR: + todo_wine_if( todo_ImeSetCompositionString ) + ok_eq( 11, comp_len, UINT, "%#x" ); + ok_str( "CompString", comp ); + break; + case SCS_CHANGECLAUSE: + { + const UINT *clause = comp; + ok_eq( 8, comp_len, UINT, "%#x" ); + todo_wine_if( todo_ImeSetCompositionString ) + ok_eq( 0, clause[0], UINT, "%#x" ); + todo_wine_if( todo_ImeSetCompositionString ) + ok_eq( 1, clause[1], UINT, "%#x"); + break; + } + case SCS_CHANGEATTR: + { + const BYTE *attr = comp; + todo_wine_if( todo_ImeSetCompositionString && (lang_id == LANG_KOREAN) ) + ok_eq( 4, comp_len, UINT, "%#x" ); + todo_wine_if( todo_ImeSetCompositionString ) + ok_eq( 0xcd, attr[0], UINT, "%#x" ); + todo_wine_if( todo_ImeSetCompositionString ) + ok_eq( 0xcd, attr[1], UINT, "%#x" ); + break; + } + default: + ok( 0, "unexpected index %#lx\n", index ); + break; + } + } + + ok_eq( NULL, read, const void *, "%p" ); + ok_eq( 0, read_len, UINT, "%#x" ); + + return TRUE; } static UINT WINAPI ime_ImeToAsciiEx( UINT vkey, UINT scan_code, BYTE *key_state, TRANSMSGLIST *msgs, UINT state, HIMC himc ) @@ -5594,6 +5669,12 @@ static void test_ImmGetCompositionString( BOOL unicode ) GCS_RESULTSTR, GCS_RESULTCLAUSE, }; + static const UINT scs_indexes[] = + { + SCS_SETSTR, + SCS_CHANGEATTR, + SCS_CHANGECLAUSE, + }; static const UINT expect_retW[ARRAY_SIZE(gcs_indexes)] = {16, 8, 8, 8, 4, 8, 3, 1, 20, 8, 12, 8}; static const UINT expect_retA[ARRAY_SIZE(gcs_indexes)] = {8, 8, 8, 4, 4, 8, 3, 1, 10, 8, 6, 8}; HKL hkl, old_hkl = GetKeyboardLayout( 0 ); @@ -5606,6 +5687,8 @@ static void test_ImmGetCompositionString( BOOL unicode ) BYTE *dst; HIMC himc; + SET_ENABLE( ImeSetCompositionString, TRUE ); + winetest_push_context( unicode ? "unicode" : "ansi" ); /* IME_PROP_END_UNLOAD for the IME to unload / reload. */ @@ -5774,6 +5857,83 @@ static void test_ImmGetCompositionString( BOOL unicode ) winetest_pop_context(); } + + for (i = 0; i < ARRAY_SIZE(gcs_indexes); ++i) + { + winetest_push_context( "%u", i ); + ok_ret( 0, ImmSetCompositionStringW( himc, gcs_indexes[i], buffer, sizeof(buffer), NULL, 0 ) ); + ok_ret( 0, ImmSetCompositionStringA( himc, gcs_indexes[i], buffer, sizeof(buffer), NULL, 0 ) ); + winetest_pop_context(); + } + ok_ret( 0, ImmSetCompositionStringW( himc, SCS_SETSTR | SCS_CHANGEATTR, buffer, sizeof(buffer), NULL, 0 ) ); + ok_ret( 0, ImmSetCompositionStringA( himc, SCS_SETSTR | SCS_CHANGEATTR, buffer, sizeof(buffer), NULL, 0 ) ); + ok_ret( 0, ImmSetCompositionStringW( himc, SCS_CHANGECLAUSE | SCS_CHANGEATTR, buffer, sizeof(buffer), NULL, 0 ) ); + ok_ret( 0, ImmSetCompositionStringA( himc, SCS_CHANGECLAUSE | SCS_CHANGEATTR, buffer, sizeof(buffer), NULL, 0 ) ); + + for (i = 0; i < ARRAY_SIZE(scs_indexes); ++i) + { + winetest_push_context( "%u", i ); + + if (scs_indexes[i] == SCS_CHANGECLAUSE) + { + memset( buffer, 0, sizeof(buffer) ); + *((DWORD *)buffer + 1) = 1; + len = 2 * sizeof(DWORD); + } + else if (scs_indexes[i] == SCS_CHANGEATTR) + { + memset( buffer, 0xcd, sizeof(buffer) ); + len = expect_stringW.dwCompAttrLen; + } + else if (scs_indexes[i] == SCS_SETSTR) + { + wcscpy( (WCHAR *)buffer, L"CompString" ); + len = 11 * sizeof(WCHAR); + } + + todo_ImeSetCompositionString = !unicode; + SET_EXPECT( ImeSetCompositionString ); + ok_ret( 1, ImmSetCompositionStringW( himc, scs_indexes[i], buffer, len, NULL, 0 ) ); + CHECK_CALLED( ImeSetCompositionString ); + todo_ImeSetCompositionString = FALSE; + ok_seq( empty_sequence ); + + string = ImmLockIMCC( ctx->hCompStr ); + ok_ne( NULL, string, COMPOSITIONSTRING *, "%p" ); + check_composition_string( string, unicode ? &expect_stringW : &expect_stringA ); + ok_ret( 0, ImmUnlockIMCC( ctx->hCompStr ) ); + + if (scs_indexes[i] == SCS_CHANGECLAUSE) + { + memset( buffer, 0, sizeof(buffer) ); + *((DWORD *)buffer + 1) = 1; + len = 2 * sizeof(DWORD); + } + else if (scs_indexes[i] == SCS_CHANGEATTR) + { + memset( buffer, 0xcd, sizeof(buffer) ); + len = expect_stringA.dwCompAttrLen; + } + else if (scs_indexes[i] == SCS_SETSTR) + { + strcpy( buffer, "CompString" ); + len = 11; + } + + todo_ImeSetCompositionString = unicode; + SET_EXPECT( ImeSetCompositionString ); + ok_ret( 1, ImmSetCompositionStringA( himc, scs_indexes[i], buffer, len, NULL, 0 ) ); + CHECK_CALLED( ImeSetCompositionString ); + todo_ImeSetCompositionString = FALSE; + ok_seq( empty_sequence ); + + string = ImmLockIMCC( ctx->hCompStr ); + ok_ne( NULL, string, COMPOSITIONSTRING *, "%p" ); + check_composition_string( string, unicode ? &expect_stringW : &expect_stringA ); + ok_ret( 0, ImmUnlockIMCC( ctx->hCompStr ) ); + + winetest_pop_context(); + } ok_seq( empty_sequence ); old_ctx = ctx; @@ -5808,6 +5968,7 @@ static void test_ImmGetCompositionString( BOOL unicode ) cleanup: winetest_pop_context(); + SET_ENABLE( ImeSetCompositionString, FALSE ); } START_TEST(imm32) @@ -5869,7 +6030,6 @@ START_TEST(imm32) { test_ImmNotifyIME(); test_SCS_SETSTR(); - test_ImmSetCompositionString(); test_ImmIME(); test_ImmAssociateContextEx(); test_NtUserAssociateInputContext(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/2607
Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=131621 Your paranoid android. === w1064v1809 (64 bit report) === imm32: imm32.c:4927: Test failed: ImmLoadIME returned 0, error 126 imm32.c:4934: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_SELECT select 1 imm32.c:4934: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000400B9, IME_SELECT select 1 imm32.c:4934: Test failed: 2 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x285, wparam 0x1, lparam 0xffffffffe020047f imm32.c:4934: Test failed: 3 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x282, wparam 0x2, lparam 0 imm32.c:4957: Test failed: 4 (missing): hkl FFFFFFFFE020047F, himc 00000000000300CD, IME_SELECT select 1 imm32.c:4964: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000300CD, IME_SELECT select 0 imm32.c:4972: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_NOTIFY action 0x15, index 0x4, value 0 imm32.c:4972: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000400B9, IME_NOTIFY action 0x15, index 0x4, value 0 imm32.c:4972: Test failed: 2 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x282, wparam 0x1, lparam 0 imm32.c:4972: Test failed: 3 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x285, wparam 0, lparam 0xffffffffe020047f imm32.c:4972: Test failed: 4 (missing): hkl 0000000004090409, himc 00000000000601BF, IME_SELECT select 0 imm32.c:4972: Test failed: 5 (missing): hkl 0000000004090409, himc 00000000000400B9, IME_SELECT select 0 imm32.c:4509: Test failed: ImmLoadIME returned 0, error 126 imm32.c:4519: Test failed: got ret 0, error 0 imm32.c:4520: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_PROCESS_KEY vkey 0x41, key_data 0 imm32.c:5028: Test failed: ImmLoadIME returned 0, error 126 imm32.c:5034: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x10d, wparam 0, lparam 0 imm32.c:5036: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x10e, wparam 0, lparam 0 imm32.c:5038: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x10f, wparam 0, lparam 0 imm32.c:5040: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0, lparam 0 imm32.c:5042: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x282, wparam 0, lparam 0 imm32.c:5154: Test failed: ImmLoadIME returned 0, error 126 imm32.c:5161: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_SET_ACTIVE_CONTEXT flag 1 imm32.c:5161: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0x1, lparam 0xc000000f imm32.c:5164: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_SET_ACTIVE_CONTEXT flag 1 imm32.c:5164: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0x1, lparam 0xc000000f imm32.c:5166: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_SET_ACTIVE_CONTEXT flag 0 imm32.c:5166: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0, lparam 0xc000000f imm32.c:5173: Test failed: 3 (missing): hkl FFFFFFFFE020047F, himc 00000000001000CD, IME_SELECT select 1 imm32.c:5173: Test failed: 4 (missing): hkl FFFFFFFFE020047F, himc 00000000001000CD, IME_SET_ACTIVE_CONTEXT flag 0 imm32.c:5173: Test failed: 5 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0, lparam 0xc000000f imm32.c:5176: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000001000CD, IME_SET_ACTIVE_CONTEXT flag 1 imm32.c:5176: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0x1, lparam 0xc000000f imm32.c:5264: Test failed: ImmLoadIME returned 0, error 126 imm32.c:5369: Test failed: unicode: ImmLoadIME returned 0, error 126 imm32.c:5400: Test failed: unicode: ImmGetCandidateListW returned 40, error 0 imm32.c:5405: Test failed: unicode: ImmGetCandidateListW returned 40, error 0 imm32.c:5416: Test failed: unicode: got dwSize 40 imm32.c:5416: Test failed: unicode: got dwOffset[i] 32 imm32.c:5416: Test failed: unicode: got L"C" imm32.c:5416: Test failed: unicode: got dwOffset[i] 36 imm32.c:5416: Test failed: unicode: got L"C" imm32.c:5418: Test failed: unicode: ImmGetCandidateListA returned 96, error 0 imm32.c:5423: Test failed: unicode: ImmGetCandidateListA returned 96, error 0 imm32.c:5434: Test failed: unicode: got dwSize 96 imm32.c:5434: Test failed: unicode: got dwOffset[i] 36 imm32.c:5434: Test failed: unicode: got "C" imm32.c:5434: Test failed: unicode: got dwOffset[i] 64 imm32.c:5434: Test failed: unicode: got "C" imm32.c:5369: Test failed: ansi: ImmLoadIME returned 0, error 126 imm32.c:5472: Test failed: unicode: ImmLoadIME returned 0, error 126 imm32.c:5501: Test failed: unicode: ImmGetCandidateListCountW returned 172, error 0 imm32.c:5505: Test failed: unicode: ImmGetCandidateListCountA returned 144, error 0 imm32.c:5472: Test failed: ansi: ImmLoadIME returned 0, error 126 imm32.c:5547: Test failed: ImmLoadIME returned 0, error 126 imm32.c:5705: Test failed: unicode: ImmLoadIME returned 0, error 126 imm32.c:5838: Test failed: unicode: 0: ImmGetCompositionStringW returned 2, error 0 imm32.c:5841: Test failed: unicode: 0: got buffer L"R\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd" imm32.c:5852: Test failed: unicode: 0: got buffer "R" imm32.c:5838: Test failed: unicode: 1: ImmGetCompositionStringW returned 1, error 0 imm32.c:5845: Test failed: unicode: 1: got buffer L"\cd00\cdcd\cdcd\cdcd" imm32.c:5838: Test failed: unicode: 3: ImmGetCompositionStringW returned 2, error 0 imm32.c:5842: Test failed: unicode: 3: got buffer L"C\cdcd\cdcd\cdcd" imm32.c:5853: Test failed: unicode: 3: got buffer "C" imm32.c:5838: Test failed: unicode: 4: ImmGetCompositionStringW returned 1, error 0 imm32.c:5845: Test failed: unicode: 4: got buffer L"\cd00\cdcd" imm32.c:5838: Test failed: unicode: 8: ImmGetCompositionStringW returned 2, error 0 imm32.c:5843: Test failed: unicode: 8: got buffer L"R\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd" imm32.c:5854: Test failed: unicode: 8: got buffer "R" imm32.c:5838: Test failed: unicode: 10: ImmGetCompositionStringW returned 2, error 0 imm32.c:5844: Test failed: unicode: 10: got buffer L"R\cdcd\cdcd\cdcd\cdcd\cdcd" imm32.c:5855: Test failed: unicode: 10: got buffer "R" imm32.c:5896: Test failed: unicode: 0: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: unicode: 0: expected ImeSetCompositionString imm32.c:5925: Test failed: unicode: 0: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: unicode: 0: expected ImeSetCompositionString imm32.c:5896: Test failed: unicode: 1: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: unicode: 1: expected ImeSetCompositionString imm32.c:5925: Test failed: unicode: 1: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: unicode: 1: expected ImeSetCompositionString imm32.c:5896: Test failed: unicode: 2: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: unicode: 2: expected ImeSetCompositionString imm32.c:5925: Test failed: unicode: 2: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: unicode: 2: expected ImeSetCompositionString imm32.c:5705: Test failed: ansi: ImmLoadIME returned 0, error 126 imm32.c:5896: Test failed: ansi: 0: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: ansi: 0: expected ImeSetCompositionString imm32.c:5925: Test failed: ansi: 0: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: ansi: 0: expected ImeSetCompositionString imm32.c:5896: Test failed: ansi: 1: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: ansi: 1: expected ImeSetCompositionString imm32.c:5925: Test failed: ansi: 1: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: ansi: 1: expected ImeSetCompositionString imm32.c:5896: Test failed: ansi: 2: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: ansi: 2: expected ImeSetCompositionString imm32.c:5925: Test failed: ansi: 2: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: ansi: 2: expected ImeSetCompositionString === w11pro64_amd (64 bit report) === imm32: imm32.c:890: Test failed: expected WM_IME_SETCONTEXT_ACTIVATE imm32.c:382: Test failed: unexpected call WM_IME_SETCONTEXT_ACTIVATE imm32.c:969: Test failed: expected WM_IME_SETCONTEXT_ACTIVATE imm32.c:382: Test failed: unexpected call WM_IME_SETCONTEXT_ACTIVATE === debian11 (32 bit ar:MA report) === imm32: imm32.c:3109: Test failed: unicode: 1: got attr[0] 0x2d === debian11 (32 bit he:IL report) === imm32: imm32.c:3109: Test failed: unicode: 1: got attr[0] 0xbd === debian11 (32 bit hi:IN report) === imm32: imm32.c:3109: Test failed: unicode: 1: got attr[0] 0xfd imm32.c:3142: Test failed: ansi: 1: got comp_len 0xc
On Fri Apr 7 10:55:21 2023 +0000, **** wrote:
Marvin replied on the mailing list: ``` Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=131621 Your paranoid android. === w1064v1809 (64 bit report) === imm32: imm32.c:4927: Test failed: ImmLoadIME returned 0, error 126 imm32.c:4934: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_SELECT select 1 imm32.c:4934: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000400B9, IME_SELECT select 1 imm32.c:4934: Test failed: 2 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x285, wparam 0x1, lparam 0xffffffffe020047f imm32.c:4934: Test failed: 3 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x282, wparam 0x2, lparam 0 imm32.c:4957: Test failed: 4 (missing): hkl FFFFFFFFE020047F, himc 00000000000300CD, IME_SELECT select 1 imm32.c:4964: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000300CD, IME_SELECT select 0 imm32.c:4972: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_NOTIFY action 0x15, index 0x4, value 0 imm32.c:4972: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000400B9, IME_NOTIFY action 0x15, index 0x4, value 0 imm32.c:4972: Test failed: 2 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x282, wparam 0x1, lparam 0 imm32.c:4972: Test failed: 3 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x285, wparam 0, lparam 0xffffffffe020047f imm32.c:4972: Test failed: 4 (missing): hkl 0000000004090409, himc 00000000000601BF, IME_SELECT select 0 imm32.c:4972: Test failed: 5 (missing): hkl 0000000004090409, himc 00000000000400B9, IME_SELECT select 0 imm32.c:4509: Test failed: ImmLoadIME returned 0, error 126 imm32.c:4519: Test failed: got ret 0, error 0 imm32.c:4520: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_PROCESS_KEY vkey 0x41, key_data 0 imm32.c:5028: Test failed: ImmLoadIME returned 0, error 126 imm32.c:5034: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x10d, wparam 0, lparam 0 imm32.c:5036: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x10e, wparam 0, lparam 0 imm32.c:5038: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x10f, wparam 0, lparam 0 imm32.c:5040: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0, lparam 0 imm32.c:5042: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x282, wparam 0, lparam 0 imm32.c:5154: Test failed: ImmLoadIME returned 0, error 126 imm32.c:5161: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_SET_ACTIVE_CONTEXT flag 1 imm32.c:5161: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0x1, lparam 0xc000000f imm32.c:5164: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_SET_ACTIVE_CONTEXT flag 1 imm32.c:5164: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0x1, lparam 0xc000000f imm32.c:5166: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, IME_SET_ACTIVE_CONTEXT flag 0 imm32.c:5166: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0, lparam 0xc000000f imm32.c:5173: Test failed: 3 (missing): hkl FFFFFFFFE020047F, himc 00000000001000CD, IME_SELECT select 1 imm32.c:5173: Test failed: 4 (missing): hkl FFFFFFFFE020047F, himc 00000000001000CD, IME_SET_ACTIVE_CONTEXT flag 0 imm32.c:5173: Test failed: 5 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0, lparam 0xc000000f imm32.c:5176: Test failed: 0 (missing): hkl FFFFFFFFE020047F, himc 00000000001000CD, IME_SET_ACTIVE_CONTEXT flag 1 imm32.c:5176: Test failed: 1 (missing): hkl FFFFFFFFE020047F, himc 00000000000601BF, MSG_IME_UI msg 0x281, wparam 0x1, lparam 0xc000000f imm32.c:5264: Test failed: ImmLoadIME returned 0, error 126 imm32.c:5369: Test failed: unicode: ImmLoadIME returned 0, error 126 imm32.c:5400: Test failed: unicode: ImmGetCandidateListW returned 40, error 0 imm32.c:5405: Test failed: unicode: ImmGetCandidateListW returned 40, error 0 imm32.c:5416: Test failed: unicode: got dwSize 40 imm32.c:5416: Test failed: unicode: got dwOffset[i] 32 imm32.c:5416: Test failed: unicode: got L"C" imm32.c:5416: Test failed: unicode: got dwOffset[i] 36 imm32.c:5416: Test failed: unicode: got L"C" imm32.c:5418: Test failed: unicode: ImmGetCandidateListA returned 96, error 0 imm32.c:5423: Test failed: unicode: ImmGetCandidateListA returned 96, error 0 imm32.c:5434: Test failed: unicode: got dwSize 96 imm32.c:5434: Test failed: unicode: got dwOffset[i] 36 imm32.c:5434: Test failed: unicode: got "C" imm32.c:5434: Test failed: unicode: got dwOffset[i] 64 imm32.c:5434: Test failed: unicode: got "C" imm32.c:5369: Test failed: ansi: ImmLoadIME returned 0, error 126 imm32.c:5472: Test failed: unicode: ImmLoadIME returned 0, error 126 imm32.c:5501: Test failed: unicode: ImmGetCandidateListCountW returned 172, error 0 imm32.c:5505: Test failed: unicode: ImmGetCandidateListCountA returned 144, error 0 imm32.c:5472: Test failed: ansi: ImmLoadIME returned 0, error 126 imm32.c:5547: Test failed: ImmLoadIME returned 0, error 126 imm32.c:5705: Test failed: unicode: ImmLoadIME returned 0, error 126 imm32.c:5838: Test failed: unicode: 0: ImmGetCompositionStringW returned 2, error 0 imm32.c:5841: Test failed: unicode: 0: got buffer L"R\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd" imm32.c:5852: Test failed: unicode: 0: got buffer "R" imm32.c:5838: Test failed: unicode: 1: ImmGetCompositionStringW returned 1, error 0 imm32.c:5845: Test failed: unicode: 1: got buffer L"\cd00\cdcd\cdcd\cdcd" imm32.c:5838: Test failed: unicode: 3: ImmGetCompositionStringW returned 2, error 0 imm32.c:5842: Test failed: unicode: 3: got buffer L"C\cdcd\cdcd\cdcd" imm32.c:5853: Test failed: unicode: 3: got buffer "C" imm32.c:5838: Test failed: unicode: 4: ImmGetCompositionStringW returned 1, error 0 imm32.c:5845: Test failed: unicode: 4: got buffer L"\cd00\cdcd" imm32.c:5838: Test failed: unicode: 8: ImmGetCompositionStringW returned 2, error 0 imm32.c:5843: Test failed: unicode: 8: got buffer L"R\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd\cdcd" imm32.c:5854: Test failed: unicode: 8: got buffer "R" imm32.c:5838: Test failed: unicode: 10: ImmGetCompositionStringW returned 2, error 0 imm32.c:5844: Test failed: unicode: 10: got buffer L"R\cdcd\cdcd\cdcd\cdcd\cdcd" imm32.c:5855: Test failed: unicode: 10: got buffer "R" imm32.c:5896: Test failed: unicode: 0: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: unicode: 0: expected ImeSetCompositionString imm32.c:5925: Test failed: unicode: 0: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: unicode: 0: expected ImeSetCompositionString imm32.c:5896: Test failed: unicode: 1: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: unicode: 1: expected ImeSetCompositionString imm32.c:5925: Test failed: unicode: 1: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: unicode: 1: expected ImeSetCompositionString imm32.c:5896: Test failed: unicode: 2: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: unicode: 2: expected ImeSetCompositionString imm32.c:5925: Test failed: unicode: 2: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: unicode: 2: expected ImeSetCompositionString imm32.c:5705: Test failed: ansi: ImmLoadIME returned 0, error 126 imm32.c:5896: Test failed: ansi: 0: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: ansi: 0: expected ImeSetCompositionString imm32.c:5925: Test failed: ansi: 0: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: ansi: 0: expected ImeSetCompositionString imm32.c:5896: Test failed: ansi: 1: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: ansi: 1: expected ImeSetCompositionString imm32.c:5925: Test failed: ansi: 1: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: ansi: 1: expected ImeSetCompositionString imm32.c:5896: Test failed: ansi: 2: ImmSetCompositionStringW returned 0, error 0 imm32.c:5897: Test failed: ansi: 2: expected ImeSetCompositionString imm32.c:5925: Test failed: ansi: 2: ImmSetCompositionStringA returned 0, error 0 imm32.c:5926: Test failed: ansi: 2: expected ImeSetCompositionString === w11pro64_amd (64 bit report) === imm32: imm32.c:890: Test failed: expected WM_IME_SETCONTEXT_ACTIVATE imm32.c:382: Test failed: unexpected call WM_IME_SETCONTEXT_ACTIVATE imm32.c:969: Test failed: expected WM_IME_SETCONTEXT_ACTIVATE imm32.c:382: Test failed: unexpected call WM_IME_SETCONTEXT_ACTIVATE === debian11 (32 bit ar:MA report) === imm32: imm32.c:3109: Test failed: unicode: 1: got attr[0] 0x2d === debian11 (32 bit he:IL report) === imm32: imm32.c:3109: Test failed: unicode: 1: got attr[0] 0xbd === debian11 (32 bit hi:IN report) === imm32: imm32.c:3109: Test failed: unicode: 1: got attr[0] 0xfd imm32.c:3142: Test failed: ansi: 1: got comp_len 0xc ``` I'll fix the Linux issues. Windows failures are unrelated spurious failures.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2607#note_29282
participants (2)
-
Marvin -
Rémi Bernon