<html>
<body>
<font size=3><br>
this patch add test cases for Bug#14350<br><br>
---<br>
dlls/user32/tests/class.c | 67
+++++++++++++++++++++++++++++++++++++++++++++<br>
1 files changed, 67 insertions(+), 0 deletions(-)<br><br>
diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c<br>
index 8412e8b..9e9dccf 100644<br>
--- a/dlls/user32/tests/class.c<br>
+++ b/dlls/user32/tests/class.c<br>
@@ -590,6 +590,7 @@ static void test_builtinproc(void)<br>
WCHAR buf[128];<br>
ATOM atom;<br>
HWND hwnd;<br>
+ HWND hwnd2;<br>
int i;<br><br>
pDefWindowProcA = (void
*)GetProcAddress(GetModuleHandle("user32.dll"),
"DefWindowProcA");<br>
@@ -775,6 +776,72 @@ static void test_builtinproc(void)<br>
CallWindowProcA((WNDPROC)GetWindowLongPtrA(hwnd,
GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf);<br>
ok(memcmp(buf, classA, sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");<br><br>
+ /** subclass Edit class using SetClassLongPtrA with
ClassTest_WndProc2 **/<br>
+ oldproc = (WNDPROC)SetClassLongPtrA( hwnd,
GCLP_WNDPROC, (ULONG_PTR)ClassTest_WndProc2);<br>
+ ok(!IS_WNDPROC_HANDLE(GetClassLongPtrA(hwnd,
GCLP_WNDPROC)),<br>
+ "GetClassLongPtrA expect to
return a Ansi wndproc, got %p\n",(void *)GetClassLongPtrA(hwnd,
GCLP_WNDPROC));<br>
+ ok(IS_WNDPROC_HANDLE(GetClassLongPtrW(hwnd,
GCLP_WNDPROC)),<br>
+ "GetClassLongPtrW expect to
return a wndproc handle, got %p\n", (void *)GetClassLongPtrW(hwnd,
GCLP_WNDPROC));<br>
+<br>
+ /* create a unicode edit window */<br>
+ hwnd2 = CreateWindowExW(0, WC_EDITW, NULL,
WS_POPUP,<br>
+
0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL);<br>
+ ok(!IsWindowUnicode(hwnd2), "CreateWindowExW
should create a Ansi Edit window (subclassed by
SetClassLongPtrA)\n");<br>
+ ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC)),<br>
+ "GetWindowLongPtrA expect to
return a Ansi wndproc, got %p\n",(void *)GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC));<br>
+ ok(IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC)),<br>
+ "GetWindowLongPtrW expect to
return a wndproc handle, got %p\n",(void *)GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC));<br>
+ DestroyWindow(hwnd2);<br>
+<br>
+ /* create a ansi edit window */<br>
+ hwnd2 = CreateWindowExA(0, WC_EDITA, NULL,
WS_POPUP,<br>
+
0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL);<br>
+ ok(!IsWindowUnicode(hwnd2), "CreateWindowExA
should create a Ansi Edit window (subclassed by
SetClassLongPtrA)\n");<br>
+ ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC)),<br>
+ "GetWindowLongPtrA expect to
return a Ansi wndproc, got %p\n",(void *)GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC));<br>
+ ok(IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC)),<br>
+ "GetWindowLongPtrW expect to
return a wndproc handle, got %p\n",(void *)GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC));<br>
+ DestroyWindow(hwnd2);<br>
+<br>
+ SetWindowLongPtrA( hwnd, GCLP_WNDPROC,
(ULONG_PTR)oldproc); /* restore procA */<br>
+<br>
+ /** subclass Edit class using SetClassLongPtrW with
ClassTest_WndProc **/<br>
+ oldproc = (WNDPROC)SetClassLongPtrW( hwnd,
GCLP_WNDPROC, (ULONG_PTR)ClassTest_WndProc);<br>
+ ok(IS_WNDPROC_HANDLE(GetClassLongPtrA(hwnd,
GCLP_WNDPROC)),<br>
+ "GetClassLongPtrA expect to
return a wndproc handle, got %p\n",(void *)GetClassLongPtrA(hwnd,
GCLP_WNDPROC));<br>
+ ok(!IS_WNDPROC_HANDLE(GetClassLongPtrW(hwnd,
GCLP_WNDPROC)),<br>
+ "GetClassLongPtrW expect to
return a Unicode wndproc, got %p\n",(void *)GetClassLongPtrW(hwnd,
GCLP_WNDPROC));<br>
+<br>
+ /* create a unicode edit window */<br>
+ hwnd2 = CreateWindowExW(0, WC_EDITW, NULL,
WS_POPUP,<br>
+
0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL);<br>
+ ok(IsWindowUnicode(hwnd2), "CreateWindowExW
should create a Unicode Edit window (subclassed by
SetClassLongPtrW)\n");<br>
+ ok(IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC)),<br>
+ "GetWindowLongPtrA expect to
return a wndproc handle, got %p\n",(void *)GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC));<br>
+ ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC)),<br>
+ "GetWindowLongPtrW expect to
return a Unicode wndproc, got %p\n",(void *)GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC));<br>
+ /* ClassTest_WndProc handles Unciode message -
expected */<br>
+ ok(((WNDPROC)GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC)==ClassTest_WndProc),<br>
+ "GetWindowLongPtrW expect to
be ClassTest_WndProc, %p vs %p\n",<br>
+ (void *)GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC),ClassTest_WndProc);<br>
+ DestroyWindow(hwnd2);<br>
+<br>
+ /* create a ansi edit window */<br>
+ hwnd2 = CreateWindowExA(0, WC_EDITA, NULL,
WS_POPUP,<br>
+
0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL);<br>
+ ok(!IsWindowUnicode(hwnd2), "CreateWindowExA
should create a Ansi Edit window (subclassed by
SetClassLongPtrW)\n");<br>
+ ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC)),<br>
+ "GetWindowLongPtrA expect to
return a Ansi wndproc, got %p\n",(void *)GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC));<br>
+ ok(IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC)),<br>
+ "GetWindowLongPtrW expect to
return a wndproc handle, got %p\n",(void *)GetWindowLongPtrW(hwnd2,
GWLP_WNDPROC));<br>
+ /* ClassTest_WndProc should also handle Ansi message
- a window Hack */<br>
+ ok(((WNDPROC)GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC)==ClassTest_WndProc),<br>
+ "GetWindowLongPtrA expect to
be ClassTest_WndProc, %p vs %p\n",<br>
+ (void *)GetWindowLongPtrA(hwnd2,
GWLP_WNDPROC),ClassTest_WndProc);<br>
+ DestroyWindow(hwnd2);<br>
+<br>
+ SetWindowLongPtrW( hwnd, GCLP_WNDPROC,
(ULONG_PTR)oldproc); /* restore procW */<br>
+<br>
DestroyWindow(hwnd);<br>
}<br><br>
--<br>
1.5.2.1<br><br>
</font></body>
</html>