From: Anton Baskanov baskanov@gmail.com
--- dlls/ddraw/tests/ddraw1.c | 67 +++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw2.c | 78 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw4.c | 78 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 78 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 301 insertions(+)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 167ef8a3dc4..77d1ab2a74a 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -3015,6 +3015,12 @@ static void test_coop_level_mode_set(void) {0, FALSE, 0}, };
+ static const struct message release_messages[] = + { + {WM_PAINT, FALSE, 0}, + {0, FALSE, 0}, + }; + memset(&devmode, 0, sizeof(devmode)); devmode.dmSize = sizeof(devmode); ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); @@ -3118,7 +3124,13 @@ static void test_coop_level_mode_set(void) param.user32_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.user32_height, "Expected surface height %lu, got %lu.\n", param.user32_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3242,7 +3254,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
/* For Wine. */ change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); @@ -3288,7 +3306,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3369,7 +3393,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3417,7 +3447,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); ok(ret, "Failed to get display mode.\n"); @@ -3465,7 +3501,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3539,7 +3581,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3587,7 +3635,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); ok(ret, "Failed to get display mode.\n"); @@ -3612,7 +3666,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
GetWindowRect(window, &r); flaky /* win8 */ @@ -3641,7 +3701,14 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL; + hr = IDirectDraw_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#lx.\n", hr);
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index de4778e8d24..055fe03d0b3 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -3107,6 +3107,12 @@ static void test_coop_level_mode_set(void) {0, FALSE, 0}, };
+ static const struct message release_messages[] = + { + {WM_PAINT, FALSE, 0}, + {0, FALSE, 0}, + }; + memset(&devmode, 0, sizeof(devmode)); devmode.dmSize = sizeof(devmode); ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); @@ -3215,7 +3221,13 @@ static void test_coop_level_mode_set(void) param.user32_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.user32_height, "Expected surface height %lu, got %lu.\n", param.user32_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3339,7 +3351,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
/* For Wine. */ change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); @@ -3385,7 +3403,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3466,7 +3490,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3514,7 +3544,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); ok(ret, "Failed to get display mode.\n"); @@ -3562,7 +3598,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3636,7 +3678,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3684,7 +3732,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); ok(ret, "Failed to get display mode.\n"); @@ -3709,7 +3763,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
GetWindowRect(window, &r); flaky /* win8 */ @@ -3755,7 +3815,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
/* The screen restore is a property of DDSCL_EXCLUSIVE */ hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL | DDSCL_FULLSCREEN); @@ -3779,7 +3845,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
hr = IDirectDraw2_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#lx.\n", hr); @@ -3830,7 +3902,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ref = IDirectDraw2_Release(ddraw); ok(!ref, "Unexpected refcount %lu.\n", ref); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 96bdbf37183..0381cbcbbe1 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -3347,6 +3347,12 @@ static void test_coop_level_mode_set(void) {0, FALSE, 0}, };
+ static const struct message release_messages[] = + { + {WM_PAINT, FALSE, 0}, + {0, FALSE, 0}, + }; + memset(&devmode, 0, sizeof(devmode)); devmode.dmSize = sizeof(devmode); ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); @@ -3455,7 +3461,13 @@ static void test_coop_level_mode_set(void) param.user32_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.user32_height, "Expected surface height %lu, got %lu.\n", param.user32_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3582,7 +3594,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
/* For Wine. */ change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); @@ -3628,7 +3646,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3702,7 +3726,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3750,7 +3780,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); ok(ret, "Failed to get display mode.\n"); @@ -3798,7 +3834,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3872,7 +3914,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3920,7 +3968,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); ok(ret, "Failed to get display mode.\n"); @@ -3945,7 +3999,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
GetWindowRect(window, &r); flaky /* win8 */ @@ -3991,7 +4051,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
/* The screen restore is a property of DDSCL_EXCLUSIVE */ hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL | DDSCL_FULLSCREEN); @@ -4015,7 +4081,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
hr = IDirectDraw4_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#lx.\n", hr); @@ -4066,7 +4138,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface4_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ref = IDirectDraw4_Release(ddraw); ok(!ref, "Unexpected refcount %lu.\n", ref); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 343ca652214..d40fc548fb7 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -3119,6 +3119,12 @@ static void test_coop_level_mode_set(void) {0, FALSE, 0}, };
+ static const struct message release_messages[] = + { + {WM_PAINT, FALSE, 0}, + {0, FALSE, 0}, + }; + memset(&devmode, 0, sizeof(devmode)); devmode.dmSize = sizeof(devmode); ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); @@ -3227,7 +3233,13 @@ static void test_coop_level_mode_set(void) param.user32_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.user32_height, "Expected surface height %lu, got %lu.\n", param.user32_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3354,7 +3366,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
/* For Wine. */ change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); @@ -3400,7 +3418,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3474,7 +3498,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3522,7 +3552,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); ok(ret, "Failed to get display mode.\n"); @@ -3570,7 +3606,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3644,7 +3686,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -3692,7 +3740,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); ok(ret, "Failed to get display mode.\n"); @@ -3717,7 +3771,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
GetWindowRect(window, &r); flaky /* win8 */ @@ -3763,7 +3823,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
/* The screen restore is a property of DDSCL_EXCLUSIVE */ hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL | DDSCL_FULLSCREEN); @@ -3787,7 +3853,13 @@ static void test_coop_level_mode_set(void) param.ddraw_width, ddsd.dwWidth); ok(ddsd.dwHeight == param.ddraw_height, "Expected surface height %lu, got %lu.\n", param.ddraw_height, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + expect_messages = NULL;
hr = IDirectDraw7_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#lx.\n", hr); @@ -3838,7 +3910,13 @@ static void test_coop_level_mode_set(void) registry_mode.dmPelsWidth, ddsd.dwWidth); ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %lu, got %lu.\n", registry_mode.dmPelsHeight, ddsd.dwHeight); + + flush_events(); + expect_messages = release_messages; IDirectDrawSurface7_Release(primary); + flush_events(); + ok(expect_messages->message == WM_PAINT, "Unexpected WM_PAINT.\n"); + expect_messages = NULL;
ref = IDirectDraw7_Release(ddraw); ok(!ref, "Unexpected refcount %lu.\n", ref);
From: Anton Baskanov baskanov@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57599 --- dlls/ddraw/surface.c | 4 ++++ dlls/ddraw/tests/ddraw1.c | 8 ++++---- dlls/ddraw/tests/ddraw2.c | 8 ++++---- dlls/ddraw/tests/ddraw4.c | 8 ++++---- dlls/ddraw/tests/ddraw7.c | 8 ++++---- 5 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 8cdaa48b753..319b8ea37e1 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -647,6 +647,10 @@ static ULONG ddraw_surface_release_iface(struct ddraw_surface *This) /* Release the device only after anything that may reference it (the * wined3d texture and rendertarget view in particular) is released. */ wined3d_device_decref(wined3d_device); + + if ((This->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) && (This->ddraw->flags & DDRAW_RESTORE_MODE) + && This->ddraw->swapchain_window) + RedrawWindow(This->ddraw->swapchain_window, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME); }
return iface_count; diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 77d1ab2a74a..7ccea8e2f60 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -3129,7 +3129,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3398,7 +3398,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3586,7 +3586,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3706,7 +3706,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
hr = IDirectDraw_RestoreDisplayMode(ddraw); diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 055fe03d0b3..7889d406fe3 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -3226,7 +3226,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3495,7 +3495,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3683,7 +3683,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3850,7 +3850,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
hr = IDirectDraw2_RestoreDisplayMode(ddraw); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 0381cbcbbe1..4360a7fa509 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -3466,7 +3466,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface4_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3731,7 +3731,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface4_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3919,7 +3919,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface4_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -4086,7 +4086,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface4_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
hr = IDirectDraw4_RestoreDisplayMode(ddraw); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index d40fc548fb7..162439260cc 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -3238,7 +3238,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface7_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3503,7 +3503,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface7_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3691,7 +3691,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface7_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
memset(&ddsd, 0, sizeof(ddsd)); @@ -3858,7 +3858,7 @@ static void test_coop_level_mode_set(void) expect_messages = release_messages; IDirectDrawSurface7_Release(primary); flush_events(); - todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); + ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message); expect_messages = NULL;
hr = IDirectDraw7_RestoreDisplayMode(ddraw);
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=150570
Your paranoid android.
=== w1064v1809 (32 bit report) ===
ddraw: ddraw1.c:3150: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064v1809 (64 bit report) ===
ddraw: ddraw1.c:3150: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064_2qxl (64 bit report) ===
ddraw: ddraw1.c:3150: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488). ddraw1.c:3719: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w10pro64_ja (64 bit report) ===
ddraw: ddraw1.c:3150: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064v1809 (32 bit report) ===
ddraw: ddraw2.c:3917: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(1032,776).
=== w1064_tsign (32 bit report) ===
ddraw: ddraw2.c:3247: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w10pro64 (32 bit report) ===
ddraw: ddraw2.c:3247: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064v1809 (64 bit report) ===
ddraw: ddraw2.c:3917: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(1032,776).
=== w1064_2qxl (64 bit report) ===
ddraw: ddraw2.c:3247: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064_adm (64 bit report) ===
ddraw: ddraw2.c:3247: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w10pro64_ar (64 bit report) ===
ddraw: ddraw2.c:3247: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064v1809 (32 bit report) ===
ddraw: ddraw4.c:3487: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488). ddraw4.c:4153: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(1032,776).
=== w1064_tsign (32 bit report) ===
ddraw: ddraw4.c:3487: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064v1809 (64 bit report) ===
ddraw: ddraw4.c:4153: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(1032,776).
=== w1064_2qxl (64 bit report) ===
ddraw: ddraw4.c:3487: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064_tsign (64 bit report) ===
ddraw: ddraw4.c:3487: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w10pro64 (64 bit report) ===
ddraw: ddraw4.c:4153: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(1032,776).
=== w10pro64_ja (64 bit report) ===
ddraw: ddraw4.c:3487: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w10pro64_zh_CN (64 bit report) ===
ddraw: ddraw4.c:3487: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064v1809 (32 bit report) ===
ddraw: ddraw7.c:3259: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488). ddraw7.c:3925: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(1032,776).
=== w1064_tsign (32 bit report) ===
ddraw: ddraw7.c:3259: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w10pro64 (32 bit report) ===
ddraw: ddraw7.c:3925: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(1032,776).
=== w1064v1809 (64 bit report) ===
ddraw: ddraw7.c:3259: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064_2qxl (64 bit report) ===
ddraw: ddraw7.c:3259: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064_adm (64 bit report) ===
ddraw: ddraw7.c:3259: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w1064_tsign (64 bit report) ===
ddraw: ddraw7.c:3259: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== w10pro64 (64 bit report) ===
ddraw: ddraw7.c:3925: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(1032,776).
=== w10pro64_zh_CN (64 bit report) ===
ddraw: ddraw7.c:3259: Test failed: Expected (0,0)-(640,480), got (-8,-8)-(648,488).
=== debian11b (64 bit WoW report) ===
Report validation errors: d3d11:d3d11 has no test summary line (early exit of the main process?) d3d11:d3d11 has unaccounted for todo messages d3d11:d3d11 returned a non-zero exit code despite reporting no failures
I don't think you can safely access "This" there. Barring some reason I'm forgetting, it may have already been freed.