From: Rémi Bernon rbernon@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 ) );
From: Rémi Bernon rbernon@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" );
From: Rémi Bernon rbernon@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();
From: Rémi Bernon rbernon@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();
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.