Zhiyi Zhang : comctl32/tests: Add GetWindowSubclass() tests.
Alexandre Julliard
julliard at winehq.org
Tue Aug 16 16:00:59 CDT 2022
Module: wine
Branch: master
Commit: f7443102009fb67a0dc7a5bca60f6cc46209bb30
URL: https://gitlab.winehq.org/wine/wine/-/commit/f7443102009fb67a0dc7a5bca60f6cc46209bb30
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Tue Aug 16 11:22:55 2022 +0800
comctl32/tests: Add GetWindowSubclass() tests.
---
dlls/comctl32/tests/subclass.c | 52 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/dlls/comctl32/tests/subclass.c b/dlls/comctl32/tests/subclass.c
index 439d61a83c8..b7b4dd0508d 100644
--- a/dlls/comctl32/tests/subclass.c
+++ b/dlls/comctl32/tests/subclass.c
@@ -29,6 +29,7 @@
#include "wine/heap.h"
#include "wine/test.h"
+static BOOL (WINAPI *pGetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR *);
static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
static BOOL (WINAPI *pRemoveWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR);
static LRESULT (WINAPI *pDefSubclassProc)(HWND, UINT, WPARAM, LPARAM);
@@ -311,11 +312,12 @@ static BOOL init_function_pointers(void)
*/
#define MAKEFUNC_ORD(f, ord) (p##f = (void*)GetProcAddress(hmod, (LPSTR)(ord)))
MAKEFUNC_ORD(SetWindowSubclass, 410);
+ MAKEFUNC_ORD(GetWindowSubclass, 411);
MAKEFUNC_ORD(RemoveWindowSubclass, 412);
MAKEFUNC_ORD(DefSubclassProc, 413);
#undef MAKEFUNC_ORD
- if(!pSetWindowSubclass || !pRemoveWindowSubclass || !pDefSubclassProc)
+ if(!pSetWindowSubclass || !pGetWindowSubclass || !pRemoveWindowSubclass || !pDefSubclassProc)
{
win_skip("SetWindowSubclass and friends are not available\n");
return FALSE;
@@ -338,6 +340,53 @@ static BOOL init_function_pointers(void)
return TRUE;
}
+static void test_GetWindowSubclass(void)
+{
+ DWORD_PTR data;
+ HWND hwnd;
+ BOOL ret;
+
+ hwnd = CreateWindowA("TestSubclass", "Test subclass", WS_OVERLAPPEDWINDOW, 100, 100, 200, 200,
+ 0, 0, 0, NULL);
+ ok(hwnd != NULL, "CreateWindowA failed, error %ld.\n", GetLastError());
+
+ ret = pSetWindowSubclass(hwnd, wnd_proc_sub, 2, 7);
+ ok(ret, "SetWindowSubclass failed.\n");
+
+ data = 0xdeadbeef;
+ ret = pGetWindowSubclass(NULL, wnd_proc_sub, 2, &data);
+ ok(!ret, "GetWindowSubclass succeeded.\n");
+ todo_wine
+ ok(data == 0, "Got unexpected data %#Ix.\n", data);
+
+ data = 0xdeadbeef;
+ ret = pGetWindowSubclass(hwnd, NULL, 2, &data);
+ ok(!ret, "GetWindowSubclass succeeded.\n");
+ todo_wine
+ ok(data == 0, "Got unexpected data %#Ix.\n", data);
+
+ data = 0xdeadbeef;
+ ret = pGetWindowSubclass(hwnd, wnd_proc_sub, 0, &data);
+ ok(!ret, "GetWindowSubclass succeeded.\n");
+ todo_wine
+ ok(data == 0, "Got unexpected data %#Ix.\n", data);
+
+ /* Crash on Wine */
+ if (strcmp(winetest_platform, "wine"))
+ {
+ ret = pGetWindowSubclass(hwnd, wnd_proc_sub, 2, NULL);
+ ok(ret, "GetWindowSubclass failed.\n");
+ }
+
+ data = 0xdeadbeef;
+ ret = pGetWindowSubclass(hwnd, wnd_proc_sub, 2, &data);
+ ok(ret, "GetWindowSubclass failed.\n");
+ ok(data == 7, "Got unexpected data %#Ix.\n", data);
+
+ pRemoveWindowSubclass(hwnd, wnd_proc_sub, 2);
+ DestroyWindow(hwnd);
+}
+
START_TEST(subclass)
{
if(!init_function_pointers()) return;
@@ -345,4 +394,5 @@ START_TEST(subclass)
if(!register_window_classes()) return;
test_subclass();
+ test_GetWindowSubclass();
}
More information about the wine-cvs
mailing list