[PATCH 4/7] Some test for buddy procedure subclassing

Nikolay Sivov bunglehead at gmail.com
Mon Dec 21 16:54:06 CST 2009


---
 dlls/comctl32/tests/updown.c |   39 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 38 insertions(+), 1 deletions(-)

diff --git a/dlls/comctl32/tests/updown.c b/dlls/comctl32/tests/updown.c
index df3fbbf..c2a5a4a 100644
--- a/dlls/comctl32/tests/updown.c
+++ b/dlls/comctl32/tests/updown.c
@@ -61,6 +61,8 @@
 
 static HWND parent_wnd, g_edit;
 
+static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
+
 static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
 
 static const struct message add_updown_with_edit_seq[] = {
@@ -436,7 +438,9 @@ static void test_updown_pos32(void)
 
 static void test_updown_buddy(void)
 {
-    HWND updown, buddyReturn;
+    HWND updown, buddyReturn, buddy;
+    WNDPROC proc;
+    DWORD style;
 
     updown = create_updown_control(UDS_ALIGNRIGHT, g_edit);
 
@@ -455,6 +459,35 @@ static void test_updown_buddy(void)
     ok_sequence(sequences, EDIT_SEQ_INDEX, add_updown_with_edit_seq, "test updown buddy_edit", FALSE);
 
     DestroyWindow(updown);
+
+    buddy = create_edit_control();
+    proc  = (WNDPROC)GetWindowLongPtrA(buddy, GWLP_WNDPROC);
+
+    updown= create_updown_control(UDS_ALIGNRIGHT, buddy);
+    ok(proc == (WNDPROC)GetWindowLongPtrA(buddy, GWLP_WNDPROC), "No subclassing expected\n");
+
+    style = GetWindowLongA(updown, GWL_STYLE);
+    SetWindowLongA(updown, GWL_STYLE, style | UDS_ARROWKEYS);
+    style = GetWindowLongA(updown, GWL_STYLE);
+    ok(style & UDS_ARROWKEYS, "Expected UDS_ARROWKEYS\n");
+    /* no subclass if UDS_ARROWKEYS set after creation */
+    ok(proc == (WNDPROC)GetWindowLongPtrA(buddy, GWLP_WNDPROC), "No subclassing expected\n");
+
+    DestroyWindow(updown);
+
+    updown= create_updown_control(UDS_ALIGNRIGHT | UDS_ARROWKEYS, buddy);
+    ok(proc != (WNDPROC)GetWindowLongPtrA(buddy, GWLP_WNDPROC), "Subclassing expected\n");
+
+    if (pSetWindowSubclass)
+    {
+        /* updown uses subclass helpers for buddy on >5.8x systems */
+        todo_wine
+            ok(GetPropA(buddy, "CC32SubclassInfo") != NULL, "Expected CC32SubclassInfo property\n");
+    }
+
+    DestroyWindow(updown);
+
+    DestroyWindow(buddy);
 }
 
 static void test_updown_base(void)
@@ -687,6 +720,10 @@ static void test_UDS_SETBUDDYINT(void)
 
 START_TEST(updown)
 {
+    HMODULE mod = GetModuleHandleA("comctl32.dll");
+
+    pSetWindowSubclass = (void*)GetProcAddress(mod, (LPSTR)410);
+
     InitCommonControls();
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
 
-- 
1.5.6.5


--=-0+LCYx0NqNA5oS121H2c--




More information about the wine-patches mailing list