Akihiro Sagawa : imm32/tests: Add more tests showing that the IME window is created after WM_NCCREATE.

Alexandre Julliard julliard at winehq.org
Mon May 30 09:43:41 CDT 2016


Module: wine
Branch: master
Commit: 47043b9295c46ce218144385c902d9d3f11bb47a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=47043b9295c46ce218144385c902d9d3f11bb47a

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Mon May 30 01:08:14 2016 +0900

imm32/tests: Add more tests showing that the IME window is created after WM_NCCREATE.

Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/imm32/tests/imm32.c | 59 +++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 56 insertions(+), 3 deletions(-)

diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c
index 7bc0a9a..fa6ae62 100644
--- a/dlls/imm32/tests/imm32.c
+++ b/dlls/imm32/tests/imm32.c
@@ -172,7 +172,8 @@ static void msg_spy_cleanup(void) {
  * messages being sent to this window in response.
  */
 static const char wndcls[] = "winetest_imm32_wndcls";
-static enum { PHASE_UNKNOWN, FIRST_WINDOW, SECOND_WINDOW } test_phase;
+static enum { PHASE_UNKNOWN, FIRST_WINDOW, SECOND_WINDOW,
+              CREATE_CANCEL, NCCREATE_CANCEL } test_phase;
 static HWND hwnd;
 
 static HWND get_ime_window(void);
@@ -196,13 +197,16 @@ static LRESULT WINAPI wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
                 default:
                     break; /* do nothing */
             }
+            if (test_phase == NCCREATE_CANCEL)
+                return FALSE;
             return TRUE;
         case WM_NCCALCSIZE:
             default_ime_wnd = get_ime_window();
             switch(test_phase) {
                 case FIRST_WINDOW:
                 case SECOND_WINDOW:
-                    todo_wine_if(test_phase == FIRST_WINDOW)
+                case CREATE_CANCEL:
+                    todo_wine_if(test_phase == FIRST_WINDOW || test_phase == CREATE_CANCEL)
                     ok(default_ime_wnd != NULL, "expected IME window existence\n");
                     break;
                 default:
@@ -214,12 +218,15 @@ static LRESULT WINAPI wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
             switch(test_phase) {
                 case FIRST_WINDOW:
                 case SECOND_WINDOW:
-                    todo_wine_if(test_phase == FIRST_WINDOW)
+                case CREATE_CANCEL:
+                    todo_wine_if(test_phase == FIRST_WINDOW || test_phase == CREATE_CANCEL)
                     ok(default_ime_wnd != NULL, "expected IME window existence\n");
                     break;
                 default:
                     break; /* do nothing */
             }
+            if (test_phase == CREATE_CANCEL)
+                return -1;
             return TRUE;
     }
 
@@ -957,6 +964,44 @@ static DWORD WINAPI test_default_ime_window_cb(void *arg)
     return 1;
 }
 
+static DWORD WINAPI test_default_ime_window_cancel_cb(void *arg)
+{
+    struct testcase_ime_window *testcase = (struct testcase_ime_window *)arg;
+    DWORD visible = testcase->visible ? WS_VISIBLE : 0;
+    HWND hwnd1, hwnd2, default_ime_wnd, ime_wnd;
+
+    ok(!get_ime_window(), "Expected no IME windows\n");
+    test_phase = NCCREATE_CANCEL;
+    hwnd1 = CreateWindowExA(WS_EX_CLIENTEDGE, wndcls, "Wine imm32.dll test",
+                            WS_OVERLAPPEDWINDOW | visible,
+                            CW_USEDEFAULT, CW_USEDEFAULT,
+                            240, 120, NULL, NULL, GetModuleHandleW(NULL), NULL);
+    ok(hwnd1 == NULL, "creation suceeded, got %p\n", hwnd1);
+    ok(!get_ime_window(), "Expected no IME windows\n");
+
+    test_phase = CREATE_CANCEL;
+    hwnd1 = CreateWindowExA(WS_EX_CLIENTEDGE, wndcls, "Wine imm32.dll test",
+                            WS_OVERLAPPEDWINDOW | visible,
+                            CW_USEDEFAULT, CW_USEDEFAULT,
+                            240, 120, NULL, NULL, GetModuleHandleW(NULL), NULL);
+    ok(hwnd1 == NULL, "creation suceeded, got %p\n", hwnd1);
+    ok(!get_ime_window(), "Expected no IME windows\n");
+
+    test_phase = FIRST_WINDOW;
+    hwnd2 = CreateWindowExA(WS_EX_CLIENTEDGE, wndcls, "Wine imm32.dll test",
+                            WS_OVERLAPPEDWINDOW | visible,
+                            CW_USEDEFAULT, CW_USEDEFAULT,
+                            240, 120, NULL, NULL, GetModuleHandleW(NULL), NULL);
+    ime_wnd = get_ime_window();
+    todo_wine ok(ime_wnd != NULL, "Expected IME window existence\n");
+    default_ime_wnd = ImmGetDefaultIMEWnd(hwnd2);
+    todo_wine ok(ime_wnd == default_ime_wnd, "Expected %p, got %p\n", ime_wnd, default_ime_wnd);
+
+    DestroyWindow(hwnd2);
+    ok(!IsWindow(ime_wnd), "Expected no IME windows\n");
+    return 1;
+}
+
 static void test_default_ime_window_creation(void)
 {
     HANDLE thread;
@@ -983,6 +1028,14 @@ static void test_default_ime_window_creation(void)
             }
         }
         CloseHandle(thread);
+
+        if (testcases[i].top_level_window)
+        {
+            thread = CreateThread(NULL, 0, test_default_ime_window_cancel_cb, &testcases[i], 0, NULL);
+            ok(thread != NULL, "CreateThread failed with error %u\n", GetLastError());
+            WaitForSingleObject(thread, INFINITE);
+            CloseHandle(thread);
+        }
     }
 
     test_phase = PHASE_UNKNOWN;




More information about the wine-cvs mailing list