From: Stefan Dösinger Subject: [PATCH 1/6] ddraw/tests: Test messages on focus loss (v4). Message-Id: <1416342417-15963-1-git-send-email-stefan@codeweavers.com> Date: Tue, 18 Nov 2014 21:26:52 +0100 Version 3: Check the return value of SetForegroundWindow. This is consistent with other ddraw tests. Ddraw seems to put the process in foreground like d3d9, so those calls succeed even when started from a minimized terminal. Alexandre: If the tests fail please check if the patch applied correctly. Version 2 seems to have applied incorrectly for Henri. Henri: I saw test failures without focus earlier today on Vista. I cannot reproduce them any more, and the testbot doesn't bring up any failures either. Version 2: Do not restore the primary surface after restoring focus. This works around a crash in GetSurfaceDesc on the Windows 8 testbot. GetSurfaceDesc after a mode change seems to be unstable on the testbot and/or Windows 8 in general. I don't have a real Win8 machine to compare. If this causes more issues in further changes to the test we can move the surface size checks after mode changes into a separate test to make it easier to maintain a call sequence that doesn't hit the bug. --- dlls/ddraw/tests/ddraw1.c | 100 +++++++++++++++++++++++++++++++------------- dlls/ddraw/tests/ddraw2.c | 104 ++++++++++++++++++++++++++++++++-------------- dlls/ddraw/tests/ddraw4.c | 104 ++++++++++++++++++++++++++++++++-------------- dlls/ddraw/tests/ddraw7.c | 104 ++++++++++++++++++++++++++++++++-------------- 4 files changed, 290 insertions(+), 122 deletions(-) diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 0ae204c..c736f57 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -428,12 +428,26 @@ static void destroy_material(IDirect3DMaterial *material) IDirect3DMaterial_Release(material); } -static const UINT *expect_messages; +struct message +{ + UINT message; + BOOL check_wparam; + WPARAM expect_wparam; +}; + +static const struct message *expect_messages; static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { - if (expect_messages && message == *expect_messages) + if (expect_messages && message == expect_messages->message) + { + if (expect_messages->check_wparam) + ok (wparam == expect_messages->expect_wparam, + "Got unexpected wparam %lx for message %x, expected %lx.\n", + wparam, message, expect_messages->expect_wparam); + ++expect_messages; + } return DefWindowProcA(hwnd, message, wparam, lparam); } @@ -1878,15 +1892,15 @@ static void test_wndproc(void) HRESULT hr; ULONG ref; - static const UINT messages[] = + static struct message messages[] = { - WM_WINDOWPOSCHANGING, - WM_MOVE, - WM_SIZE, - WM_WINDOWPOSCHANGING, - WM_ACTIVATE, - WM_SETFOCUS, - 0, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_MOVE, FALSE, 0}, + {WM_SIZE, FALSE, 0}, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_ACTIVATE, FALSE, 0}, + {WM_SETFOCUS, FALSE, 0}, + {0, FALSE, 0}, }; /* DDSCL_EXCLUSIVE replaces the window's window proc. */ @@ -1906,7 +1920,7 @@ static void test_wndproc(void) expect_messages = messages; hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; proc = GetWindowLongPtrA(window, GWLP_WNDPROC); ok(proc != (LONG_PTR)test_proc, "Expected wndproc != %#lx, got %#lx.\n", @@ -2147,19 +2161,34 @@ static void test_coop_level_mode_set(void) BOOL ret; LONG change_ret; - static const UINT exclusive_messages[] = + static const struct message exclusive_messages[] = + { + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_WINDOWPOSCHANGED, FALSE, 0}, + {WM_SIZE, FALSE, 0}, + {WM_DISPLAYCHANGE, FALSE, 0}, + {0, FALSE, 0}, + }; + static const struct message exclusive_focus_loss_messages[] = { - WM_WINDOWPOSCHANGING, - WM_WINDOWPOSCHANGED, - WM_SIZE, - WM_DISPLAYCHANGE, - 0, + {WM_ACTIVATE, TRUE, WA_INACTIVE}, + /*{WM_DISPLAYCHANGE, FALSE, 0}, Not yet implemented on Wine. */ + {WM_WINDOWPOSCHANGING, FALSE, 0}, + /* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of + * SW_MINIMIZED, causing a recursive window activation that does not + * produe the same result in Wine yet. Ignore the difference for now. + * {WM_ACTIVATE, TRUE, 0x200000 | WA_ACTIVE}, */ + {WM_WINDOWPOSCHANGED, FALSE, 0}, + {WM_MOVE, FALSE, 0}, + {WM_SIZE, TRUE, SIZE_MINIMIZED}, + {WM_ACTIVATEAPP, TRUE, FALSE}, + {0, FALSE, 0}, }; - static const UINT normal_messages[] = + static const struct message normal_messages[] = { - WM_DISPLAYCHANGE, - 0, + {WM_DISPLAYCHANGE, FALSE, 0}, + {0, FALSE, 0}, }; ddraw = create_ddraw(); @@ -2234,7 +2263,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == param.ddraw_width && screen_size.cy == param.ddraw_height, "Expected screen size %ux%u, got %ux%u.\n", @@ -2280,7 +2309,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height, "Expected screen size %ux%u, got %ux%u.\n", @@ -2291,6 +2320,19 @@ static void test_coop_level_mode_set(void) user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom, r.left, r.top, r.right, r.bottom); + expect_messages = exclusive_focus_loss_messages; + ret = SetForegroundWindow(GetDesktopWindow()); + ok(ret, "Failed to set foreground window.\n"); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + + ShowWindow(window, SW_RESTORE); + hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); + /* Normally the primary should be restored here. Unfortunately this causes the + * GetSurfaceDesc call after the next display mode change to crash on the Windows 8 + * testbot. Another Restore call would presumably avoid the crash, but it also moots + * the point of the GetSurfaceDesc call. */ + PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE); expect_messages = exclusive_messages; screen_size.cx = 0; @@ -2299,7 +2341,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth && screen_size.cy == registry_mode.dmPelsHeight, @@ -2385,7 +2427,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2409,7 +2451,7 @@ static void test_coop_level_mode_set(void) } ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2453,7 +2495,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2548,7 +2590,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2565,7 +2607,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2609,7 +2651,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 334d89e..0a7b27e 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -361,12 +361,26 @@ static void destroy_material(IDirect3DMaterial2 *material) IDirect3DMaterial2_Release(material); } -static const UINT *expect_messages; +struct message +{ + UINT message; + BOOL check_wparam; + WPARAM expect_wparam; +}; + +static const struct message *expect_messages; static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { - if (expect_messages && message == *expect_messages) + if (expect_messages && message == expect_messages->message) + { + if (expect_messages->check_wparam) + ok (wparam == expect_messages->expect_wparam, + "Got unexpected wparam %lx for message %x, expected %lx.\n", + wparam, message, expect_messages->expect_wparam); + ++expect_messages; + } return DefWindowProcA(hwnd, message, wparam, lparam); } @@ -2066,15 +2080,15 @@ static void test_wndproc(void) HRESULT hr; ULONG ref; - static const UINT messages[] = + static struct message messages[] = { - WM_WINDOWPOSCHANGING, - WM_MOVE, - WM_SIZE, - WM_WINDOWPOSCHANGING, - WM_ACTIVATE, - WM_SETFOCUS, - 0, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_MOVE, FALSE, 0}, + {WM_SIZE, FALSE, 0}, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_ACTIVATE, FALSE, 0}, + {WM_SETFOCUS, FALSE, 0}, + {0, FALSE, 0}, }; /* DDSCL_EXCLUSIVE replaces the window's window proc. */ @@ -2094,7 +2108,7 @@ static void test_wndproc(void) expect_messages = messages; hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; proc = GetWindowLongPtrA(window, GWLP_WNDPROC); ok(proc != (LONG_PTR)test_proc, "Expected wndproc != %#lx, got %#lx.\n", @@ -2346,19 +2360,34 @@ static void test_coop_level_mode_set(void) BOOL ret; LONG change_ret; - static const UINT exclusive_messages[] = + static const struct message exclusive_messages[] = { - WM_WINDOWPOSCHANGING, - WM_WINDOWPOSCHANGED, - WM_SIZE, - WM_DISPLAYCHANGE, - 0, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_WINDOWPOSCHANGED, FALSE, 0}, + {WM_SIZE, FALSE, 0}, + {WM_DISPLAYCHANGE, FALSE, 0}, + {0, FALSE, 0}, + }; + static const struct message exclusive_focus_loss_messages[] = + { + {WM_ACTIVATE, TRUE, WA_INACTIVE}, + /*{WM_DISPLAYCHANGE, FALSE, 0}, Not yet implemented on Wine. */ + {WM_WINDOWPOSCHANGING, FALSE, 0}, + /* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of + * SW_MINIMIZED, causing a recursive window activation that does not + * produe the same result in Wine yet. Ignore the difference for now. + * {WM_ACTIVATE, TRUE, 0x200000 | WA_ACTIVE}, */ + {WM_WINDOWPOSCHANGED, FALSE, 0}, + {WM_MOVE, FALSE, 0}, + {WM_SIZE, TRUE, SIZE_MINIMIZED}, + {WM_ACTIVATEAPP, TRUE, FALSE}, + {0, FALSE, 0}, }; - static const UINT normal_messages[] = + static const struct message normal_messages[] = { - WM_DISPLAYCHANGE, - 0, + {WM_DISPLAYCHANGE, FALSE, 0}, + {0, FALSE, 0}, }; ddraw = create_ddraw(); @@ -2438,7 +2467,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == param.ddraw_width && screen_size.cy == param.ddraw_height, "Expected screen size %ux%u, got %ux%u.\n", @@ -2484,7 +2513,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height, "Expected screen size %ux%u, got %ux%u.\n", @@ -2495,6 +2524,19 @@ static void test_coop_level_mode_set(void) user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom, r.left, r.top, r.right, r.bottom); + expect_messages = exclusive_focus_loss_messages; + ret = SetForegroundWindow(GetDesktopWindow()); + ok(ret, "Failed to set foreground window.\n"); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + + ShowWindow(window, SW_RESTORE); + hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); + /* Normally the primary should be restored here. Unfortunately this causes the + * GetSurfaceDesc call after the next display mode change to crash on the Windows 8 + * testbot. Another Restore call would presumably avoid the crash, but it also moots + * the point of the GetSurfaceDesc call. */ + PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE); expect_messages = exclusive_messages; screen_size.cx = 0; @@ -2503,7 +2545,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw2_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth && screen_size.cy == registry_mode.dmPelsHeight, @@ -2589,7 +2631,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2613,7 +2655,7 @@ static void test_coop_level_mode_set(void) } ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2657,7 +2699,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2752,7 +2794,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2769,7 +2811,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2813,7 +2855,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw2_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2874,7 +2916,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == registry_mode.dmPelsWidth && screen_size.cy == registry_mode.dmPelsHeight, @@ -2945,7 +2987,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw2_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index f9b94a4..f34f728 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -391,12 +391,26 @@ static void destroy_material(IDirect3DMaterial3 *material) IDirect3DMaterial3_Release(material); } -static const UINT *expect_messages; +struct message +{ + UINT message; + BOOL check_wparam; + WPARAM expect_wparam; +}; + +static const struct message *expect_messages; static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { - if (expect_messages && message == *expect_messages) + if (expect_messages && message == expect_messages->message) + { + if (expect_messages->check_wparam) + ok (wparam == expect_messages->expect_wparam, + "Got unexpected wparam %lx for message %x, expected %lx.\n", + wparam, message, expect_messages->expect_wparam); + ++expect_messages; + } return DefWindowProcA(hwnd, message, wparam, lparam); } @@ -2253,15 +2267,15 @@ static void test_wndproc(void) HRESULT hr; ULONG ref; - static const UINT messages[] = + static struct message messages[] = { - WM_WINDOWPOSCHANGING, - WM_MOVE, - WM_SIZE, - WM_WINDOWPOSCHANGING, - WM_ACTIVATE, - WM_SETFOCUS, - 0, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_MOVE, FALSE, 0}, + {WM_SIZE, FALSE, 0}, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_ACTIVATE, FALSE, 0}, + {WM_SETFOCUS, FALSE, 0}, + {0, FALSE, 0}, }; /* DDSCL_EXCLUSIVE replaces the window's window proc. */ @@ -2281,7 +2295,7 @@ static void test_wndproc(void) expect_messages = messages; hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; proc = GetWindowLongPtrA(window, GWLP_WNDPROC); ok(proc != (LONG_PTR)test_proc, "Expected wndproc != %#lx, got %#lx.\n", @@ -2533,19 +2547,34 @@ static void test_coop_level_mode_set(void) BOOL ret; LONG change_ret; - static const UINT exclusive_messages[] = + static const struct message exclusive_messages[] = { - WM_WINDOWPOSCHANGING, - WM_WINDOWPOSCHANGED, - WM_SIZE, - WM_DISPLAYCHANGE, - 0, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_WINDOWPOSCHANGED, FALSE, 0}, + {WM_SIZE, FALSE, 0}, + {WM_DISPLAYCHANGE, FALSE, 0}, + {0, FALSE, 0}, + }; + static const struct message exclusive_focus_loss_messages[] = + { + {WM_ACTIVATE, TRUE, WA_INACTIVE}, + /*{WM_DISPLAYCHANGE, FALSE, 0}, Not yet implemented on Wine. */ + {WM_WINDOWPOSCHANGING, FALSE, 0}, + /* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of + * SW_MINIMIZED, causing a recursive window activation that does not + * produe the same result in Wine yet. Ignore the difference for now. + * {WM_ACTIVATE, TRUE, 0x200000 | WA_ACTIVE}, */ + {WM_WINDOWPOSCHANGED, FALSE, 0}, + {WM_MOVE, FALSE, 0}, + {WM_SIZE, TRUE, SIZE_MINIMIZED}, + {WM_ACTIVATEAPP, TRUE, FALSE}, + {0, FALSE, 0}, }; - static const UINT normal_messages[] = + static const struct message normal_messages[] = { - WM_DISPLAYCHANGE, - 0, + {WM_DISPLAYCHANGE, FALSE, 0}, + {0, FALSE, 0}, }; ddraw = create_ddraw(); @@ -2625,7 +2654,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == param.ddraw_width && screen_size.cy == param.ddraw_height, "Expected screen size %ux%u, got %ux%u.\n", @@ -2671,7 +2700,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height, "Expected screen size %ux%u, got %ux%u.\n", @@ -2682,6 +2711,19 @@ static void test_coop_level_mode_set(void) user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom, r.left, r.top, r.right, r.bottom); + expect_messages = exclusive_focus_loss_messages; + ret = SetForegroundWindow(GetDesktopWindow()); + ok(ret, "Failed to set foreground window.\n"); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + + ShowWindow(window, SW_RESTORE); + hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); + /* Normally the primary should be restored here. Unfortunately this causes the + * GetSurfaceDesc call after the next display mode change to crash on the Windows 8 + * testbot. Another Restore call would presumably avoid the crash, but it also moots + * the point of the GetSurfaceDesc call. */ + PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE); expect_messages = exclusive_messages; screen_size.cx = 0; @@ -2690,7 +2732,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw4_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth && screen_size.cy == registry_mode.dmPelsHeight, @@ -2776,7 +2818,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2793,7 +2835,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2837,7 +2879,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw4_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2932,7 +2974,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2949,7 +2991,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2993,7 +3035,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw4_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -3054,7 +3096,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == registry_mode.dmPelsWidth && screen_size.cy == registry_mode.dmPelsHeight, @@ -3125,7 +3167,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw4_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 9da588a..62eedf0 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -324,12 +324,26 @@ static IDirect3DDevice7 *create_device(HWND window, DWORD coop_level) return device; } -static const UINT *expect_messages; +struct message +{ + UINT message; + BOOL check_wparam; + WPARAM expect_wparam; +}; + +static const struct message *expect_messages; static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { - if (expect_messages && message == *expect_messages) + if (expect_messages && message == expect_messages->message) + { + if (expect_messages->check_wparam) + ok (wparam == expect_messages->expect_wparam, + "Got unexpected wparam %lx for message %x, expected %lx.\n", + wparam, message, expect_messages->expect_wparam); + ++expect_messages; + } return DefWindowProcA(hwnd, message, wparam, lparam); } @@ -1931,15 +1945,15 @@ static void test_wndproc(void) HRESULT hr; ULONG ref; - static const UINT messages[] = + static struct message messages[] = { - WM_WINDOWPOSCHANGING, - WM_MOVE, - WM_SIZE, - WM_WINDOWPOSCHANGING, - WM_ACTIVATE, - WM_SETFOCUS, - 0, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_MOVE, FALSE, 0}, + {WM_SIZE, FALSE, 0}, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_ACTIVATE, FALSE, 0}, + {WM_SETFOCUS, FALSE, 0}, + {0, FALSE, 0}, }; /* DDSCL_EXCLUSIVE replaces the window's window proc. */ @@ -1959,7 +1973,7 @@ static void test_wndproc(void) expect_messages = messages; hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; proc = GetWindowLongPtrA(window, GWLP_WNDPROC); ok(proc != (LONG_PTR)test_proc, "Expected wndproc != %#lx, got %#lx.\n", @@ -2210,19 +2224,34 @@ static void test_coop_level_mode_set(void) BOOL ret; LONG change_ret; - static const UINT exclusive_messages[] = + static const struct message exclusive_messages[] = { - WM_WINDOWPOSCHANGING, - WM_WINDOWPOSCHANGED, - WM_SIZE, - WM_DISPLAYCHANGE, - 0, + {WM_WINDOWPOSCHANGING, FALSE, 0}, + {WM_WINDOWPOSCHANGED, FALSE, 0}, + {WM_SIZE, FALSE, 0}, + {WM_DISPLAYCHANGE, FALSE, 0}, + {0, FALSE, 0}, + }; + static const struct message exclusive_focus_loss_messages[] = + { + {WM_ACTIVATE, TRUE, WA_INACTIVE}, + /*{WM_DISPLAYCHANGE, FALSE, 0}, Not yet implemented on Wine. */ + {WM_WINDOWPOSCHANGING, FALSE, 0}, + /* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of + * SW_MINIMIZED, causing a recursive window activation that does not + * produe the same result in Wine yet. Ignore the difference for now. + * {WM_ACTIVATE, TRUE, 0x200000 | WA_ACTIVE}, */ + {WM_WINDOWPOSCHANGED, FALSE, 0}, + {WM_MOVE, FALSE, 0}, + {WM_SIZE, TRUE, SIZE_MINIMIZED}, + {WM_ACTIVATEAPP, TRUE, FALSE}, + {0, FALSE, 0}, }; - static const UINT normal_messages[] = + static const struct message normal_messages[] = { - WM_DISPLAYCHANGE, - 0, + {WM_DISPLAYCHANGE, FALSE, 0}, + {0, FALSE, 0}, }; ddraw = create_ddraw(); @@ -2302,7 +2331,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == param.ddraw_width && screen_size.cy == param.ddraw_height, "Expected screen size %ux%u, got %ux%u.\n", @@ -2348,7 +2377,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height, "Expected screen size %ux%u, got %ux%u.\n", @@ -2359,6 +2388,19 @@ static void test_coop_level_mode_set(void) user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom, r.left, r.top, r.right, r.bottom); + expect_messages = exclusive_focus_loss_messages; + ret = SetForegroundWindow(GetDesktopWindow()); + ok(ret, "Failed to set foreground window.\n"); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + + ShowWindow(window, SW_RESTORE); + hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); + /* Normally the primary should be restored here. Unfortunately this causes the + * GetSurfaceDesc call after the next display mode change to crash on the Windows 8 + * testbot. Another Restore call would presumably avoid the crash, but it also moots + * the point of the GetSurfaceDesc call. */ + PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE); expect_messages = exclusive_messages; screen_size.cx = 0; @@ -2367,7 +2409,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw7_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth && screen_size.cy == registry_mode.dmPelsHeight, @@ -2453,7 +2495,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2470,7 +2512,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2514,7 +2556,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2609,7 +2651,7 @@ static void test_coop_level_mode_set(void) change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2626,7 +2668,7 @@ static void test_coop_level_mode_set(void) hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height); ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2670,7 +2712,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw7_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); @@ -2731,7 +2773,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(screen_size.cx == registry_mode.dmPelsWidth && screen_size.cy == registry_mode.dmPelsHeight, @@ -2802,7 +2844,7 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw7_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr); - ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL; ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy); -- 2.0.4