user32: adds test cases for builtin edit class after subclassed by SetClassLongPtr

Hongbo Ni hongbo at njstar.com
Wed Jul 16 07:27:24 CDT 2008


this patch add test cases for Bug#14350

---
 dlls/user32/tests/class.c |   67 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c
index 8412e8b..9e9dccf 100644
--- a/dlls/user32/tests/class.c
+++ b/dlls/user32/tests/class.c
@@ -590,6 +590,7 @@ static void test_builtinproc(void)
     WCHAR buf[128];
     ATOM atom;
     HWND hwnd;
+    HWND hwnd2;
     int i;

     pDefWindowProcA = (void *)GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcA");
@@ -775,6 +776,72 @@ static void test_builtinproc(void)
     CallWindowProcA((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf);
     ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n");

+    /** subclass Edit class using SetClassLongPtrA with ClassTest_WndProc2 **/
+    oldproc = (WNDPROC)SetClassLongPtrA( hwnd, GCLP_WNDPROC, (ULONG_PTR)ClassTest_WndProc2);
+    ok(!IS_WNDPROC_HANDLE(GetClassLongPtrA(hwnd, GCLP_WNDPROC)),
+       "GetClassLongPtrA expect to return a Ansi wndproc, got %p\n",(void *)GetClassLongPtrA(hwnd, GCLP_WNDPROC));
+    ok(IS_WNDPROC_HANDLE(GetClassLongPtrW(hwnd, GCLP_WNDPROC)),
+       "GetClassLongPtrW expect to return a wndproc handle, got %p\n", (void *)GetClassLongPtrW(hwnd, GCLP_WNDPROC));
+
+    /* create a unicode edit window */
+    hwnd2 = CreateWindowExW(0, WC_EDITW, NULL, WS_POPUP,
+                           0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL);
+    ok(!IsWindowUnicode(hwnd2), "CreateWindowExW should create a Ansi Edit window (subclassed by SetClassLongPtrA)\n");
+    ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd2, GWLP_WNDPROC)),
+       "GetWindowLongPtrA expect to return a Ansi wndproc, got %p\n",(void *)GetWindowLongPtrA(hwnd2, GWLP_WNDPROC));
+    ok(IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd2, GWLP_WNDPROC)),
+       "GetWindowLongPtrW expect to return a wndproc handle, got %p\n",(void *)GetWindowLongPtrW(hwnd2, GWLP_WNDPROC));
+    DestroyWindow(hwnd2);
+
+    /* create a ansi edit window */
+    hwnd2 = CreateWindowExA(0, WC_EDITA, NULL, WS_POPUP,
+                           0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL);
+    ok(!IsWindowUnicode(hwnd2), "CreateWindowExA should create a Ansi Edit window (subclassed by SetClassLongPtrA)\n");
+    ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd2, GWLP_WNDPROC)),
+       "GetWindowLongPtrA expect to return a Ansi wndproc, got %p\n",(void *)GetWindowLongPtrA(hwnd2, GWLP_WNDPROC));
+    ok(IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd2, GWLP_WNDPROC)),
+       "GetWindowLongPtrW expect to return a wndproc handle, got %p\n",(void *)GetWindowLongPtrW(hwnd2, GWLP_WNDPROC));
+    DestroyWindow(hwnd2);
+
+    SetWindowLongPtrA( hwnd, GCLP_WNDPROC, (ULONG_PTR)oldproc); /* restore procA */
+
+    /** subclass Edit class using SetClassLongPtrW with ClassTest_WndProc **/
+    oldproc = (WNDPROC)SetClassLongPtrW( hwnd, GCLP_WNDPROC, (ULONG_PTR)ClassTest_WndProc);
+    ok(IS_WNDPROC_HANDLE(GetClassLongPtrA(hwnd, GCLP_WNDPROC)),
+       "GetClassLongPtrA expect to return a wndproc handle, got %p\n",(void *)GetClassLongPtrA(hwnd, GCLP_WNDPROC));
+    ok(!IS_WNDPROC_HANDLE(GetClassLongPtrW(hwnd, GCLP_WNDPROC)),
+       "GetClassLongPtrW expect to return a Unicode wndproc, got %p\n",(void *)GetClassLongPtrW(hwnd, GCLP_WNDPROC));
+
+    /* create a unicode edit window */
+    hwnd2 = CreateWindowExW(0, WC_EDITW, NULL, WS_POPUP,
+                           0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL);
+    ok(IsWindowUnicode(hwnd2), "CreateWindowExW should create a Unicode Edit window (subclassed by SetClassLongPtrW)\n");
+    ok(IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd2, GWLP_WNDPROC)),
+       "GetWindowLongPtrA expect to return a wndproc handle, got %p\n",(void *)GetWindowLongPtrA(hwnd2, GWLP_WNDPROC));
+    ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd2, GWLP_WNDPROC)),
+       "GetWindowLongPtrW expect to return a Unicode wndproc, got %p\n",(void *)GetWindowLongPtrW(hwnd2, GWLP_WNDPROC));
+    /* ClassTest_WndProc handles Unciode message - expected */
+    ok(((WNDPROC)GetWindowLongPtrW(hwnd2, GWLP_WNDPROC)==ClassTest_WndProc),
+       "GetWindowLongPtrW expect to be ClassTest_WndProc, %p vs %p\n",
+       (void *)GetWindowLongPtrW(hwnd2, GWLP_WNDPROC),ClassTest_WndProc);
+    DestroyWindow(hwnd2);
+
+    /* create a ansi edit window */
+    hwnd2 = CreateWindowExA(0, WC_EDITA, NULL, WS_POPUP,
+                           0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL);
+    ok(!IsWindowUnicode(hwnd2), "CreateWindowExA should create a Ansi Edit window (subclassed by SetClassLongPtrW)\n");
+    ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd2, GWLP_WNDPROC)),
+       "GetWindowLongPtrA expect to return a Ansi wndproc, got %p\n",(void *)GetWindowLongPtrA(hwnd2, GWLP_WNDPROC));
+    ok(IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd2, GWLP_WNDPROC)),
+       "GetWindowLongPtrW expect to return a wndproc handle, got %p\n",(void *)GetWindowLongPtrW(hwnd2, GWLP_WNDPROC));
+    /* ClassTest_WndProc should also handle Ansi message - a window Hack */
+    ok(((WNDPROC)GetWindowLongPtrA(hwnd2, GWLP_WNDPROC)==ClassTest_WndProc),
+       "GetWindowLongPtrA expect to be ClassTest_WndProc, %p vs %p\n",
+       (void *)GetWindowLongPtrA(hwnd2, GWLP_WNDPROC),ClassTest_WndProc);
+    DestroyWindow(hwnd2);
+
+    SetWindowLongPtrW( hwnd, GCLP_WNDPROC, (ULONG_PTR)oldproc); /* restore procW */
+
     DestroyWindow(hwnd);
 }

--
1.5.2.1

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.winehq.org/pipermail/wine-patches/attachments/20080716/3d0327f0/attachment-0001.htm 


More information about the wine-patches mailing list