This reduce the time to run the monitor test from 6 minutes to 25 seconds.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50086 Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com --- v2: Supersede 205626, 205628~205630. Don't randomly test display modes.
dlls/user32/tests/monitor.c | 39 ++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c index 6b233970ace..4510e15b79b 100644 --- a/dlls/user32/tests/monitor.c +++ b/dlls/user32/tests/monitor.c @@ -333,6 +333,7 @@ static void test_ChangeDisplaySettingsEx(void) DISPLAY_DEVICEA dd; POINTL position; DEVMODEW dmW; + BOOL found; LONG res; int i;
@@ -732,7 +733,7 @@ static void test_ChangeDisplaySettingsEx(void) ok(count == old_count - 1, "Expect monitor count %d, got %d\n", old_count - 1, count); }
- /* Test changing each adapter to every available mode */ + /* Test changing each adapter to different width, height, frequency and depth */ position.x = 0; position.y = 0; for (device = 0; device < device_count; ++device) @@ -741,6 +742,42 @@ static void test_ChangeDisplaySettingsEx(void) dm.dmSize = sizeof(dm); for (mode = 0; EnumDisplaySettingsExA(devices[device].name, mode, &dm, 0); ++mode) { + if (mode == 0) + { + dm2 = dm; + } + else + { + found = FALSE; + if (dm2.dmPelsWidth && dm.dmPelsWidth != dm2.dmPelsWidth) + { + dm2.dmPelsWidth = 0; + found = TRUE; + } + if (dm2.dmPelsHeight && dm.dmPelsHeight != dm2.dmPelsHeight) + { + dm2.dmPelsHeight = 0; + found = TRUE; + } + if (dm2.dmDisplayFrequency && dm.dmDisplayFrequency != dm2.dmDisplayFrequency) + { + dm2.dmDisplayFrequency = 0; + found = TRUE; + } + if (dm2.dmBitsPerPel && dm.dmBitsPerPel != dm2.dmBitsPerPel) + { + dm2.dmBitsPerPel = 0; + found = TRUE; + } + + if (!dm2.dmPelsWidth && !dm2.dmPelsHeight && !dm2.dmDisplayFrequency + && !dm2.dmBitsPerPel) + break; + + if (!found) + continue; + } + dm.dmPosition = position; dm.dmFields |= DM_POSITION; /* Reattach detached non-primary adapters, otherwise ChangeDisplaySettingsExA with only CDS_RESET fails */