Henri Verbeet : d3d8/tests: Check for multiple expected messages in test_wndproc().

Alexandre Julliard julliard at winehq.org
Thu Nov 4 12:52:51 CDT 2010


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Nov  4 10:37:30 2010 +0100

d3d8/tests: Check for multiple expected messages in test_wndproc().

---

 dlls/d3d8/tests/device.c |   63 ++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 52 insertions(+), 11 deletions(-)

diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c
index a9ca496..2774b6a 100644
--- a/dlls/d3d8/tests/device.c
+++ b/dlls/d3d8/tests/device.c
@@ -1520,11 +1520,21 @@ cleanup:
 }
 
 static HWND filter_messages;
-static struct
+
+enum message_window
+{
+    DEVICE_WINDOW,
+    FOCUS_WINDOW,
+};
+
+struct message
 {
-    HWND window;
     UINT message;
-} expect_message;
+    enum message_window window;
+};
+
+static const struct message *expect_messages;
+static HWND device_window, focus_window;
 
 struct wndproc_thread_param
 {
@@ -1541,7 +1551,27 @@ static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM
             todo_wine ok(0, "Received unexpected message %#x for window %p.\n", message, hwnd);
     }
 
-    if (expect_message.window == hwnd && expect_message.message == message) expect_message.message = 0;
+    if (expect_messages)
+    {
+        HWND w;
+
+        switch (expect_messages->window)
+        {
+            case DEVICE_WINDOW:
+                w = device_window;
+                break;
+
+            case FOCUS_WINDOW:
+                w = focus_window;
+                break;
+
+            default:
+                w = NULL;
+                break;
+        };
+
+        if (hwnd == w && expect_messages->message == message) ++expect_messages;
+    }
 
     return DefWindowProcA(hwnd, message, wparam, lparam);
 }
@@ -1580,7 +1610,6 @@ static DWORD WINAPI wndproc_thread(void *param)
 static void test_wndproc(void)
 {
     struct wndproc_thread_param thread_params;
-    HWND device_window, focus_window, tmp;
     IDirect3DDevice8 *device;
     WNDCLASSA wc = {0};
     IDirect3D8 *d3d8;
@@ -1588,6 +1617,17 @@ static void test_wndproc(void)
     LONG_PTR proc;
     ULONG ref;
     DWORD res, tid;
+    HWND tmp;
+
+    static const struct message messages[] =
+    {
+        {WM_ACTIVATE,           FOCUS_WINDOW},
+        {WM_SETFOCUS,           FOCUS_WINDOW},
+        {WM_WINDOWPOSCHANGING,  DEVICE_WINDOW},
+        {WM_MOVE,               DEVICE_WINDOW},
+        {WM_SIZE,               DEVICE_WINDOW},
+        {0,                     0},
+    };
 
     if (!(d3d8 = pDirect3DCreate8(D3D_SDK_VERSION)))
     {
@@ -1630,11 +1670,10 @@ static void test_wndproc(void)
     ok(tmp == thread_params.dummy_window, "Expected foreground window %p, got %p.\n",
             thread_params.dummy_window, tmp);
 
-    expect_message.window = focus_window;
-    expect_message.message = WM_SETFOCUS;
-
     flush_events();
 
+    expect_messages = messages;
+
     device = create_device(d3d8, device_window, focus_window, FALSE);
     if (!device)
     {
@@ -1642,8 +1681,10 @@ static void test_wndproc(void)
         goto done;
     }
 
-    ok(!expect_message.message, "Expected message %#x for window %p, but didn't receive it.\n",
-            expect_message.message, expect_message.window);
+    ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it.\n",
+            expect_messages->message, expect_messages->window);
+    expect_messages = NULL;
+
     if (0) /* Disabled until we can make this work in a reliable way on Wine. */
     {
         tmp = GetFocus();
@@ -1717,7 +1758,6 @@ done:
 static void test_wndproc_windowed(void)
 {
     struct wndproc_thread_param thread_params;
-    HWND device_window, focus_window, tmp;
     IDirect3DDevice8 *device;
     WNDCLASSA wc = {0};
     IDirect3D8 *d3d8;
@@ -1726,6 +1766,7 @@ static void test_wndproc_windowed(void)
     HRESULT hr;
     ULONG ref;
     DWORD res, tid;
+    HWND tmp;
 
     if (!(d3d8 = pDirect3DCreate8(D3D_SDK_VERSION)))
     {




More information about the wine-cvs mailing list